#include <Adafruit_NeoPixel.h> // Biblioteca Led RGB
#define PIN1 12//Pino RGB1
#define PIN2 13//Pino RGB2
#define NUM_PIXELS 1 //Quantidade de LEDS RGB por controlador
int LED1=3; //leds laterais para contagem
int LED2=4;
int LED3=5;
int LED4=6;
int LED5=7;
int LED6=8;
int LED7=9;
int LED8=10;
int LED9=11;
int menu=0;
unsigned long n=0;
const int botao=2; //Botão na placa. esse botão compartilha o primeiro led
// Leitura de pessão longa ou curta do botão:
const int LONG_PRESS_TIME = 1000; // 1000 millisegundos
const int SHORT_PRESS_TIME = 500; // 500 millisegundos
//variaveis pra detectar pressão do botao
int lastState = LOW; // Estado anterior do botao
int currentState; // leitura do estado do botão
unsigned long pressedTime = 0; //tempo pressionado
unsigned long releasedTime = 0; //tempo liberado
byte beep=0; //som
Adafruit_NeoPixel NeoPixel(NUM_PIXELS, PIN1, NEO_GRB + NEO_KHZ800); //configura led RGB
Adafruit_NeoPixel NeoPixel2(NUM_PIXELS, PIN2, NEO_GRB + NEO_KHZ800);
void setup(){
NeoPixel.begin(); //inicia o led rgb
NeoPixel2.begin();
pinMode(botao, INPUT_PULLUP);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
pinMode(LED6, OUTPUT);
pinMode(LED7, OUTPUT);
pinMode(LED8, OUTPUT);
pinMode(LED9, OUTPUT);
pinMode(PIN1, OUTPUT);
pinMode(PIN2, OUTPUT);
Serial.begin(9600);
delay(1000);
}
void loop(){
const int LONG_PRESS_TIME = 1000; // 1000 milliseconds
const int SHORT_PRESS_TIME = 500; // 500 milliseconds
currentState = digitalRead(botao); //fazendo a leitura do botao
if(lastState == HIGH && currentState == LOW) // botao esta pressionado
pressedTime = millis();
else if(lastState == LOW && currentState == HIGH) { // botao foi solto
releasedTime = millis();
long pressDuration = releasedTime - pressedTime;
if( pressDuration > LONG_PRESS_TIME ){
Serial.println("Pressao Longa");
contagem();} // chama o menu de contagem regressiva
if( pressDuration < SHORT_PRESS_TIME ){
Serial.println("Clique curto");
n = n += 1;} //conta o numero de cliques para LED
}
delay(200);
// salva o ultimo estado do botao
lastState = currentState;
unsigned long tempo = millis();
NeoPixel.clear();// apague led rgb
NeoPixel2.clear();
NeoPixel.show();// envia o comando para o led
NeoPixel2.show();
Serial.print(digitalRead(botao));
Serial.print(" LED aceso=");
Serial.println(n);// leds acesos
if(n==1){
digitalWrite(LED1, HIGH);}
if(n==2){
digitalWrite(LED2, HIGH);}
if(n==3){
digitalWrite(LED3, HIGH);}
if(n==4){
digitalWrite(LED4, HIGH);}
if(n==5){
digitalWrite(LED5, HIGH);}
if(n==6){
digitalWrite(LED6, HIGH);}
if(n==7){
digitalWrite(LED7, HIGH);}
if(n==8){
digitalWrite(LED8, HIGH);}
if(n==9){
digitalWrite(LED9, HIGH);}
if(n==10){
NeoPixel.setPixelColor(0, NeoPixel.Color(0, 0, 255));
NeoPixel.show();
/*digitalWrite(LED9, LOW);
digitalWrite(LED8, LOW);
digitalWrite(LED7, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED1, LOW);*/
}
if(n>=11 || n==0){
n=0; // Zera a contagem dos LEDS e apaga todos os acesos
NeoPixel.clear();
NeoPixel2.clear();
NeoPixel.show();
NeoPixel2.show();
digitalWrite(LED9, LOW);
digitalWrite(LED8, LOW);
digitalWrite(LED7, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED1, LOW);}
}
void bip(){ // aqui esta a confihuração do bip
while(digitalRead(botao) ==1 ){
n=0;
noTone(8); //desliga o som
tone(8, 840, 200);// play uma nota no pino 8 na frequencia 840 por 200 ms:
delay(400);
noTone(8);
tone(8, 520, 200);
delay(400);}
}
void contagem(){ //aqui acontece a contagem do tempo
/*NeoPixel.clear();
NeoPixel2.clear();
NeoPixel.show();
digitalWrite(LED9, LOW);
digitalWrite(LED8, LOW);
digitalWrite(LED7, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED1, LOW);*/
unsigned long disparo= millis()+(1000*n); //tempo de "disparo" do Bip 1 segundo = 1000 1 minuto = 60000
unsigned long n2 =((disparo - millis())/1000);// "n2" é variavel da contagem regressiva
while(millis() <= disparo){ //Faz a contagem e bo final Chama o Bip
Serial.print(disparo);
Serial.print("-");
Serial.print(millis());
Serial.print("=");
Serial.println((disparo - millis())/1000);
digitalWrite(LED1, (millis() / 1000) % 2);
digitalWrite(LED2, (millis() / 1000) % 2);
if((disparo - millis())/1000<=0){ //0 para segundos e 0 para minutos. Assim pra cada linha
digitalWrite(LED1, LOW);}
if((disparo - millis())/1000==1){ //1 para segundos e 60 para minutos
digitalWrite(LED2, LOW);}
if((disparo - millis())/1000==2){ //2 para segundos e 120 para minutos
digitalWrite(LED3, LOW);}
if((disparo - millis())/1000==3){ //3 ou 180
digitalWrite(LED4, LOW);}
if((disparo - millis())/1000==4){ //4 ou 240
digitalWrite(LED5, LOW);}
if((disparo - millis())/1000==5){ //5 ou 300
digitalWrite(LED6, LOW);}
if((disparo - millis())/1000==6){ //6 ou 360
digitalWrite(LED7, LOW);}
if((disparo - millis())/1000==7){ //7 ou 420
digitalWrite(LED8, LOW);}
if((disparo - millis())/1000==8){ //8 ou 480
digitalWrite(LED9, LOW);}
if((disparo - millis())/1000==9){ //9 ou 540
NeoPixel.clear();
NeoPixel.show();}
}
delay(500);
bip();
}