From 663093b32a0cb1f048c9af983d564511a9bfac71 Mon Sep 17 00:00:00 2001 From: eleksir Date: Sat, 23 Feb 2019 19:01:52 +0300 Subject: [PATCH] Initial commit --- LICENSE | 20 +++++++ simpleclock.ino | 141 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 161 insertions(+) create mode 100644 LICENSE create mode 100644 simpleclock.ino diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..2979984 --- /dev/null +++ b/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) Sergei Fedosoff, All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list +of conditions and the following disclaimer. Redistributions in binary form must +reproduce the above copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials provided with the +distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. \ No newline at end of file diff --git a/simpleclock.ino b/simpleclock.ino new file mode 100644 index 0000000..db3512b --- /dev/null +++ b/simpleclock.ino @@ -0,0 +1,141 @@ +/* + * 7 Segment 4 Digits clock with digit point separator + * + * It uses display module with common anode and DS1307 + * RTC module to enhance time keeping ability of + * Atmega 328p based Arduino nano microcontroller and + * 2 buttons for adjusting time. + */ + +/* This software distributed under BSD 2 Clause License + +Copyright (c) Sergei Fedosoff, All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list +of conditions and the following disclaimer. Redistributions in binary form must +reproduce the above copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials provided with the +distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include +#include +#include +// DS1307 lib by FrankieChu for Seeed RTC module +#include + +DS1307 clock; +SevSeg Display; +bool dot = true; +float number; + +unsigned long currentMillis; +unsigned long previousMillis = 0; +const long interval = 500; + +const int hrs_btn = A0; +const int min_btn = A1; + + +void setup() +{ + // setup display + byte hardwareConfig = COMMON_ANODE; + byte numDigits = 4; + byte digitPins[] = {9, 10, 11, 12}; + byte segmentPins[] = {2, 3, 4, 5, 6, 7, 8, 13}; + bool resistorsOnSegments = true; // 8 resistors, 330 Ohms each + bool updateWithDelays = false; // Default. Recommended + bool leadingZeros = false; + + Display.begin(hardwareConfig, numDigits, digitPins, segmentPins, + resistorsOnSegments, updateWithDelays, leadingZeros); + Display.setBrightness(90); + + // setup clock + clock.begin(); + + // if rtc returns incorrect time, reset it to some default value + clock.getTime(); + + if (( clock.hour > 23 ) || (clock.minute > 59)) + { + clock.fillByYMD(2019,2,23); // 23 Feb 2013 + clock.fillByHMS(15,52,30); // 15:52 30" + clock.fillDayOfWeek(SAT); // Saturday + clock.setTime(); // put date to rtc + } + + // setup control buttons + pinMode(hrs_btn, INPUT_PULLUP); + pinMode(min_btn, INPUT_PULLUP); +} + + +void loop() +{ + unsigned long currentMillis = millis(); + uint8_t minutes; + uint8_t hours; + + if (currentMillis - previousMillis >= interval) + { + previousMillis = currentMillis; + + if (dot == false) + { + dot = true; + + if (digitalRead(hrs_btn) == LOW) + { + clock.getTime(); + hours = clock.hour + 1; + (hours > 23)? hours = 0: hours; + clock.fillByHMS(hours, clock.minute, 0); + clock.setTime(); + } + + if (digitalRead(min_btn) == LOW) + { + clock.getTime(); + minutes = clock.minute + 1; + (minutes > 59)? minutes = 0: minutes; + clock.fillByHMS(clock.hour, minutes, 0); + clock.setTime(); + } + } + else + { + dot = false; + } + } + + clock.getTime(); + + // make blinking dot + if (dot == true) { + number = clock.hour * 100 + clock.minute; + number = number / 100; + Display.setNumber(number, 2); + } else { + number = clock.hour * 100 + clock.minute; + Display.setNumber(number); + } + + Display.refreshDisplay(); +} + +/* vim: set filetype=cpp: */