Nessa atividade utilizando o simulador Proteus vimos um pouco do display de 7 segmentos. Há dois tipos de display, anodo comum e catodo comum, onde o que muda é o nível do sinal para ligar o LED. Cada pino do display é referente à um led e é especificado no diagrama de cada peça.
A atividade desenvolvida em sala pedia que fosse criado um contador de 0 a 9. Mas primeiro eu precisava definir o sinal para o display. Segue o código:
byte seven_seg_digits[10][7] = { { 1,1,1,1,1,1,0 }, // = 0
{ 0,1,1,0,0,0,0 }, // = 1
{ 1,1,0,1,1,0,1 }, // = 2
{ 1,1,1,1,0,0,1 }, // = 3
{ 0,1,1,0,0,1,1 }, // = 4
{ 1,0,1,1,0,1,1 }, // = 5
{ 1,0,1,1,1,1,1 }, // = 6
{ 1,1,1,0,0,0,0 }, // = 7
{ 1,1,1,1,1,1,1 }, // = 8
{ 1,1,1,0,0,1,1 } // = 9
};
void sevenSegWrite(byte var) {
byte pin = 1;
for (byte cont = 0; cont < 7; ++cont) {
digitalWrite(pin, seven_seg_digits[var][cont]);
++pin;
}
}
Depois disso bastou colocou um FOR para fazer a contagem:
void setup() {
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
}
void loop() {
for (byte var = 0; var < 10; var++) {
delay(1000);
sevenSegWrite(var);
}
Em seguida a atividade pediu que o mesmo contador ao bater 9 fizesse a contagem inversa, o que foi mais simples ainda de se fazer com outro FOR no código.
for (byte var = 10; var > 0; --var) {
delay(1000);
sevenSegWrite(var - 1);
}
E para finalizar criar uma função com dois botões para incrementar e decrementar o valor.
void loop() {
sevenSegWrite(control);
button_1 = digitalRead(8);
button_2 = digitalRead(9);
if (button_1 == 0 && control < 9) {
++control;
}
if (button_2 == 0 && control > 0) {
--control;
}
delay(200);
}
sexta-feira, 28 de setembro de 2018
Assinar:
Postar comentários (Atom)


0 comentários:
Postar um comentário