Quando lemos entradas digitais lemos apenas bits.
Para lermos números é necessário combinar os bits lidos de forma compor um número.
Lembrando a composição de um número binário
Abaixo uma função que faz a leitura de 4 bits
#define bt_in0 8
#define bt_in1 9
#define bt_in2 10
#define bt_in3 11
byte le_byte (void){
byte b0, b1, b2, b3;
byte numero;
b0 = digitalRead (bt_in0);
b1 = digitalRead (bt_in1);
b2 = digitalRead (bt_in2);
b3 = digitalRead (bt_in3);
numero = b3*8 + b2*4 + b1*2 + b0;
return numero;
}
Entendendo a função
byte le_byte (void)
- byte - no início da declaração da função prevê que ao final da função ela retornará um valor do tipo byte
- le_byte - nome escolhido para a função
- void - prevê a que a função não recebe nenhum parâmetro
===============================
byte b0, b1, b2, b3;
byte numero;
- Declara variáveis do tipo byte
===============================
b0 = digitalRead (bt_in0);
b1 = digitalRead (bt_in1);
b2 = digitalRead (bt_in2);
b3 = digitalRead (bt_in3);
- Lê o valor digital em cada pino e armazena em uma variável
===============================
numero = b3*8 + b2*4 + b1*2 + b0;
- Calula o número compondo o valor binário
===============================
return numero;
- Devolve o numero lido lido nos pinos digitais
Usando a função
byte contador=0; // cria uma variável do tipo byte (0 a 255) e inicilaiza com valor 0
contador = le_byte();
Atividades
1 - Crie um skecth para ler 4 bits e mostrar o numero lido em 4 leds.
Dica: Para mostrar o número lido utilze a função "escreve_byte" utilizada na atividade contador binário
2 - Crie um novo skecth utilizando o anterior para:
ler um número com 6 bits
mostrar os 6 bits lidos em leds
3 - Crie um novo skecth para:
- Ler um numero de 8 bits
- Possuir 4 leds para indicar que
- O número é igual a 100
- O número é menor que 50
- O número está entre 25 e 125
- O número é maior que 200
/*
* Leitura de um número por entrada digital
* Atividade 1
*
* Adicional -> Inclusão do módulo LCD I2C
*/
//Inclusão de bibliotecas
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // Criando um LCD de 16x2 no endereço 0x27
//apelidos para as saídas
#define led0 0
#define led1 1
#define led2 2
#define led3 3
//apelido para as entradas
#define entrada0 8
#define entrada1 9
#define entrada2 10
#define entrada3 11
//variavel para trabalhar
int valor;
// função para transformar um número em saídas em formato binário
void escreve_byte (byte x){
if ( x & 0b00000001) digitalWrite(led0, HIGH); else digitalWrite (led0, LOW);
if ( x & 0b00000010) digitalWrite(led1, HIGH); else digitalWrite (led1, LOW);
if ( x & 0b00000100) digitalWrite(led2, HIGH); else digitalWrite (led2, LOW);
if ( x & 0b00001000) digitalWrite(led3, HIGH); else digitalWrite (led3, LOW);
}
// função para transformar entradas binárias em um valor numérico
byte le_byte (void){
byte b0, b1, b2, b3;
byte numero;
b0 = digitalRead (entrada0);
b1 = digitalRead (entrada1);
b2 = digitalRead (entrada2);
b3 = digitalRead (entrada3);
numero = b3*8 + b2*4 + b1*2 + b0;
return numero;
}
void setup() {
// configurações de entradas e saídas digitais
pinMode (led0, OUTPUT);
pinMode (led1, OUTPUT);
pinMode (led2, OUTPUT);
pinMode (led3, OUTPUT);
pinMode (entrada0, INPUT_PULLUP);
pinMode (entrada1, INPUT_PULLUP);
pinMode (entrada2, INPUT_PULLUP);
pinMode (entrada3, INPUT_PULLUP);
// comandos do lcd
lcd.init(); // Inicializando o LCD
lcd.backlight(); // Ligando o BackLight do LCD
}
void loop() {
// put your main code here, to run repeatedly:
valor = le_byte();
escreve_byte(valor);
// imprime o numero em binário
lcd.setCursor (0,0);
lcd.print("Bin=");
lcd.print(valor,BIN);
lcd.print(" ");
//imprime o numero em Hexadecimal
lcd.setCursor (0,1);
lcd.print("Hex=");
lcd.print(valor,HEX);
lcd.print(" ");
// imprime o numero em decimal
lcd.setCursor (8,1);
lcd.print("Dec=");
lcd.print(valor,DEC);
lcd.print(" ");
}
Nenhum comentário:
Postar um comentário