Começaremos através deste artigo, nosso primeiro post com soluções para Arduino.
Neste rápido tutorial, mostraremos como acionar um display de 7 segmentos utilizando a plataforma Arduino.
Nosso projeto difere-se dos demais, pois utiliza o circuito integrado CD 4511 (datasheet disponível aqui).
O objetivo de se utilizar este CI, é economizar portas de saída do Arduino, pois com o CD 4511, necessitamos apenas de 4 portas do Arduino, para acionar os 7 segmentos deste display.
Abaixo vídeo demonstrando o circuito em funcionamento:
Note que foi adicionado o efeito de fader para desvanecimento do digito. Para isso, apenas ligamos no pino 10 o anodo comum do display, e variamos a intensidade do brilho, baseado no tempo.
No código, geramos o BCD (para entrada do 4511) usando um array bidimensional onde colocamos todos os dígitos a serem exibidos (de 0 a 9) e o valor a ser colocado nos 4 pinos de saída do Arduino (1 ou 0) .
O código ainda exibe na saída serial, a tabela verdade do dígito exibido.
Abaixo o código:
/*
Display de 7 segmentos ligado atravs do circuito integrado
CD 4511
*/
const int pinA = 6; //LSB bit MENOS significativo
const int pinB = 7;
const int pinC = 8;
const int pinD = 9; //MDB bit MAIS significativo
// D C B A
byte digitos[10][4] ={ { 0,0,0,0 }, // = 0
{ 0,0,0,1 }, // = 1
{ 0,0,1,0 }, // = 2
{ 0,0,1,1 }, // = 3
{ 0,1,0,0 }, // = 4
{ 0,1,0,1 }, // = 5
{ 0,1,1,0 }, // = 6
{ 0,1,1,1 }, // = 7
{ 1,0,0,0 }, // = 8
{ 1,0,0,1 } // = 9
};
const int faderPin = 10;
void setup(){
pinMode(pinA, OUTPUT);
pinMode(pinB, OUTPUT);
pinMode(pinC, OUTPUT);
pinMode(pinD, OUTPUT);
pinMode(faderPin, OUTPUT);
Serial.begin(9600);
}
void loop(){
// CONTAGEM CRESCENTE
//
for (byte count = 0; count < 10; ++count) {
imprimeBCD(count);
fadeOut();
delay(500);
}
Serial.print("*****************\n\n");
delay(2000);
}
void imprimeBCD(byte digit) {
byte pin = 9; // pino do MSB bit mais significativo
Serial.print(digit);Serial.print(",\n ");
Serial.print("D C B A \n");
for (byte segCount = 0; segCount < 4; ++segCount) {
imprimeTabelaVerdade(pin, digitos[digit][segCount]);
digitalWrite(pin, digitos[digit][segCount]); //envia BCD para 4511
--pin; // decrementa pino do bit
}
fadeIn();
Serial.print("\n\n");
}
void imprimeTabelaVerdade(int p, int estado){
switch (p) {
case 6:
Serial.print(" ");
Serial.print(estado);
Serial.print(" ");
break;
case 7:
Serial.print(" ");
Serial.print(estado);
Serial.print(" ");
break;
case 8:
Serial.print(" ");
Serial.print(estado);
Serial.print(" ");
break;
case 9:
Serial.print(" ");
Serial.print(estado);
Serial.print(" ");
break;
}
}
void fadeOut(){
for(int i = 0; i < 255; ++i)
{
analogWrite(faderPin, i);
delay(5);
}
digitalWrite(faderPin, HIGH);
}
void fadeIn(){
for(int i = 255; i > 0; --i)
{
analogWrite(faderPin, i);
delay(5);
}
digitalWrite(faderPin, LOW);
}
Nenhum comentário:
Postar um comentário