Implementation of the Pomodoro technique on the ESP-32 microcontroller.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

104 lines
2.6 KiB
Raw

#include "Pomodoro.h"
bool useLed=true;
bool useBuzzer=true;
uint32_t timeWork=25*60*1000;
uint32_t timeShortRest=5*60*1000;
uint32_t timeLongRest=15*60*1000;
int workBetweenLongBreak=4;
int workDone=0;
bool work=true;
int currentWait=timeWork;
uint32_t timerLastValue=0;
const int pinLedWork=25;
const int pinLedShortBreak=33;
const int pinLedLongBreak=32;
const int ledFrequency=5000;
const int ledResolution=8;
const int ledChannelWork=0;
const int ledChannelShortBreak=1;
const int ledChannelLongBreak=2;
int ledWorkMaxValue=1;
int ledShortBreakMaxValue=1;
int ledLongBreakMaxValue=1;
const int pinBuzzer=27;
const int buzzerFrequency=2000;
const int buzzerResolution=8;
const int buzzerChannel=3;
void setupPomodoro(){
//pinMode(pinLedWork,OUTPUT);
//pinMode(pinLedShortBreak,OUTPUT);
//pinMode(pinLedLongBreak,OUTPUT);
ledcSetup(ledChannelWork, ledFrequency, ledResolution);
ledcSetup(ledChannelShortBreak, ledFrequency, ledResolution);
ledcSetup(ledChannelLongBreak, ledFrequency, ledResolution);
ledcAttachPin(pinLedWork, ledChannelWork);
ledcAttachPin(pinLedShortBreak, ledChannelShortBreak);
ledcAttachPin(pinLedLongBreak, ledChannelLongBreak);
ledcSetup(buzzerChannel,buzzerFrequency,buzzerResolution);
ledcAttachPin(pinBuzzer,buzzerChannel);
}
void writeToBuzzer(int note,int duration,bool continuous=false){
if(useBuzzer){
ledcWriteTone(buzzerChannel,note);
if(!continuous){
delay(duration);
ledcWriteTone(buzzerChannel,0);
}
}
}
void writeToLed(int led,int value){
if(useLed){
ledcWrite(led,value);
}
}
void displayWork(bool afterLongBreak){
Serial.println("Return to work");
writeToLed(ledChannelWork,ledWorkMaxValue);
writeToLed(ledChannelShortBreak,0);
writeToLed(ledChannelLongBreak,0);
//digitalWrite(LED_WORK,HIGH);
//digitalWrite(LED_SHORT_BREAK,LOW);
//digitalWrite(LED_LONG_BREAK,LOW);
if(afterLongBreak){
for(int i=0;i<3;i++){
writeToBuzzer(NOTE_C4,200);
writeToBuzzer(NOTE_CS4,200);
delay(500);
}
}else{
writeToBuzzer(NOTE_C1,200);
}
}
void displayShortRest(){
Serial.println("Short rest");
writeToLed(ledChannelWork,0);
writeToLed(ledChannelShortBreak,ledShortBreakMaxValue);
writeToLed(ledChannelLongBreak,0);
//digitalWrite(LED_WORK,LOW);
//digitalWrite(LED_SHORT_BREAK,HIGH);
//digitalWrite(LED_LONG_BREAK,LOW);
writeToBuzzer(NOTE_F1,200);
}
void displayLongRest(){
Serial.println("Long rest");
writeToLed(ledChannelWork,0);
writeToLed(ledChannelShortBreak,0);
writeToLed(ledChannelLongBreak,ledLongBreakMaxValue);
//digitalWrite(LED_WORK,LOW);
//digitalWrite(LED_SHORT_BREAK,LOW);
//digitalWrite(LED_LONG_BREAK,HIGH);
writeToBuzzer(NOTE_DS4,200);
writeToBuzzer(NOTE_D4,200);
}