Timer - mcworkshop

MC   WORKSHOP
Vai ai contenuti

Menu principale:

Timer

Projects
Questo timer si basa sulla libreria TimeAlarms di Margolis. Non necessita di un RTC tipo DS1307 in quanto utilizza i timer interni. Necessita di una batteria tampone in caso di blackout. Il pulsante collegato al pin 4, se premuto, resetta l'LCD I2C; non viene persa ne l'ora ne la programmazione di accensione e spegnimento. E' in funzione da circa una ventina di giorni e l'orario è preciso. La programmazione degli allarmi e l'impostazione della data e dell'ora viene eseguita al caricamento dello sketch.


Clic to enlarge

Sketch
#include <TimeLib.h>
#include <TimeAlarms.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
AlarmId id;
int puls = 4; // pulsante al pin 4
int val = 0;
void setup() {
 Serial.begin(9600);
 pinMode(2, OUTPUT);//pin relè
 pinMode(4, INPUT); // reset LCD
 lcd.init();
 /*se si carica lo sketch durante il periodo di accensione attivare le due righe successive.
    lcd.backlight(); digitalWrite(2, HIGH);
   il tempo di caricamento è di circa 15 secondi.
    Se non si attivano le due righe di comando LCD resta spento e relè eccitato.
 */
 lcd.backlight();
 digitalWrite(2, HIGH);//il relè si eccita con low
 //
 while (!Serial) ;
 setTime(10, 17, 0, 26, 02, 20); // set time ora, minuti, secondi, giorno, mese, anno

 // allarmi
 Alarm.alarmRepeat(8, 30, 0, MorningAlarm);
 Alarm.alarmRepeat(21, 30, 0, EveningAlarm);
 /*per attivare un allarme settimanale
   // Alarm.alarmRepeat(dowSaturday, 8, 30, 30, WeeklyAlarm); // 8:30:30 every Saturday
 */
 // create timers, to trigger relative to when they're created
 Alarm.timerRepeat(15, Repeats);           // timer for every 15 seconds
 id = Alarm.timerRepeat(2, Repeats2);      // timer for every 2 seconds
 Alarm.timerOnce(10, OnceOnly);            // called once after 10 seconds
}
void loop() {
 lcd.setCursor(0, 0);
 lcd.print(hour());
 lcd.print(":");
 lcd.print(minute());
 lcd.print(":");
 lcd.print(second());
 lcd.print(" - ");
 lcd.print(day());
 lcd.print("/");
 lcd.print(month());
 lcd.print(" ");
 lcd.setCursor(0, 1);
 lcd.print("  8:30 - 21:30  ");
 digitalClockDisplay();
 Alarm.delay(1000); // wait one second between clock display
val = digitalRead (puls);
 if (val == 1)
 {
   lcd.clear();
   delay (10);
   lcd.init();
   delay (10);
   lcd.backlight();
   delay (10);
 }
}
// functions to be called when an alarm triggers:
void MorningAlarm() {
 Serial.println("Alarm: - turn lights off");
 lcd.backlight();
 digitalWrite(2, HIGH);
}
void EveningAlarm() {
 Serial.println("Alarm: - turn lights on");
 lcd.noBacklight();
 digitalWrite(2, LOW);
}
//void WeeklyAlarm() {
//  Serial.println("Alarm: - its Monday Morning");
//}
void ExplicitAlarm() {
 Serial.println("Alarm: - this triggers only at the given date and time");
}
void Repeats() {
 Serial.println("15 second timer");
}
void Repeats2() {
 Serial.println("2 second timer");
}
void OnceOnly() {
 Serial.println("This timer only triggers once, stop the 2 second timer");
 // use Alarm.free() to disable a timer and recycle its memory.
 Alarm.free(id);
 // optional, but safest to "forget" the ID after memory recycled
 id = dtINVALID_ALARM_ID;
 // you can also use Alarm.disable() to turn the timer off, but keep
 // it in memory, to turn back on later with Alarm.enable().
}
void digitalClockDisplay() {
 // digital clock display of the time
 Serial.print(hour());
 printDigits(minute());
 printDigits(second());
 Serial.println();
}
void printDigits(int digits) {
 Serial.print(":");
 if (digits < 10)
   Serial.print('0');
 Serial.print(digits);
}
 
Copyright 2015. All rights reserved.
Torna ai contenuti | Torna al menu