From d89cb1a202fbab1de8909b5cf21ebba962b26550 Mon Sep 17 00:00:00 2001 From: zlaxy Date: Sat, 12 May 2018 19:39:53 +0300 Subject: [PATCH] add monthly timetable --- hencoop.fzz | Bin 116752 -> 116707 bytes hencoop.ino | 220 ++++++++++++++++++++++++++++++++++------------------ 2 files changed, 146 insertions(+), 74 deletions(-) diff --git a/hencoop.fzz b/hencoop.fzz index 5a41bf003e9e5bca719ff4786d77b13d335911db..9499fa57adec4376e39b7619f4cbde0e285bf7c4 100644 GIT binary patch delta 4608 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 delta 4658 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 #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); }