inspired by the Arduino Starter Kit example #8: ‚The Digital Hourglass‘, my daughter and I made a simple tea timer using two push buttons to enter two different desired times: 3 minutes and 5 minutes.
After pressing any of the push buttons all 6 LEDs will light up. Each one of the 6 LEDs will be turning off sequentially after an equal interval of time (timer time/6). When the timer reaches the set time, all LEDs will be off and a melody will start playing.
Here is a video showing the timer running for 1 minute (so it is not too long) :
Here is the circuit: the LEDs are connected to pins 2 to 7 of the Arduino, the speaker is connected to pin 9 and the push buttons are connected to the analog input A0:

I have another blog describing the Arduino Starter Kit examples:
To play the melody we were inspired by the Arduino example ‚Play a Melody‘, here is the link to the arduino website : https://www.arduino.cc/en/Tutorial/BuiltInExamples/toneMelody
My daugthter wrote the melody for this example.
Here is the code for the Arduino IDE and the file „pitches.h“:
/* Two Timers Option: push buttons. 6 LEDs go off sequentially. A Melody is played when the time is up. https://www.arduino.cc/en/Tutorial/BuiltInExamples/toneMelody*/#include "pitches.h"// notes in the melody:int melody_Sofie[] = { NOTE_C4, NOTE_G4, NOTE_AS4, NOTE_A4, NOTE_G4, NOTE_C4, NOTE_G4, NOTE_AS4, NOTE_C5, NOTE_G4, NOTE_C4, NOTE_G4, NOTE_AS4, NOTE_A4, NOTE_G4, NOTE_F4, NOTE_E4, NOTE_F4, NOTE_E4, NOTE_C4, NOTE_G3, NOTE_D4,};int length = sizeof(melody_Sofie)/2;// note durations: 4 = quarter note, 8 = eighth note, etc.:int noteDurations[] = { 4, 4, 4, 4, 1, 4, 4, 4, 4, 1, 4, 4, 4, 4, 4, 4, 1, 4, 4, 2, 8, 1,};int buttonPin = A0;const int buzzerPin = 9;int buttonState, prevButtonState, ledNr;unsigned long Interval, lastChangeTime;unsigned long time_in_ms = 0.0;bool timerRunning =false;void setup() { Serial.begin(9600); pinMode(buzzerPin, OUTPUT); ledNr = 2; // 6 LEDs are connected from pin 2 to pin 7 for (int x = 2; x < 8; x++) { pinMode(x, OUTPUT); } buttonState = 0;}//this function will play a melody void play_melody (int melody[]){for (int thisNote = 0; thisNote < 22; thisNote++) { // to calculate the note duration, take one second divided by the note type. //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc. int noteDuration = 1000 / noteDurations[thisNote]; tone(buzzerPin, melody[thisNote], noteDuration); // to distinguish the notes, set a minimum time between them. // the note's duration + 30% seems to work well: int pauseBetweenNotes = noteDuration * 1.3; delay(pauseBetweenNotes); // stop playing: noTone(buzzerPin); }}void allON(){ for (int x = 2; x < 8; x++) { digitalWrite(x, HIGH); } timerRunning = true; lastChangeTime = millis();}//this function will start the LED sequence until all LEDs are off and play the melodyvoid LED_Timer(unsigned long Interv){unsigned long currentTime= millis();long ledTime, ledInterv; ledNr = 2; ledTime = millis(); ledInterv = Interv/6.0; while(millis() < currentTime + Interv){ if(millis() >= ledTime + ledInterv){ ledTime += ledInterv; digitalWrite(ledNr, LOW); if (ledNr <= 7){ ledNr++; } } } digitalWrite(ledNr, LOW); if (ledNr >=7){ timerRunning = false; } if ((timerRunning == false)&&(ledNr >=7)){ play_melody(melody_Sofie); } }void loop() { int keyVal = analogRead(buttonPin); //read which button was pressed: delay(50); if (keyVal <= 1023 && keyVal > 600) { buttonState = 1; } else if (keyVal >= 505 && keyVal <= 515) { buttonState = 2; }else{ buttonState = 0; } //set the timer and call the LED sequence switch (buttonState){ case 0: noTone(buzzerPin); break; case 1: allON(); time_in_ms = 600000.0; // time in ms for a 10 minutes timer LED_Timer(time_in_ms); break; case 2: allON(); time_in_ms = 300000.0;// time in ms for a 5 minutes timer LED_Timer(time_in_ms); break; } }
File „pitches.h“:
#define NOTE_B0 31#define NOTE_C1 33#define NOTE_CS1 35#define NOTE_D1 37#define NOTE_DS1 39#define NOTE_E1 41#define NOTE_F1 44#define NOTE_FS1 46#define NOTE_G1 49#define NOTE_GS1 52#define NOTE_A1 55#define NOTE_AS1 58#define NOTE_B1 62#define NOTE_C2 65#define NOTE_CS2 69#define NOTE_D2 73#define NOTE_DS2 78#define NOTE_E2 82#define NOTE_F2 87#define NOTE_FS2 93#define NOTE_G2 98#define NOTE_GS2 104#define NOTE_A2 110#define NOTE_AS2 117#define NOTE_B2 123#define NOTE_C3 131#define NOTE_CS3 139#define NOTE_D3 147#define NOTE_DS3 156#define NOTE_E3 165#define NOTE_F3 175#define NOTE_FS3 185#define NOTE_G3 196#define NOTE_GS3 208#define NOTE_A3 220#define NOTE_AS3 233#define NOTE_B3 247#define NOTE_C4 262#define NOTE_CS4 277#define NOTE_D4 294#define NOTE_DS4 311#define NOTE_E4 330#define NOTE_F4 349#define NOTE_FS4 370#define NOTE_G4 392#define NOTE_GS4 415#define NOTE_A4 440#define NOTE_AS4 466#define NOTE_B4 494#define NOTE_C5 523#define NOTE_CS5 554#define NOTE_D5 587#define NOTE_DS5 622#define NOTE_E5 659#define NOTE_F5 698#define NOTE_FS5 740#define NOTE_G5 784#define NOTE_GS5 831#define NOTE_A5 880#define NOTE_AS5 932#define NOTE_B5 988#define NOTE_C6 1047#define NOTE_CS6 1109#define NOTE_D6 1175#define NOTE_DS6 1245#define NOTE_E6 1319#define NOTE_F6 1397#define NOTE_FS6 1480#define NOTE_G6 1568#define NOTE_GS6 1661#define NOTE_A6 1760#define NOTE_AS6 1865#define NOTE_B6 1976#define NOTE_C7 2093#define NOTE_CS7 2217#define NOTE_D7 2349#define NOTE_DS7 2489#define NOTE_E7 2637#define NOTE_F7 2794#define NOTE_FS7 2960#define NOTE_G7 3136#define NOTE_GS7 3322#define NOTE_A7 3520#define NOTE_AS7 3729#define NOTE_B7 3951#define NOTE_C8 4186#define NOTE_CS8 4435#define NOTE_D8 4699#define NOTE_DS8 4978
Hinterlasse einen Kommentar