/******************************************************************************* * * Projeto 52: Usando o Módulo RTC DS3231 com despertador para Arduino * http://squids.com.br/arduino * *******************************************************************************/ #include #include DS3231 rtc(SDA, SCL); LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE); uint32_t timer = 0; uint32_t timerBuzz = 0; int control = 0; int controlBuzz = 0; int estado = 1; Time t; int buzPin = 5; int buttonPin = 2; int Hor; int Min; int Sec; void setup() { rtc.begin(); lcd.begin(16,2); Serial.begin(9600); pinMode(buzPin, OUTPUT); pinMode(buttonPin, INPUT_PULLUP); //rtc.setDOW(TUESDAY); // Altere o dia da semana SUNDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY e SATURDAY //rtc.setTime(18, 10, 0); // Altere o tempo (formato de 24horas) //rtc.setDate(24, 1, 2019); // Dia, mês, Ano } void loop() { // pega valores individuais de hora, nin e sec t = rtc.getTime(); Hor = t.hour; Min = t.min; Sec = t.sec; // inicia a exibição lcd.setCursor(4,0); //lcd.print("Real Time Clock "); lcd.print(rtc.getTimeStr()); if( Hor == 17 && (Min == 1 || Min == 2)) { // Altere a hora e minuto para acionar o buzzer estado = digitalRead(buttonPin); Buzzer(); } else { estado = 1; controlBuzz = 0; } switch(control) { case 0: { lcd.setCursor(0,1); lcd.print("Data: "); lcd.print(rtc.getDateStr()); temporizador(1); break; } case 1: { lcd.setCursor(0,1); lcd.print("Dia : "); lcd.print(rtc.getDOWStr()); lcd.print(" "); temporizador(2); break; } case 2: { lcd.setCursor(0,1); lcd.print("Temp: "); lcd.print(rtc.getTemp()); lcd.print(" C"); lcd.print(" "); temporizador(3); break; } case 3: { lcd.setCursor(0,1); lcd.print(" Squids Arduino"); temporizador(0); break; } } } void Buzzer() { if (estado == 0) { // se o botão foi pressionado digitalWrite(buzPin,LOW); controlBuzz = 2; } switch(controlBuzz) { case 0: digitalWrite(buzPin,HIGH); if (millis() - timer >=500) { controlBuzz = 1; timer = millis(); // Atualiza a referência } break; case 1: digitalWrite(buzPin,LOW); if (millis() - timer >=500) { controlBuzz = 0; timer = millis(); // Atualiza a referência } break; case 2: digitalWrite(buzPin,LOW); break; } } void temporizador(int x) { if (millis() - timer >=3000) { control = x; timer = millis(); // Atualiza a referência } }