Nesse post irei ensinar como comandar um display de 7 segmentos do tipo cathodo comum, lembrando que voce pode usar o anodo comum, bastando inverter a polaridade(o que é high ppassa a ser LOW e vice-versa).
Para isso precisariamos ter um arduino(dããã) e um display 7 segmentos 4 digitos, que é o bixao da foto:
Bom pessoal antes de eu explicar a voces tenho que te falar como funciona um display, cada barrinha que faz um numero é na verdade um led que vai ser aceso por um pino especifico do arduino. Como num display são 8 barrinhas, como podem ver na imagem:
Então cada saída aciona um led e voce vai controlando entre os pinos high e low para formar o seu numero.
Por exemplo: vamos supor que voce quer fazer o "1" e voce colocou os pinos de 1 ate o 7 devidamente setados na função void setup.
então no void loop voce coloca:
digitalWrite(1,LOW);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
}
Esse é o espirito, e ah partir dahe voce bola suas maracutaias pra formar os numeros, usando função case, if numa variavel que vai se mudando e formando o valor, o céu é o limite.
Agora voces me perguntam: Tá mas e num display de 4 digitos? o arduino não tem tantas saídas para 4 displays.
É agora que entra um fenomeno interessante: A persistencia da visão
O display de 4 segmentos tem as mesmas saidas pros leds, mas uma saída em especifica para cada coluna. Então o que fazemos? ligamos a coluna um, escrevemos o que queremos lah, desligamos ela, ligamos a 2, escrevemos e assim vai sucessivamente, só que bastante rápido e o olho não percebe este efeito.
veja um exemplo:
Antes de tudo pessoal gostaria de falar que esse código em especifico foi escrito 100% por mim, não tirei de nenhum lugar, apenas estudei bastante e com base nele escrevi essa graçinha. Nm sequer tem partes de outros códigos, então, se forem copiar, por favor mantenham a fonte^^
Nesse código eu leio os dados de um sensor qualquer e mostro os valores no display.É util pra quase qualquer coisa, desde mostrar valores de voltimetro a sensores comuns de tomada analógica.
Segue o código comentado:
------------------
//Criado por Luciano Cristiano de Oliveira Braun
//dia 13/10/2016
//Podem copiar,alterar,desde de que preservem a fonte
int a=0;
int b=0;
int sensor=A1;
int valor=0;
int valor1=0;
int valor2=0;
int valor3=0;
int valor4=0; //Os valores de 0 a 4 serão usados para conversão do sensor
int dg1=8;
int dg2=9;
int dg3=10;
int dg4=11;
unsigned long tempo;
int referencia=0;
int contar=0;
void setup() {
pinMode(sensor,INPUT);
DDRD = B11111110; //aqui declarei as saídas de 1 a 7 direto na porta registradora ganhando tempo
pinMode(dg1,OUTPUT);
pinMode(dg2,OUTPUT);
pinMode(dg3,OUTPUT);
pinMode(dg4,OUTPUT);
}
void loop() {
switch (b){
case 0:
PORTD = B01111110;
break;
case 1:
PORTD = B00001100;
break;
case 2:
PORTD = B10110110;
break;
case 3:
PORTD =B10011110;
break;
case 4:
PORTD = B11001100;
break;
case 5:
PORTD = B11011010;
break;
case 6:
PORTD = B11111010;
break;
case 7:
PORTD = B00001110;
break;
case 8:
PORTD =B11111110;
break;
case 9:
PORTD = B11001110;
break;
//mesma coisa na função case,declarei o pinos como HIGH e LOW como 1 e 0 direto,
//pra ganhar tempo, mas voces podem declarar um por um se julgarem mais facil
}
tempo=millis();
valor= analogRead(sensor);
valor=map(valor,0,1023,0,1000);
valor1= valor/10;
valor1=valor1*10;
valor1=valor-valor1;
valor2=valor/100;
valor2=valor2*100;
valor2=(valor -valor2)/10;
valor3=valor/1000;
valor3=valor3*1000;
valor3=(valor-valor3)/100;
valor4=valor/1000;
//uma formula complicada para converter os valores em centena,dezena e milhar
if(tempo - referencia>5){
referencia=tempo;
contar++;
//funcao millis que incrementa o refresh das variaveis
}
if(contar==1){
digitalWrite(dg1,HIGH);
digitalWrite(dg3,HIGH);
digitalWrite(dg2,HIGH);
digitalWrite(dg4,HIGH);
}
if (contar==2){
b=valor1;
digitalWrite(dg2,HIGH);
digitalWrite(dg1,HIGH);
digitalWrite(dg3,LOW);
digitalWrite(dg4,HIGH);
}
if (contar==3){
digitalWrite(dg2,HIGH);
digitalWrite(dg3,HIGH);
digitalWrite(dg1,HIGH);
digitalWrite(dg4,HIGH);
}
if(contar==4){
b=valor3;
digitalWrite(dg2,HIGH);
digitalWrite(dg1,LOW);
digitalWrite(dg3,HIGH);
digitalWrite(dg4,HIGH);
}
if(contar==5){
digitalWrite(dg2,HIGH);
digitalWrite(dg1,HIGH);
digitalWrite(dg3,HIGH);
digitalWrite(dg4,HIGH);
}
if (contar==6){
b=valor2;
digitalWrite(dg2,LOW);
digitalWrite(dg3,HIGH);
digitalWrite(dg1,HIGH);
digitalWrite(dg4,HIGH);
}
if(contar==7){
digitalWrite(dg2,HIGH);
digitalWrite(dg1,HIGH);
digitalWrite(dg3,HIGH);
digitalWrite(dg4,HIGH);
}
if(contar==8){
b=valor4;
digitalWrite(dg4,LOW);
digitalWrite(dg2,HIGH);
digitalWrite(dg1,HIGH);
digitalWrite(dg3,HIGH);
}
if(contar==9){
contar=1;
}
//o contar liga e desliga em cada numero os "pinos guias"notem que vai do dg1 ao dg4
//quando contar chega a 9 ele volta pro 1, para "contar" de novo
}
E é isso ahe pessoal,espero que tenham gostado. Em breve postarei o vídeo.
E como prometido eis o video
Nenhum comentário:
Postar um comentário