Moderadores: andre_luis, 51, guest2003, Renie
<STX><CMD><ADDRESS><D1><D2><D3><D4><CHECKSUM><ETX>
. No caso, o byte CMD acima poderia ter funções como Envia ou Retorno. a variavel ADDRESS seria o endereço de cada receptor./*
Este Sketch realiza um contador de 0 - 9 - 0
utilizando um display 7 seguimentos juntamente com o CI HCF4511 e mais
2 botões para incremento/decremento
*/
const int a = 4; //define contador binário // a-1, b-2, c-4, d-8 do HCF4511
const int b = 5;
const int c = 6;
const int d = 7;
const int botao_UP = 3; //botão Up conectado ao pino 9
const int botao_DW = 2; //botão Down conectado ao pino 10
const int saida = 11; //define o pino 11 como saída PWM
const int debounce_time = 10;
int conta = 5; //estado inicial da variável "conta" que será mostrado no display
int estado_botao_UP; //variável de leitura estado do botão
int estado_anterior_botao_UP; //variável de leitura estado anterior do botão
int estado_botao_DW; //variável de leitura estado do botão
int estado_anterior_botao_DW; //variável de leitura estado anterior do botão
boolean debounce(int pin) {
int contador = 0;
boolean estado; //guarda o estado do botão
boolean estado_anterior; //guarda o ultimo estado do botão
do {
estado = digitalRead(pin);
if(estado != estado_anterior) { // compara-se o estado atual com o anterior
contador = 0; // reinicia o contador
estado_anterior = estado;
}
else {
contador = contador + 1; // aumenta o contador em 1
}
delay(1);
} while(contador < debounce_time);
return estado;
}
void atualiza_numero() {
switch(conta) { // São atribuidos valores de 0 à 9 a variável
case 0: // De acordo com cada valor o mcu executa as instruções dentro do Switch Case
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(saida, LOW);
break; // Neste momento o programa finaliza as instruções, sem o Break iria executar as outras instruções.
case 1:
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
analogWrite (saida, 5); //escrevemos um valor entre 0 - 255 na saída PWM sendo 0 para nenhum brilho e 255 para máximo brilho do LED
break;
case 2:
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
analogWrite(saida, 18);
break;
case 3:
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
analogWrite(saida, 45);
break;
case 4:
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
analogWrite(saida, 80);
break;
case 5:
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
analogWrite(saida, 110);
break;
case 6:
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
analogWrite(saida, 140);
break;
case 7:
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
analogWrite(saida, 175);
break;
case 8:
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
analogWrite(saida, 215);
break;
case 9:
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(saida, HIGH);
break;
}
}
void setup() {
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(botao_UP, INPUT); //declaramos os botões como entradas digitais
pinMode(botao_DW, INPUT);
pinMode(saida, OUTPUT); //declaramos o pino 11 como saída para o PWM
}
void loop(){
if(estado_botao_UP != estado_anterior_botao_UP){ //se houver mudança no estado // "!=" é o mesmo que "diferente"
if(debounce(botao_UP)) { //checa se está pressionado
conta++; //incrementa a contagem
if(conta > 9) {
conta = 9;
}
}
}
estado_anterior_botao_UP = estado_botao_UP; //guarda o estado do botão
estado_botao_DW = digitalRead(botao_DW); //lê o estado do botão
if(estado_botao_DW != estado_anterior_botao_DW){ //se houver mudança
if(debounce(botao_DW)) { //checa se está pressionado
conta--; //decrementa a contagem
if(conta < 0) {
conta = 0;
}
}
}
estado_anterior_botao_DW = estado_botao_DW;
atualiza_numero();
}
Rodrigo Lange escreveu:Como faço pra quando pressionar o "botao_UP" por mais de 500ms a variável "conta" receba o valor "9" por exemplo??? Mesma coisa pro botão Down receber "0". ?
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante