/*
1º desafio fazer com que os dois leds pisquem ao mesmo tempo, porém com frequencias
distintas.
O Led1 a cada 1 segundos e o led2 a cada 5 segundo
2º desafio, enquanto o led2 pisca a cada 1 segundo,
O botão 1 deve ligar e o botão 2 deve desligar o Led1.
3º incluir o led3 que deve piscar a cada 250 milisegundos.
4º incluir um botão que deve desligar o Led1, a cada click do botão ele deve ligar e desligar o pisca do led.
5º Mudar a informação do print, ele deve informar se o led irá acender ou apagar, fazer isso para cada um dos leds.
*/
// 1º Desafio
#define Led1 14
#define Led2 12
#define Led3 13
#define Bt1 21
bool bt1_pressionado;
bool bt1_ultimoEstado;
bool bt1_estadoAtual;
unsigned long tempoAtual = 0;
unsigned long tempoAnterior1 = 0;
unsigned long tempoAnterior2 = 0;
unsigned long tempoAnterior3 = 0;
bool debounce(bool ultimo) {
bool atual = digitalRead(Bt1);
if (ultimo != atual) {
delay(5);
atual = digitalRead(Bt1);
}
return atual;
}
void setup() {
Serial.begin(115200);
pinMode(Led1, OUTPUT);
pinMode(Led2, OUTPUT);
pinMode(Led3, OUTPUT);
pinMode(Bt1, INPUT_PULLUP);
bt1_pressionado = false;
bt1_ultimoEstado = false;
bt1_estadoAtual = false;
}
void loop() {
bt1_estadoAtual = debounce(bt1_ultimoEstado);
if (bt1_ultimoEstado == true && bt1_estadoAtual == false) { // verifica se o botão foi pressionado
bt1_pressionado = !bt1_pressionado; // inverte valor da variável
if (bt1_pressionado) {
Serial.println("botao pressionado");
} else {
Serial.println("botao liberado");
}
}
bt1_ultimoEstado = bt1_estadoAtual;
tempoAtual = millis();
// Pisca led3 a cada 250 milisegundos
if (bt1_pressionado) {
if (tempoAtual >= (tempoAnterior3 + 250)) {
tempoAnterior3 = tempoAtual;
digitalWrite(Led3, !digitalRead(Led3));
Serial.print("tempoAnterior3:"); // imprime o timer desde quando o programa foi iniciado
Serial.println(tempoAnterior3); // imprime o timer desde quando o programa foi iniciado
}
} else {
digitalWrite(Led3, LOW);
}
// Pisca led2 a cada 5 segundos
if (tempoAtual >= (tempoAnterior2 + 5000)) {
tempoAnterior2 = tempoAtual;
digitalWrite(Led2, !digitalRead(Led2));
Serial.print("tempoAnterior2:"); // imprime o timer desde quando o programa foi iniciado
Serial.println(tempoAnterior2); // imprime o timer desde quando o programa foi iniciado
}
// Pisca led1 a cada 1 segundos
if (tempoAtual >= (tempoAnterior1 + 1000)) {
tempoAnterior1 = tempoAtual;
digitalWrite(Led1, !digitalRead(Led1));
Serial.print("tempoAnterior1:"); // imprime o timer desde quando o programa foi iniciado
Serial.println(tempoAnterior1); // imprime o timer desde quando o programa foi iniciado
}
}