Created
April 24, 2020 07:11
-
-
Save EDISON-SCIENCE-CORNER/921eb2fd91f635bbab4e48d7002fddc9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//EDISON SCIENCE CORNER | |
//EDISON SCIENCE CORNER | |
//EDISON SCIENCE CORNER | |
//EDISON SCIENCE CORNER | |
//EDISON SCIENCE CORNER | |
int digit1 = 11; //PWM Display pin 12 (digit1 is common anonds A1 from right side) | |
int digit2 = 10; //PWM Display pin 9 (digit2 is common A2) | |
int digit3 = 9; //PWM Display pin 8 (digit3 is common anods A3) | |
int digit4 = 6; //PWM Display pin 6 (digit4 is common anods, from left side) | |
int segA = 2; //Display pin 11 | |
int segB = 3; //Display pin 7 | |
int segC = 4; //Display pin 4 | |
int segD = 5; //Display pin 2 | |
int segE = 12; //Display pin 1 | |
int segF = 7; //Display pin 10 | |
int segG = 8; //Display pin 5 | |
int segDP = 13; // Display pin 3 | |
int pin = 1; | |
#include <Wire.h> | |
#include "RTClib.h" | |
RTC_DS1307 RTC; | |
byte SW0 = A0; | |
byte SW1 = A1; | |
byte SW2 = A2; | |
// use for hexa in zecimal conversion | |
int zh, uh, ore; | |
int zm, um, miniti; | |
void setup() { | |
// Serial.begin(57600); | |
Wire.begin(); | |
RTC.begin(); | |
// RTC.adjust(DateTime(__DATE__, __TIME__)); | |
// if you need set clock... just remove // from line above this | |
// part code for flashing LED | |
Wire.beginTransmission(0x68); | |
Wire.write(0x07); // move pointer to SQW address | |
// Wire.write(0x00); // turns the SQW pin off | |
Wire.write(0x10); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square wave at 1Hz | |
// Wire.write(0x13); // sends 0x13 (hex) 00010011 (binary) 32kHz | |
Wire.endTransmission(); | |
if (! RTC.isrunning()) { | |
Serial.println("RTC is NOT running!"); | |
// following line sets the RTC to the date & time this sketch was compiled | |
RTC.adjust(DateTime(__DATE__, __TIME__)); | |
} | |
// dht.begin(); | |
pinMode(segA, OUTPUT); | |
pinMode(segB, OUTPUT); | |
pinMode(segC, OUTPUT); | |
pinMode(segD, OUTPUT); | |
pinMode(segE, OUTPUT); | |
pinMode(segF, OUTPUT); | |
pinMode(segG, OUTPUT); | |
pinMode(segDP, OUTPUT); | |
pinMode(pin, OUTPUT); | |
pinMode(digit1, OUTPUT); | |
pinMode(digit2, OUTPUT); | |
pinMode(digit3, OUTPUT); | |
pinMode(digit4, OUTPUT); | |
// pinMode(13, OUTPUT); | |
// Serial.begin(9600); | |
//Serial.println("test for niq_ro"); | |
pinMode(SW0, INPUT); // for this use a slide switch | |
pinMode(SW1, INPUT); // N.O. push button switch | |
pinMode(SW2, INPUT); // N.O. push button switch | |
digitalWrite(SW0, HIGH); // pull-ups on | |
digitalWrite(SW1, HIGH); | |
digitalWrite(SW2, HIGH); | |
} | |
void loop() { | |
DateTime now = RTC.now(); | |
int timp = now.hour()*100+now.minute(); | |
// int timp = (now.minute(), DEC); | |
// displayNumber(12); // this is number to diplay | |
// int timp = 1234; | |
// Serial.print(now.hour(), DEC); | |
// Serial.print(":"); | |
// Serial.print(now.minute(), DEC); | |
// Serial.print(" -> "); | |
// Serial.print(timp); | |
// Serial.println(" !"); | |
// display parts | |
for(int i = 250 ; i >0 ; i--) { | |
if (timp >= 1000) displayNumber01(timp); | |
else displayNumber02(timp); | |
} | |
for(int i = 250 ; i >0 ; i--) { | |
if (timp >= 1000) displayNumber03(timp); | |
else displayNumber04(timp); | |
} | |
if (!(digitalRead(SW0))) set_time(); // hold the switch to set time | |
//blinking | |
} | |
void set_time() { | |
byte minutes1 = 0; | |
byte hours1 = 0; | |
byte minutes = 0; | |
byte hours = 0; | |
while (!digitalRead(SW0)) // set time switch must be released to exit | |
{ | |
minutes1=minutes; | |
hours1=hours; | |
while (!digitalRead(SW1)) // set minutes | |
{ | |
minutes++; | |
// converting hexa in zecimal: | |
zh = hours / 16; | |
uh = hours - 16 * zh ; | |
ore = 10 * zh + uh; | |
zm = minutes / 16; | |
um = minutes - 16 * zm ; | |
miniti = 10 * zm + um; | |
for(int i = 20 ; i >0 ; i--) { | |
displayNumber01(ore*100+miniti); | |
} | |
if ((minutes & 0x0f) > 9) minutes = minutes + 6; | |
if (minutes > 0x59) minutes = 0; | |
// Serial.print("Minutes = "); | |
if (minutes >= 9) Serial.print("0"); | |
// Serial.println(minutes, HEX); | |
delay(150); | |
} | |
while (!digitalRead(SW2)) // set hours | |
{ | |
hours++; | |
// converting hexa in zecimal: | |
zh = hours / 16; | |
uh = hours - 16 * zh ; | |
ore = 10 * zh + uh; | |
zm = minutes / 16; | |
um = minutes - 16 * zm ; | |
miniti = 10 * zm + um; | |
for(int i = 20 ; i >0 ; i--) { | |
displayNumber01(ore*100+miniti); | |
} | |
if ((hours & 0x0f) > 9) hours = hours + 6; | |
if (hours > 0x23) hours = 0; | |
// Serial.print("Hours = "); | |
if (hours <= 9) Serial.print("0"); | |
Serial.println(hours, HEX); | |
delay(150); | |
} | |
Wire.beginTransmission(0x68); // activate DS1307 | |
Wire.write(0); // where to begin | |
Wire.write(0x00); //seconds | |
Wire.write(minutes); //minutes | |
Wire.write(0x80 | hours); //hours (24hr time) | |
Wire.write(0x06); // Day 01-07 | |
Wire.write(0x01); // Date 0-31 | |
Wire.write(0x05); // month 0-12 | |
Wire.write(0x09); // Year 00-99 | |
Wire.write(0x10); // Control 0x10 produces a 1 HZ square wave on pin 7. | |
Wire.endTransmission(); | |
// converting hexa in zecimal: | |
zh = hours / 16; | |
uh = hours - 16 * zh ; | |
ore = 10 * zh + uh; | |
zm = minutes / 16; | |
um = minutes - 16 * zm ; | |
miniti = 10 * zm + um; | |
for(int i = 20 ; i >0 ; i--) { | |
displayNumber01(ore*100+miniti); | |
} | |
// delay(150); | |
} | |
} | |
void displayNumber01(int toDisplay) { | |
#define DISPLAY_BRIGHTNESS 500 | |
#define DIGIT_ON HIGH | |
#define DIGIT_OFF LOW | |
for(int digit = 4 ; digit > 0 ; digit--) { | |
//Turn on a digit for a short amount of time | |
switch(digit) { | |
case 1: | |
digitalWrite(digit1, DIGIT_ON); | |
digitalWrite(segDP, HIGH); | |
break; | |
case 2: | |
digitalWrite(digit2, DIGIT_ON); | |
digitalWrite(segDP, LOW); | |
break; | |
case 3: | |
digitalWrite(digit3, DIGIT_ON); | |
digitalWrite(segDP, HIGH); | |
break; | |
case 4: | |
digitalWrite(digit4, DIGIT_ON); | |
digitalWrite(segDP, HIGH); | |
break; | |
} | |
lightNumber(toDisplay % 10); | |
toDisplay /= 10; | |
delayMicroseconds(DISPLAY_BRIGHTNESS); | |
//Turn off all segments | |
lightNumber(10); | |
//Turn off all digits | |
digitalWrite(digit1, DIGIT_OFF); | |
digitalWrite(digit2, DIGIT_OFF); | |
digitalWrite(digit3, DIGIT_OFF); | |
digitalWrite(digit4, DIGIT_OFF); | |
} | |
} | |
void displayNumber02(int toDisplay) { | |
#define DISPLAY_BRIGHTNESS 500 | |
#define DIGIT_ON HIGH | |
#define DIGIT_OFF LOW | |
for(int digit = 4 ; digit > 0 ; digit--) { | |
//Turn on a digit for a short amount of time | |
switch(digit) { | |
case 1: | |
lightNumber(10); | |
digitalWrite(segDP, HIGH); | |
break; | |
case 2: | |
digitalWrite(digit2, DIGIT_ON); | |
digitalWrite(segDP, LOW); | |
break; | |
case 3: | |
digitalWrite(digit3, DIGIT_ON); | |
digitalWrite(segDP, HIGH); | |
break; | |
case 4: | |
digitalWrite(digit4, DIGIT_ON); | |
digitalWrite(segDP, HIGH); | |
break; | |
} | |
lightNumber(toDisplay % 10); | |
toDisplay /= 10; | |
delayMicroseconds(DISPLAY_BRIGHTNESS); | |
//Turn off all segments | |
lightNumber(10); | |
//Turn off all digits | |
digitalWrite(digit1, DIGIT_OFF); | |
digitalWrite(digit2, DIGIT_OFF); | |
digitalWrite(digit3, DIGIT_OFF); | |
digitalWrite(digit4, DIGIT_OFF); | |
} | |
} | |
void displayNumber03(int toDisplay) { | |
#define DISPLAY_BRIGHTNESS 500 | |
#define DIGIT_ON HIGH | |
#define DIGIT_OFF LOW | |
for(int digit = 4 ; digit > 0 ; digit--) { | |
//Turn on a digit for a short amount of time | |
switch(digit) { | |
case 1: | |
digitalWrite(digit1, DIGIT_ON); | |
digitalWrite(segDP, HIGH); | |
break; | |
case 2: | |
digitalWrite(digit2, DIGIT_ON); | |
digitalWrite(segDP, HIGH); | |
break; | |
case 3: | |
digitalWrite(digit3, DIGIT_ON); | |
digitalWrite(segDP, HIGH); | |
break; | |
case 4: | |
digitalWrite(digit4, DIGIT_ON); | |
digitalWrite(segDP, HIGH); | |
break; | |
} | |
lightNumber(toDisplay % 10); | |
toDisplay /= 10; | |
delayMicroseconds(DISPLAY_BRIGHTNESS); | |
//Turn off all segments | |
lightNumber(10); | |
//Turn off all digits | |
digitalWrite(digit1, DIGIT_OFF); | |
digitalWrite(digit2, DIGIT_OFF); | |
digitalWrite(digit3, DIGIT_OFF); | |
digitalWrite(digit4, DIGIT_OFF); | |
} | |
} | |
void displayNumber04(int toDisplay) { | |
#define DISPLAY_BRIGHTNESS 500 | |
#define DIGIT_ON HIGH | |
#define DIGIT_OFF LOW | |
for(int digit = 4 ; digit > 0 ; digit--) { | |
//Turn on a digit for a short amount of time | |
switch(digit) { | |
case 1: | |
lightNumber(10); | |
digitalWrite(segDP, HIGH); | |
break; | |
case 2: | |
digitalWrite(digit2, DIGIT_ON); | |
digitalWrite(segDP, HIGH); | |
break; | |
case 3: | |
digitalWrite(digit3, DIGIT_ON); | |
digitalWrite(segDP, HIGH); | |
break; | |
case 4: | |
digitalWrite(digit4, DIGIT_ON); | |
digitalWrite(segDP, HIGH); | |
break; | |
} | |
lightNumber(toDisplay % 10); | |
toDisplay /= 10; | |
delayMicroseconds(DISPLAY_BRIGHTNESS); | |
//Turn off all segments | |
lightNumber(10); | |
//Turn off all digits | |
digitalWrite(digit1, DIGIT_OFF); | |
digitalWrite(digit2, DIGIT_OFF); | |
digitalWrite(digit3, DIGIT_OFF); | |
digitalWrite(digit4, DIGIT_OFF); | |
} | |
} | |
//Given a number, turns on those segments | |
//If number == 10, then turn off number | |
void lightNumber(int numberToDisplay) { | |
#define SEGMENT_ON LOW | |
#define SEGMENT_OFF HIGH | |
switch (numberToDisplay){ | |
case 0: | |
digitalWrite(segA, SEGMENT_ON); | |
digitalWrite(segB, SEGMENT_ON); | |
digitalWrite(segC, SEGMENT_ON); | |
digitalWrite(segD, SEGMENT_ON); | |
digitalWrite(segE, SEGMENT_ON); | |
digitalWrite(segF, SEGMENT_ON); | |
digitalWrite(segG, SEGMENT_OFF); | |
break; | |
case 1: | |
digitalWrite(segA, SEGMENT_OFF); | |
digitalWrite(segB, SEGMENT_ON); | |
digitalWrite(segC, SEGMENT_ON); | |
digitalWrite(segD, SEGMENT_OFF); | |
digitalWrite(segE, SEGMENT_OFF); | |
digitalWrite(segF, SEGMENT_OFF); | |
digitalWrite(segG, SEGMENT_OFF); | |
break; | |
case 2: | |
digitalWrite(segA, SEGMENT_ON); | |
digitalWrite(segB, SEGMENT_ON); | |
digitalWrite(segC, SEGMENT_OFF); | |
digitalWrite(segD, SEGMENT_ON); | |
digitalWrite(segE, SEGMENT_ON); | |
digitalWrite(segF, SEGMENT_OFF); | |
digitalWrite(segG, SEGMENT_ON); | |
break; | |
case 3: | |
digitalWrite(segA, SEGMENT_ON); | |
digitalWrite(segB, SEGMENT_ON); | |
digitalWrite(segC, SEGMENT_ON); | |
digitalWrite(segD, SEGMENT_ON); | |
digitalWrite(segE, SEGMENT_OFF); | |
digitalWrite(segF, SEGMENT_OFF); | |
digitalWrite(segG, SEGMENT_ON); | |
break; | |
case 4: | |
digitalWrite(segA, SEGMENT_OFF); | |
digitalWrite(segB, SEGMENT_ON); | |
digitalWrite(segC, SEGMENT_ON); | |
digitalWrite(segD, SEGMENT_OFF); | |
digitalWrite(segE, SEGMENT_OFF); | |
digitalWrite(segF, SEGMENT_ON); | |
digitalWrite(segG, SEGMENT_ON); | |
break; | |
case 5: | |
digitalWrite(segA, SEGMENT_ON); | |
digitalWrite(segB, SEGMENT_OFF); | |
digitalWrite(segC, SEGMENT_ON); | |
digitalWrite(segD, SEGMENT_ON); | |
digitalWrite(segE, SEGMENT_OFF); | |
digitalWrite(segF, SEGMENT_ON); | |
digitalWrite(segG, SEGMENT_ON); | |
break; | |
case 6: | |
digitalWrite(segA, SEGMENT_ON); | |
digitalWrite(segB, SEGMENT_OFF); | |
digitalWrite(segC, SEGMENT_ON); | |
digitalWrite(segD, SEGMENT_ON); | |
digitalWrite(segE, SEGMENT_ON); | |
digitalWrite(segF, SEGMENT_ON); | |
digitalWrite(segG, SEGMENT_ON); | |
break; | |
case 7: | |
digitalWrite(segA, SEGMENT_ON); | |
digitalWrite(segB, SEGMENT_ON); | |
digitalWrite(segC, SEGMENT_ON); | |
digitalWrite(segD, SEGMENT_OFF); | |
digitalWrite(segE, SEGMENT_OFF); | |
digitalWrite(segF, SEGMENT_OFF); | |
digitalWrite(segG, SEGMENT_OFF); | |
break; | |
case 8: | |
digitalWrite(segA, SEGMENT_ON); | |
digitalWrite(segB, SEGMENT_ON); | |
digitalWrite(segC, SEGMENT_ON); | |
digitalWrite(segD, SEGMENT_ON); | |
digitalWrite(segE, SEGMENT_ON); | |
digitalWrite(segF, SEGMENT_ON); | |
digitalWrite(segG, SEGMENT_ON); | |
break; | |
case 9: | |
digitalWrite(segA, SEGMENT_ON); | |
digitalWrite(segB, SEGMENT_ON); | |
digitalWrite(segC, SEGMENT_ON); | |
digitalWrite(segD, SEGMENT_ON); | |
digitalWrite(segE, SEGMENT_OFF); | |
digitalWrite(segF, SEGMENT_ON); | |
digitalWrite(segG, SEGMENT_ON); | |
break; | |
// all segment are ON | |
case 10: | |
digitalWrite(segA, SEGMENT_OFF); | |
digitalWrite(segB, SEGMENT_OFF); | |
digitalWrite(segC, SEGMENT_OFF); | |
digitalWrite(segD, SEGMENT_OFF); | |
digitalWrite(segE, SEGMENT_OFF); | |
digitalWrite(segF, SEGMENT_OFF); | |
digitalWrite(segG, SEGMENT_OFF); | |
break; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Sir please modify this code for seconds display. Hrs and minutes clock is working ok.