/******************************************************************************* * * Projeto 53: RTC DS3231 - Alarme com pino SQW * http://squids.com.br/arduino * * Referência: * Web: http://www.jarzebski.pl * (c) 2014 by Korneliusz Jarzebski * *******************************************************************************/ #include #include #include DS3231 clock; RTCDateTime dt; uint32_t timer = 0; int control = 0; LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE); void setup() { Serial.begin(9600); lcd.begin(16,2); pinMode(2, INPUT_PULLUP); pinMode(5, OUTPUT); pinMode(7, OUTPUT); // Initialize DS3231 Serial.println("Initialize DS3231");; clock.begin(); // Disarm alarms and clear alarms for this example, because alarms is battery backed. // Under normal conditions, the settings should be reset after power and restart microcontroller. clock.armAlarm1(false); clock.armAlarm2(false); clock.clearAlarm1(); clock.clearAlarm2(); // Manual (Year, Month, Day, Hour, Minute, Second) //clock.setDateTime(2019, 3, 4, 15, 13, 54); // alarmes (1) // Set Alarm - Every second. // DS3231_EVERY_SECOND is available only on Alarm1. // setAlarm1(Date or Day, Hour, Minute, Second, Mode, Armed = true) // clock.setAlarm1(0, 0, 0, 0, DS3231_EVERY_SECOND); // Set Alarm1 - Every 20s in each minute // setAlarm1(Date or Day, Hour, Minute, Second, Mode, Armed = true) // clock.setAlarm1(0, 0, 0, 20, DS3231_MATCH_S); // Set Alarm1 - Every 01m:25s in each hour // setAlarm1(Date or Day, Hour, Minute, Second, Mode, Armed = true) // clock.setAlarm1(0, 0, 1, 25, DS3231_MATCH_M_S); // Set Alarm1 - Every 01h:10m:30s in each day // setAlarm1(Date or Day, Hour, Minute, Second, Mode, Armed = true) // clock.setAlarm1(0, 1, 10, 30, DS3231_MATCH_H_M_S); // Set Alarm1 - 07h:00m:00s in 25th day in month // setAlarm1(Date or Day, Hour, Minute, Second, Mode, Armed = true) // clock.setAlarm1(25, 7, 0, 0, DS3231_MATCH_DT_H_M_S); // Set Alarm1 - 10h:45m:30s in every Friday (1 - Mon, 7 - Sun) // setAlarm1(Date or Day, Hour, Minute, Second, Mode, Armed = true) // clock.setAlarm1(5, 10, 40, 30, DS3231_MATCH_DY_H_M_S); // alarmes (2) // Set Alarm - Every full minute. // DS3231_EVERY_MINUTE is available only on Alarm2. // setAlarm2(Date or Day, Hour, Minute, Second, Mode, Armed = true) // clock.setAlarm2(0, 0, 0, 0, DS3231_EVERY_MINUTE); // Set Alarm2 - Every 01m in each hour // setAlarm2(Date or Day, Hour, Minute, Mode, Armed = true) // clock.setAlarm2(0, 0, 37, DS3231_MATCH_M); // Set Alarm - Hora e minutos coincidem (Ex: 16:52min). // DS3231_MATCH_H_M is available only on Alarm2. // setAlarm2(Date or Day, Hour, Minute, Mode, Armed = true) // clock.setAlarm2(0, 18, 49, DS3231_MATCH_H_M); // Set Alarm - Data, horas e minutos coincidem. // DS3231_MATCH_DT_H_M is available only on Alarm2. // setAlarm2(Date or Day, Hour, Minute, , Mode, Armed = true) //clock.setAlarm2(0, 0, 0, 0, DS3231_MATCH_DT_H_M); // Set Alarm -10h:45m in every Friday (1 - Mon, 7 - Sun) // DS3231_EVERY_MINUTE is available only on Alarm2. // setAlarm2(Date or Day, Hour, Minute, Mode, Armed = true) //clock.setAlarm2(5, 10, 45, DS3231_EVERY_MINUTE); // Check alarm settings checkAlarms(); } void loop() { dt = clock.getDateTime(); float t = clock.readTemperature(); clock.forceConversion(); Serial.println(clock.dateFormat("d-m-Y H:i:s - l", dt)); // inicia a exibição no display LCD lcd.setCursor(4,0); if (dt.hour < 10) { lcd.print("0"); } lcd.print(dt.hour); lcd.print(":"); if (dt.minute < 10) { lcd.print("0"); } lcd.print(dt.minute); lcd.print(":"); if (dt.second < 10) { lcd.print("0"); } lcd.print((dt.second)); // Controle do display de LCD (2ª linha) switch(control) { case 0: { lcd.setCursor(0,1); lcd.print("Data: "); lcd.print(dt.day); lcd.print("/"); lcd.print(dt.month); lcd.print("/"); lcd.print(dt.year); lcd.print(" "); temporizador(1); break; } case 1: { lcd.setCursor(0,1); lcd.print("Temp: "); lcd.print(t); lcd.print(" C"); lcd.print(" "); temporizador(2); break; } case 2: { lcd.setCursor(0,1); lcd.print(" Squids Arduino"); lcd.print(" "); temporizador(0); break; } } // Call isAlarm1(false) if you want clear alarm1 flag manualy by clearAlarm1(); if (clock.isAlarm1()) { Serial.print("ALARM 1 TRIGGERED! "); digitalWrite(7, HIGH); } // Call isAlarm2(false) if you want clear alarm1 flag manualy by clearAlarm2(); if (clock.isAlarm2()) { Serial.print("ALARM 2 TRIGGERED! "); digitalWrite(5, HIGH); } } // end void loop void checkAlarms() { RTCAlarmTime a1; RTCAlarmTime a2; if (clock.isArmed1()) { a1 = clock.getAlarm1(); Serial.print("Alarm1 será disparado "); switch (clock.getAlarmType1()) { case DS3231_EVERY_SECOND: Serial.println("todo segundo"); break; case DS3231_MATCH_S: Serial.print("quando os segundos coincidirem com: "); Serial.println(clock.dateFormat("__ __:__:s", a1)); break; case DS3231_MATCH_M_S: Serial.print("quando os minutos e segundos coincidirem com: "); Serial.println(clock.dateFormat("__ __:i:s", a1)); break; case DS3231_MATCH_H_M_S: Serial.print("quando horas, minutos e segundos coincidirem com: "); Serial.print(clock.dateFormat("__ H:i:s", a1)); break; case DS3231_MATCH_DT_H_M_S: Serial.print("quando a data, horas, minotos e segundos coincidirem com: "); Serial.println(clock.dateFormat("d H:i:s", a1)); break; case DS3231_MATCH_DY_H_M_S: Serial.print("quando o dia da semana, horas, minutos e segundos coincidirem com: "); Serial.println(clock.dateFormat("l H:i:s", a1)); break; default: Serial.println("UNKNOWN RULE"); break; } } else { Serial.println("Alarm1 is disarmed."); } if (clock.isArmed2()) { a2 = clock.getAlarm2(); Serial.print("Alarm2 será disparado "); switch (clock.getAlarmType2()) { case DS3231_EVERY_MINUTE: Serial.println("todo minuto"); break; case DS3231_MATCH_M: Serial.print("Quando minutos coincidirem com: "); Serial.println(clock.dateFormat("__ __:i:s", a2)); break; case DS3231_MATCH_H_M: Serial.print("Quando as horas e minutos coincidirem com: "); Serial.println(clock.dateFormat("__ H:i:s", a2)); break; case DS3231_MATCH_DT_H_M: Serial.print("Quando a data, hora e minutos coincidirem com: "); Serial.println(clock.dateFormat("d H:i:s", a2)); break; case DS3231_MATCH_DY_H_M: Serial.print("Quando o dia da semana, horas e minutos coincidirem com: "); Serial.print(clock.dateFormat("l H:i:s", a2)); break; default: Serial.println("UNKNOWN RULE"); break; } } else { Serial.println("Alarm2 is disarmed."); } } // atualiza a cada 3 segundos void temporizador(int x) { if (millis() - timer >=3000) { control = x; timer = millis(); // Atualiza a referência } }