diff --git a/hencoop.fzz b/hencoop.fzz index 5a41bf0..9499fa5 100644 Binary files a/hencoop.fzz and b/hencoop.fzz differ diff --git a/hencoop.ino b/hencoop.ino index 5d5cabc..26e4c64 100644 --- a/hencoop.ino +++ b/hencoop.ino @@ -8,9 +8,8 @@ #include #include // Extended TM1637 library https://github.com/bremme/arduino-tm1637 -long maxOpenDoorVar = 8765; // Interval for maximum door opening time -// long openDoorVar = 3750; // Interval for door opening -long closeDoorVar = 3999; // Interval for door closing +long maxOpenDoorVar = 8667; // Interval for maximum door opening time +long closeDoorVar = 3667; // Interval for door closing const byte redButton = 4; // RedButton: light on, open door const byte blackButton = 5; // BlackButton: light off, close door @@ -21,11 +20,7 @@ const byte pinRelay4 = 9; // Motor relay control const byte PIN_CLK = 10; // Define CLK pin (for 4-Digit Display) const byte PIN_DIO = 11; // Define DIO pin (for 4-Digit Display) const byte doorSwitch = 12; // Door's magnetically operated sealed switch -// const byte led = 13; -SevenSegmentExtended display(PIN_CLK, PIN_DIO); - -// long ledPulse = 1000; // Interval for LED blinking pulse long buttonCheck = 200; // Interval for checking button state byte buttonCommand = 0; // Variable for buttons value: 0 - nothing, 1 - light on, 2 - light off byte displayWork = 0; // Variable for display status: 0 - nothing, 1 - work @@ -36,9 +31,10 @@ long buttonShortPress = 600; // Interval for short press button action unsigned long lastButtonPressed; +SevenSegmentExtended display(PIN_CLK, PIN_DIO); + // Threads: Thread pressButtonThread = Thread(); // Create thread for button state checking -// Thread ledThread = Thread(); // Create thread for LED pulse indication void setup() { Serial.begin(9600); // Initializes the Serial connection @ 9600 baud for debug @@ -51,7 +47,6 @@ void setup() { pinMode(pinRelay4, OUTPUT); pinMode(pinDC, OUTPUT); pinMode(pinLight, OUTPUT); -// pinMode(led, OUTPUT); pinMode(redButton, INPUT); pinMode(blackButton, INPUT); pinMode(doorSwitch, INPUT); @@ -67,9 +62,6 @@ void setup() { else Serial.println("RTC has set the system time"); - // LED blinking thread: -// ledThread.onRun(ledBlink); -// ledThread.setInterval(ledPulse); // Interval for LED blinking // Button state cheking thread: pressButtonThread.onRun(pressButton); pressButtonThread.setInterval(buttonCheck); // Interval for checking button pressing @@ -81,8 +73,6 @@ void setup() { void loop() { // Threads init: -// if (ledThread.shouldRun()) -// ledThread.run(); if (pressButtonThread.shouldRun()) pressButtonThread.run(); @@ -92,28 +82,8 @@ void loop() { display.on(); display.print("SET TIME"); } -/* - } else { // Fast blinking indicates that time is - int i; // not set or DS1307RTC is not plugged - for (i = 1; i <= 500; i++) { - digitalWrite(led, LOW); - delay(50); - digitalWrite(led, HIGH); - delay(50); - } - } -*/ } -/* -// LED pulse blinking thread -void ledBlink() { - static bool ledStatus = false; // LED status bool - ledStatus = !ledStatus; // Invert LED state - digitalWrite(led, ledStatus); // Activate LED state -} -*/ - // Check button pressing thread void pressButton() { unsigned long currentMillis = millis(); @@ -122,8 +92,6 @@ void pressButton() { displayWork = 0; } if (digitalRead(redButton) == HIGH || digitalRead(blackButton) == HIGH) { -// if (digitalRead(redButton) == HIGH) serStr("Red button pressed, time showed"); -// if (digitalRead(blackButton) == HIGH) serStr("Black button pressed, time showed"); display.on(); displayWork = 1; display.printTime(hour(), minute(), true); @@ -244,48 +212,129 @@ void serStr(const char* serString) { } void checkTime() { - // Winter - // 6:56 open door, 7:01 light on, 10:01 light off, - // 16:01 light on, 19:01 light off, 19:05 close door - if (month()==11 || month()==12 || month()==1 ) { - if (hour() == 6 && minute() == 56) { + // January 08:06 08:50 16:27 17:11 + if (month() == 1) { + if (hour() == 8 && minute() == 15) { openDoor(); delay(60000); } - if (hour() == 7 && minute() == 1) { + if (hour() == 15 && minute() == 55) { lightOn(); delay(60000); } - if (hour() == 10 && minute() == 1) { + if (hour() == 17 && minute() == 35) { lightOff(); delay(60000); } - if (hour() == 16 && minute() == 1) { - lightOn(); - delay(60000); - } - if (hour() == 19 && minute() == 1) { - lightOff(); - delay(60000); - } - if (hour() == 19 && minute() == 5) { + if (hour() == 17 && minute() == 50) { closeDoor(); delay(60000); } } - - // Spring - // 6:30 door open, 17:01 light on, 20:01 light off, 20:05 door close - if (month()==2 || month()==3 || month()==4 ) { - if (hour() == 6 && minute() == 30) { + // February 07:18 07:56 17:31 18:10 + if (month() == 2) { + if (hour() == 7 && minute() == 20) { openDoor(); - delay(40000); + delay(60000); } - if (hour() == 17 && minute() == 1) { + if (hour() == 16 && minute() == 55) { lightOn(); delay(60000); } - if (hour() == 20 && minute() == 1) { + if (hour() == 18 && minute() == 30) { + lightOff(); + delay(60000); + } + if (hour() == 18 && minute() == 45) { + closeDoor(); + delay(60000); + } + } + // March 06:11 06:47 18:30 19:07 + if (month() == 3) { + if (hour() == 6 && minute() == 15) { + openDoor(); + delay(60000); + } + if (hour() == 17 && minute() == 55) { + lightOn(); + delay(60000); + } + if (hour() == 19 && minute() == 30) { + lightOff(); + delay(60000); + } + if (hour() == 19 && minute() == 45) { + closeDoor(); + delay(60000); + } + } + // April 04:48 05:27 19:33 20:13 + if (month() == 4) { + if (hour() == 4 && minute() == 55) { + openDoor(); + delay(60000); + } + if (hour() == 20 && minute() == 50) { + closeDoor(); + delay(60000); + } + } + // May 03:31 04:20 20:32 21:21 + if (month() == 5) { + if (hour() == 3 && minute() == 50) { + openDoor(); + delay(60000); + } + if (hour() == 21 && minute() == 55) { + closeDoor(); + delay(60000); + } + } + // June 02:43 03:44 21:15 22:16 + if (month() == 6) { + if (hour() == 3 && minute() == 15) { + openDoor(); + delay(60000); + } + if (hour() == 22 && minute() == 50) { + closeDoor(); + delay(60000); + } + } + // July 03:08 04:04 21:05 22:00 + if (month() == 7) { + if (hour() == 3 && minute() == 30) { + openDoor(); + delay(60000); + } + if (hour() == 22 && minute() == 35) { + closeDoor(); + delay(60000); + } + } + // August 04:15 04:58 20:08 20:51 + if (month() == 8) { + if (hour() == 4 && minute() == 15) { + openDoor(); + delay(60000); + } + if (hour() == 21 && minute() == 30) { + closeDoor(); + delay(60000); + } + } + // September 05:21 05:58 18:50 19:27 + if (month() == 9) { + if (hour() == 5 && minute() == 25) { + openDoor(); + delay(60000); + } + if (hour() == 18 && minute() == 20) { + lightOn(); + delay(60000); + } + if (hour() == 19 && minute() == 50) { lightOff(); delay(60000); } @@ -294,36 +343,59 @@ void checkTime() { delay(60000); } } - - // Summer - // 5:30 open door, 22:05 close door - if (month()==5 || month()==6 || month()==7 ) { - if (hour() == 5 && minute() == 30) { + // October 06:20 06:57 17:32 18:09 + if (month() == 10) { + if (hour() == 6 && minute() == 25) { openDoor(); delay(60000); } - if (hour() == 22 && minute() == 5) { + if (hour() == 16 && minute() == 55) { + lightOn(); + delay(60000); + } + if (hour() == 18 && minute() == 30) { + lightOff(); + delay(60000); + } + if (hour() == 18 && minute() == 45) { closeDoor(); delay(60000); } } - - // Autumn - // 6:01 open door, 17:01 light on, 20:01 light off, 21:05 close door - if (month()==8 || month()==9 || month()==10 ) { - if (hour() == 6 && minute() == 1) { + // November 07:20 08:02 16:24 17:06 + if (month() == 11) { + if (hour() == 7 && minute() == 30) { openDoor(); delay(60000); } - if (hour() == 17 && minute() == 1) { + if (hour() == 15 && minute() == 55) { lightOn(); delay(60000); } - if (hour() == 20 && minute() == 1) { + if (hour() == 17 && minute() == 30) { lightOff(); delay(60000); } - if (hour() == 21 && minute() == 5) { + if (hour() == 17 && minute() == 45) { + closeDoor(); + delay(60000); + } + } + // December 08:05 08:51 15:56 16:42 + if (month() == 12) { + if (hour() == 8 && minute() == 20) { + openDoor(); + delay(60000); + } + if (hour() == 15 && minute() == 25) { + lightOn(); + delay(60000); + } + if (hour() == 17 && minute() == 5) { + lightOff(); + delay(60000); + } + if (hour() == 17 && minute() == 25) { closeDoor(); delay(60000); }