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