#include <TM1637Display.h>
#include <Wire.h>
#include <RTClib.h>
RTC_DS1307 rtc;
//Portas dos itens relacionados ao nivel de agua
//Portas dos itens relacionados ao timer
#define pot A0
int potvalue;
//Portas dos itens relacionados a irrigação
int H;
int M;
int time = 1010;
int atv;
TM1637Display display = TM1637Display(3, 2);
//************Botão************
#define pinBotaoStart 10
#define tempoReset 2000
#define tempoContador 30
//*****************************
#define buzzer 12
int tempoatual;
void setup() {
rtc.begin();
Serial.begin(9600);
pinMode(buzzer, OUTPUT);
pinMode(pinBotaoStart, INPUT_PULLUP);
display.setBrightness(7);
display.clear();
}
void buzzersound (int buzmenu){
switch (buzmenu){
case 1:
tone(buzzer, 494);
delay(200);
noTone(buzzer);
delay(200);
tone(buzzer, 494);
delay(200);
noTone(buzzer);
delay(200);
tone(buzzer, 494);
delay(200);
noTone(buzzer);
break;
case 2:
tone(buzzer, 1568);
delay(100);
noTone(buzzer);
break;
case 3:
tone(buzzer, 988);
delay(100);
noTone(buzzer);
delay(100);
tone(buzzer, 1047);
delay(100);
noTone(buzzer);
delay(100);
tone(buzzer, 1175);
delay(100);
noTone(buzzer);
break;
}
}
void hour (){
uint8_t data[] = {0xff, 0xff, 0xff, 0xff};
display.setSegments(data);
delay(1000);
display.clear();
buzzersound(2);
while ( digitalRead(10)== 1 ){
potvalue=map(analogRead(pot),0,1023,0,23);
if (potvalue != atv){
display.showNumberDecEx(potvalue*100, 0b11100000, true);}
atv=potvalue;
delay(5);
}
H=potvalue;
buzzersound(2);
delay(200);
display.clear();
minute();
}
void minute (){
delay(1000);
while (digitalRead(10)== 1){
potvalue=map(analogRead(pot),0,1023,0,59);
if (potvalue != atv){
display.showNumberDecEx(potvalue, 0b11100000, true);}
atv=potvalue;
delay(5);}
M=potvalue;
buzzersound(2);
delay(1000);
Serial.println("----------------Configuração concluida----------------");
time=H*100+M;
display.showNumberDecEx(time, 0b11100000, true);
buzzersound(3);
delay(2000);
display.clear();
}
void loop() {
DateTime agora = rtc.now();
display.showNumberDecEx(agora.hour()*100+agora.minute(), 0b11100000, true);
byte estadoBotaoStart = pinBotaoStartApertado();
if ( estadoBotaoStart == 1 ) {}
if ( estadoBotaoStart == 2 ) {Serial.println("----------------Configurando o alarme----------------");
hour();
}
if (agora.hour()== H && agora.minute()== M && agora.second() <= 5 ){
buzzersound(1);
}
}
byte pinBotaoStartApertado() {
#define tempoDebounce 50 //(tempo para eliminar o efeito Bounce EM MILISEGUNDOS)
static bool estadoBotaoAnt;
static unsigned long delayBotao = 0;
static unsigned long botaoApertado;
static byte fase = 0;
bool estadoBotao;
byte estadoRet;
estadoRet = 0;
if ( (millis() - delayBotao) > tempoDebounce ) {
estadoBotao = digitalRead(pinBotaoStart);
if ( !estadoBotao && (estadoBotao != estadoBotaoAnt) ) {
delayBotao = millis();
botaoApertado = millis();
fase = 1;
}
if ( (fase == 1) && ((millis() - botaoApertado) > tempoReset) ) {
fase = 0;
estadoRet = 2;
}
if ( estadoBotao && (estadoBotao != estadoBotaoAnt) ) {
delayBotao = millis();
if ( fase == 1 ) {
estadoRet = 1;
}
fase = 0;
}
estadoBotaoAnt = estadoBotao;
}
return estadoRet;
}