#define ledR 9
#define ledG 10
#define ledB 11
#define btn 2
int clic = 0;
int declic = 0;
int ciclo = 0;
unsigned long estadoTempo = 0; //ultimo tempo de mudança do estado do botao
unsigned long sinalTempo = 50; //delay para de sinal após pressionar o botao millisegundo
void ledRed() {
analogWrite(ledR, 255);
analogWrite(ledG, 0);
analogWrite(ledB, 0);
}
void ledGreen() {
analogWrite(ledR, 0);
analogWrite(ledG, 255);
analogWrite(ledB, 0);
}
void ledBlue() {
analogWrite(ledR, 0);
analogWrite(ledG, 0);
analogWrite(ledB, 255);
}
void ledYellow() {
analogWrite(ledR, 255);
analogWrite(ledG, 255);
analogWrite(ledB, 0);
}
void ledColor1() {
analogWrite(ledR, 255);
analogWrite(ledG, 0);
analogWrite(ledB, 255);
}
void ledColor2() {
analogWrite(ledR, 0);
analogWrite(ledG, 255);
analogWrite(ledB, 255);
}
void all_Off() {
analogWrite(ledR, 0);
analogWrite(ledG, 0);
analogWrite(ledB, 0);
}
void trocaLed() {
switch (ciclo) {
case 0:
ledRed();
break;
case 1:
ledGreen();
break;
case 2:
ledBlue();
break;
case 3:
ledYellow();
break;
case 4:
ledColor1();
break;
case 5:
ledColor2();
break;
case 6:
all_Off();
break;
}
ciclo = (ciclo + 1) % 7; //atualiza o ciclo a cada pressão so botao e resetar após o ultimo estado
}
void clicBtn() {
int estadoBtn = digitalRead(btn);
//verifica se o estado do botão mudou
if (estadoBtn != declic) {
estadoTempo = millis(); //resetar o tempo do estado
}
if ((millis() - estadoTempo) > sinalTempo) { //verifica a cada intervalo do tempo se houver mundança do estado
if (estadoBtn == HIGH && clic == 0) {
clic = 1;
trocaLed();
} else if (estadoBtn == LOW) {
clic = 0;
}
}
declic = estadoBtn; //atualiza o último estado lido do botão
}
void setup() {
pinMode(ledR, OUTPUT);
pinMode(ledG, OUTPUT);
pinMode(ledB, OUTPUT);
pinMode(btn, INPUT_PULLUP);
}
void loop() {
clicBtn();
}