commit 778bd82954f11aa25b00434974e4104e628958b4 Author: dan Date: Thu Dec 23 14:44:12 2021 -0500 initial commit diff --git a/BellChimer.ino b/BellChimer.ino new file mode 100644 index 0000000..1565e7c --- /dev/null +++ b/BellChimer.ino @@ -0,0 +1,163 @@ +#include +#include +#include +#include +#include +#include + + +//chime mode 1 ship, 2 traditional, 3 traditional with quarters +struct Config{ + char ssid[64]; + char wifi_pass[64]; + char tz[64]; + int quiet_start_hour; + int quiet_start_min; + int quiet_end_hour; + int quiet_end_min; + int ChimeMode; +}; + +Config config; + +Timezone EST; + +bool chimed = 0; +bool quietTime = 0; +long interval = 1000; +long previousMillis = 0; + +AsyncWebServer server(80); + +void setup() +{ + Serial.begin(115200); + Serial.println(""); + + //Load FS and load config file + if (!LittleFS.begin()){ + Serial.println("ERROR"); + return; + } + loadConfiguration(); + + //connect to WiFi + Serial.printf("Connecting to %s ", config.ssid); + WiFi.hostname("BellChimerESP"); + WiFi.begin(config.ssid, config.wifi_pass); + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + int ip = WiFi.localIP(); + Serial.println("CONNECTED"); + Serial.println(WiFi.localIP()); + + //init ntp, get the time and set timezone + waitForSync(); + EST.setLocation(config.tz); + Serial.printf("Timezone set to: %s", config.tz); + + //Serve Index + server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ + request->send(LittleFS, "/index.html"); + }); + server.begin(); +} + +void checkTime() +{ + //Checks if it's currently during a quiet period + if (!checkQuiet()) + { + Serial.println("NOT QUIET"); + //gets the current hour/minute + int hours = EST.hour(); + int minutes = EST.minute(); + //checks what mode the chime is in and passes the hour/minute + if (config.ChimeMode == 1) { + ship(hours, minutes); + } + } + else + { + Serial.println("QUIET"); + } +} + +void loadConfiguration() { + //open config.json + File configFile = LittleFS.open("/config.json", "r"); + if(!configFile){ + Serial.println("failed to open configFile"); + //return; + } + + //init arduinojson and deserialize file + StaticJsonDocument<300> doc; + + DeserializationError error = deserializeJson(doc, configFile); + + if (error) { + Serial.print(F("deserializeJson() failed: ")); + Serial.println(error.f_str()); + return; + } + + //copy json values to config structure + strlcpy(config.ssid, doc["ssid"], sizeof(config.ssid)); + strlcpy(config.wifi_pass, doc["wifi_pass"], sizeof(config.wifi_pass)); + strlcpy(config.tz, doc["tz"], sizeof(config.tz)); + config.quiet_start_hour = doc["quiet_start_hour"]; + config.quiet_start_min = doc["quiet_start_min"]; + config.quiet_end_hour = doc["quiet_end_hour"]; + config.quiet_end_min = doc["quiet_end_min"]; + config.ChimeMode = doc["ChimeMode"]; + return; + } + +bool checkQuiet() +{ + //get current time + int hours = EST.hour(); + int minutes = EST.minute(); + + //convert times into minutes + unsigned currentTime = (hours *60) + minutes; + unsigned startTime = (config.quiet_start_hour *60) + config.quiet_start_min; + unsigned endTime = (config.quiet_end_hour *60) + config.quiet_end_min; + + boolean quiet; + + //No quiet time sets the config values to -1, which skips the entire time check + if (config.quiet_start_hour >= 0) + { + //if it doesn't overflow into tomorrow + if (endTime > startTime) + { + quiet = (currentTime >= startTime && currentTime < endTime); + } + //if it does go into tomorrow + else + { + quiet = (currentTime >= startTime || currentTime < endTime); + } + } + else + { + quiet = 0; + } + return quiet; +} + +void loop() +{ + unsigned long currentMillis = millis(); + + if (currentMillis - previousMillis > interval) + { + previousMillis = currentMillis; + checkTime(); + } + +} diff --git a/cad/Base.AD_PRT b/cad/Base.AD_PRT new file mode 100644 index 0000000..c3530dd Binary files /dev/null and b/cad/Base.AD_PRT differ diff --git a/cad/Base.stl b/cad/Base.stl new file mode 100644 index 0000000..83148d7 Binary files /dev/null and b/cad/Base.stl differ diff --git a/cad/BaseLid.AD_PRT b/cad/BaseLid.AD_PRT new file mode 100644 index 0000000..4f5b3e9 Binary files /dev/null and b/cad/BaseLid.AD_PRT differ diff --git a/cad/BaseLid.stl b/cad/BaseLid.stl new file mode 100644 index 0000000..717ca9e Binary files /dev/null and b/cad/BaseLid.stl differ diff --git a/cad/BellArch.AD_PRT b/cad/BellArch.AD_PRT new file mode 100644 index 0000000..993a02c Binary files /dev/null and b/cad/BellArch.AD_PRT differ diff --git a/cad/BellChimer.AD_ASM b/cad/BellChimer.AD_ASM new file mode 100644 index 0000000..23d7f0c Binary files /dev/null and b/cad/BellChimer.AD_ASM differ diff --git a/cad/BellChimer.AD_DRW b/cad/BellChimer.AD_DRW new file mode 100644 index 0000000..6f317ec Binary files /dev/null and b/cad/BellChimer.AD_DRW differ diff --git a/chimes.ino b/chimes.ino new file mode 100644 index 0000000..ff7e155 --- /dev/null +++ b/chimes.ino @@ -0,0 +1,11 @@ +void doubleChime () +{ + + return; +} + +void singleChime() +{ + + return; +} diff --git a/data/config.json b/data/config.json new file mode 100644 index 0000000..0b674de --- /dev/null +++ b/data/config.json @@ -0,0 +1,10 @@ +{ + "ssid": "DD", + "wifi_pass": "ICYN30blah", + "tz": "America/New_York", + "quiet_start_hour": 14, + "quiet_start_min": 0, + "quiet_end_hour": 14, + "quiet_end_min": 32, + "ChimeMode": 1 +} \ No newline at end of file diff --git a/data/index.html b/data/index.html new file mode 100644 index 0000000..3f1b46d --- /dev/null +++ b/data/index.html @@ -0,0 +1 @@ +Testing Server. This has been updated. \ No newline at end of file diff --git a/ship.ino b/ship.ino new file mode 100644 index 0000000..1306543 --- /dev/null +++ b/ship.ino @@ -0,0 +1,69 @@ +void ship(int hours, int minutes) +{ + if (minutes == 00 && chimed == 0) + { + Serial.println("Top of hour"); + if ( hours == 12 || hours == 4 || hours == 8 || hours == 0 || hours == 16 || hours == 20 ) + { + doubleChime(); + doubleChime(); + doubleChime(); + doubleChime(); + chimed = 1; + } + else if ( hours == 1 || hours == 5 || hours == 9 || hours == 13 || hours == 17 || hours == 21 ) + { + doubleChime(); + chimed = 1; + } + else if ( hours == 2 || hours == 6 || hours == 10 || hours == 14 || hours == 18 || hours == 22 ) + { + doubleChime(); + doubleChime(); + chimed = 1; + } + else if ( hours == 3 || hours == 7 || hours == 11 || hours == 15 || hours == 19 || hours == 23 ) + { + doubleChime(); + doubleChime(); + doubleChime(); + chimed = 1; + } + } + else if (minutes == 30 && chimed == 0) + { + Serial.println("bottom of hour"); + if ( hours == 12 || hours == 4 || hours == 8 || hours == 0 || hours == 16 || hours == 20 ) + { + singleChime(); + chimed = 1; + } + else if ( hours == 1 || hours == 5 || hours == 9 || hours == 13 || hours == 17 || hours == 21 ) + { + doubleChime(); + singleChime(); + chimed = 1; + } + else if ( hours == 2 || hours == 6 || hours == 10 || hours == 14 || hours == 18 || hours == 22 ) + { + doubleChime(); + doubleChime(); + singleChime(); + chimed = 1; + } + else if ( hours == 3 || hours == 7 || hours == 11 || hours == 15 || hours == 19 || hours == 23 ) + { + doubleChime(); + doubleChime(); + doubleChime(); + singleChime(); + chimed = 1; + } + + } + else if (chimed == 1 && minutes == 01 || chimed == 1 && minutes == 31 ) + { + Serial.println("Reset chime"); + chimed = 0; + } +}