Arduino – Timer e sveglia (sketch)

Il progetto lo potete trovare qui
Potete vedere il filmato anche da youtube
Supportami su Patreon!
Seguimi anche sulla pagina di facebook! e sul canale di youtube

Di seguito trovate il codice sorgente del progetto.

Un piccolo appunto sul codice, è possibile inizializzare le porte ed accendere i LED utilizzando una funzione FOR se questi sono collegati ad ingressi adiacenti, ma nel caso in futuro fosse necessario, per qualsiasi ragione, spostare i collegamenti o riutilizzare il codice per altri progetti andrebbe riscritto tutto, di conseguenza preferisco immagazzinare il numero di ogni ingresso in una costante e poi lavorare solo con la costante, in questo modo se in un futuro fosse necessario modificare i collegamenti sarà sufficiente assegnare alla costante il nuovo valore e non sarà necessario altro lavoro.

const int piezoPin = 13;
const int LEDUnoPin = 7;
const int LEDDuePin = 6;
const int LEDTrePin = 5;
const int LEDQuattroPin = 4;
const int LEDCinquePin = 3;
const int LEDSeiPin = 2;
const int switchPin = A0;
const int LEDHoursPin = 9;
const int LEDMinutesPin = 10;
const int LEDConfirmationPin = 11;
unsigned long previousTime = 0;
int led = 1;
int minutes = 0;
int hours = 0;
int keyVal = 0;
long totalTime = 0;
long interval = 0;
void setup() {
pinMode(piezoPin, OUTPUT);
pinMode(LEDUnoPin, OUTPUT);
pinMode(LEDDuePin, OUTPUT);
pinMode(LEDTrePin, OUTPUT);
pinMode(LEDQuattroPin, OUTPUT);
pinMode(LEDCinquePin, OUTPUT);
pinMode(LEDSeiPin, OUTPUT);
pinMode(LEDHoursPin, OUTPUT);
pinMode(LEDMinutesPin, OUTPUT);
pinMode(LEDConfirmationPin, OUTPUT);
// Serial.begin(9600); //togliere il commento per testare i valori letti dall'ingresso analogico
while (keyVal != 1023) {
keyVal = analogRead(switchPin);
// Serial.println(keyVal); //togliere il commento per testare i valori letti dall'ingresso analogico
if(keyVal == 1023) {
if(minutes == 0 && hours == 0) {
digitalWrite(LEDConfirmationPin, HIGH);
delay(150);
digitalWrite(LEDConfirmationPin, LOW);
delay(150);
digitalWrite(LEDConfirmationPin, HIGH);
delay(300);
digitalWrite(LEDConfirmationPin, LOW);
delay(150);
digitalWrite(LEDConfirmationPin, HIGH);
delay(150);
digitalWrite(LEDConfirmationPin, LOW);
keyVal = 0;
} else {
digitalWrite(LEDConfirmationPin, HIGH);
delay(150);
digitalWrite(LEDConfirmationPin,LOW);
interval = (hours * 600000) + (minutes * 10000); // 3.600.000 millisecondi per ora diviso 6 = 600.000 millisicondi per intervallo + 60.000 millisecondi per minuto / 6 = 10.000 millisecondi per intervallo
}
}else if(keyVal >= 990 && keyVal <= 1010) { minutes++; digitalWrite(LEDMinutesPin, HIGH); delay(150); digitalWrite(LEDMinutesPin, LOW); } else if( keyVal >= 500 && keyVal <= 520) { hours++; digitalWrite(LEDHoursPin, HIGH); delay(150); digitalWrite(LEDHoursPin, LOW); } } keyVal = 0; previousTime = millis(); } void loop() { unsigned long currentTime = millis(); if(currentTime - previousTime > interval) {
previousTime = currentTime;
switch (led) {
case 1: digitalWrite(LEDUnoPin, HIGH);
break;
case 2: digitalWrite(LEDDuePin, HIGH);
break;
case 3: digitalWrite(LEDTrePin, HIGH);
break;
case 4: digitalWrite(LEDQuattroPin, HIGH);
break;
case 5: digitalWrite(LEDCinquePin, HIGH);
break;
case 6: digitalWrite(LEDSeiPin, HIGH);
tone(13, 262);
break;
}
led++;
}
}

Ti piaciono i miei tutorial e progetti? Aiutami a realizzarne altri. Supporta Zamein – Tutorials & Projects su Patreon!

2 thoughts on “Arduino – Timer e sveglia (sketch)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *