diff options
-rw-r--r-- | arduino_sketch/fuzzy_alarm_clock_esp32/config.h | 14 | ||||
-rw-r--r-- | arduino_sketch/fuzzy_alarm_clock_esp32/fuzzy_alarm_clock_esp32.ino | 82 |
2 files changed, 87 insertions, 9 deletions
diff --git a/arduino_sketch/fuzzy_alarm_clock_esp32/config.h b/arduino_sketch/fuzzy_alarm_clock_esp32/config.h index 1e505b2..ae8ca57 100644 --- a/arduino_sketch/fuzzy_alarm_clock_esp32/config.h +++ b/arduino_sketch/fuzzy_alarm_clock_esp32/config.h @@ -10,6 +10,20 @@ // See https://github.com/esp8266/Arduino/blob/master/cores/esp8266/TZ.h #define TZ "CET-1CEST,M3.5.0,M10.5.0/3" +// Alarms +#define ALARM_PIN 1 +// Sound of the alarm: frequencies, and NFREQ should be the length of freq +#define NFREQ 9 +int freq[] = { 255, 192, 128, 96, 64, 96, 128, 192, 255 }; + +// Button +#define BTN_PIN 2 + +// RGB LED +#define LED_R_PIN 7 +#define LED_G_PIN 8 +#define LED_B_PIN 10 + // Create the file local_config.h in this directory and override all of the // #defines you need #include "local_config.h" diff --git a/arduino_sketch/fuzzy_alarm_clock_esp32/fuzzy_alarm_clock_esp32.ino b/arduino_sketch/fuzzy_alarm_clock_esp32/fuzzy_alarm_clock_esp32.ino index 297b938..b5d725a 100644 --- a/arduino_sketch/fuzzy_alarm_clock_esp32/fuzzy_alarm_clock_esp32.ino +++ b/arduino_sketch/fuzzy_alarm_clock_esp32/fuzzy_alarm_clock_esp32.ino @@ -7,8 +7,17 @@ #include "time.h" #include "sntp.h" +#include <Colours.h> + WiFiClient wifiClient; +Colours colours(LED_R_PIN, LED_G_PIN, LED_B_PIN); + +bool ringing = false; // the alarm should be ringing +bool pressed = false; // the button has been pressed + +hw_timer_t * timer = NULL; + void connect_wifi() { WiFi.begin(WIFI_SSID, WIFI_PASS); Serial.print("WiFi "); @@ -26,27 +35,82 @@ void connect_wifi() { } } Serial.println(" connected"); + colours.writeHSV(180, 255, 8); +} + +void ring_alarm() { + for (int i=0; i<NFREQ ; i++) { + tone(ALARM_PIN, 100000 / freq[i], 100); + } +} + +void button_pressed() { + pressed = true; +} + +void check_status() { +#ifdef DEBUG + Serial.print("Checking the statuses: "); + Serial.print(ringing); + Serial.print(pressed); + Serial.println(); +#endif + if ( ringing ) { + ring_alarm(); + } + if ( pressed ) { + ringing = false; + } + struct tm timeinfo; + if(!getLocalTime(&timeinfo)){ + Serial.println("No time available (yet)"); + return; + } + Serial.print("Time is: "); + Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S"); + Serial.println(&timeinfo); } void setup() { Serial.begin(115200); -#if defined(DEBUG) +#ifdef DEBUG Serial.setDebugOutput(true); #endif + Serial.println("Starting setup"); + pinMode(ALARM_PIN, OUTPUT); + pinMode(BTN_PIN, INPUT_PULLUP); + + colours.writeHSV(0, 255, 8); configTzTime(TZ, NTP_SERV_1, NTP_SERV_2); + // Connect to the wifi and wait 5 seconds for ntp to have configured the + // time connect_wifi(); + delay(5000); + + attachInterrupt(digitalPinToInterrupt(BTN_PIN), button_pressed, HIGH); + +#ifdef DEBUG + Serial.print("pin to interrupt"); + Serial.println(digitalPinToInterrupt(BTN_PIN)); +#endif + + // Enable a timer to check for the status every second + /* + timer = timerBegin(1, 80, true); + timerAttachInterrupt(timer, &check_status, true); + timerAlarmWrite(timer, 1000000, true); + timerAlarmEnable(timer); + */ + + // temporary set ringing to true so that we do something + ringing = true; } void loop() { - delay(5000); - struct tm timeinfo; - if(!getLocalTime(&timeinfo)){ - Serial.println("No time available (yet)"); - return; - } - Serial.print("Time is: "); - Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S"); + check_status(); + delay(1000); + } |