Last active
July 1, 2020 20:29
-
-
Save TheSofox/6417ddc32f87ee5f9321190d65d9c207 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
#line 1 "ClockAdvancePendulum.ino" | |
/* | |
Pendulum Digital Clock | |
By Sofox | |
*/ | |
#include "Arduino.h" | |
void setup(); | |
void setSegment(int seg); | |
void fillLed(); | |
void clearLed(); | |
void setLed(int c[]); | |
void writeLine(int s1[],int s2[], int s3[], int s4[], int s5[], int s6[]); | |
void loop(); | |
//Just a fun thing for a friend. | |
int _h[] = {1,2,4,5,6,10}; | |
int _e[] = {0,3,4,5,6,10}; | |
int _y[] = {1,2,3,5,6,10}; | |
int _t[] = {3,4,5,6,10}; | |
int _a[] = {0,1,2,4,5,6,10}; | |
int _p[] = {0,1,4,5,6,10}; | |
//Digtal segments for numbers 0-9 | |
int lnum [][10] = {{0,1,2,3,4,5,10},{1,2,10},{0,1,3,4,6,10}, {0,1,2,3,6,10},{1,2,5,6,10}, {0,2,3,5,6,10}, {0,2,3,4,5,6,10},{0,1,2}, {0,1,2,3,4,5,6,10},{0,1,2,3,5,6,10}}; | |
//Which pins control which segments and LED digits | |
int leds[] = {2,3,4,5,6,7,8,9}; | |
int segs[] = {10,11,12,13,0,1}; | |
void clearSegs(){ | |
for (int i = 0; i< 6; i++){ | |
digitalWrite(segs[i], LOW); | |
} | |
} | |
void setSegment(int seg){ | |
clearSegs(); | |
digitalWrite(segs[seg], HIGH); | |
} | |
void fillLed(){ | |
for(int i = 0; i<8; i++){ | |
digitalWrite(leds[i], HIGH); | |
} | |
} | |
void clearLed(){ | |
for(int i = 0; i<8; i++){ | |
digitalWrite(leds[i], LOW); | |
} | |
} | |
void setLed(int c[]){ | |
clearLed(); | |
if(c==0) | |
return; | |
for(int i =0; i<10; i++){ | |
if(c[i]==10) | |
break; | |
digitalWrite(leds[c[i]], HIGH); | |
} | |
} | |
int del = 1; | |
void writeLine(int s1[],int s2[], int s3[], int s4[], int s5[], int s6[]){ | |
setSegment(0); | |
setLed(s1); | |
delay(del); | |
setSegment(1); | |
setLed(s2); | |
delay(del); | |
setSegment(2); | |
setLed(s3); | |
delay(del); | |
setSegment(3); | |
setLed(s4); | |
delay(del); | |
setSegment(4); | |
setLed(s5); | |
delay(del); | |
setSegment(5); | |
setLed(s6); | |
delay(del); | |
} | |
int segi = 0; | |
int timeSec = 0; | |
int timeMin = 0; | |
int timeHour = 0; | |
void advanceTime(){ | |
timeSec++; | |
if(timeSec>=60){ | |
timeSec=0; | |
timeMin++; | |
} | |
if(timeMin>=60){ | |
timeMin=0; | |
timeHour++; | |
} | |
if(timeHour>=24){ | |
timeHour=0; | |
} | |
} | |
int * getDigit(int digit, int place){ | |
if(place==0){ | |
return lnum[ (digit/10) ]; | |
} | |
if(place==1){ | |
return lnum[ (digit%10) ]; | |
} | |
} | |
int loopTics = 0; | |
void writeTime(){ | |
writeLine( | |
getDigit(timeHour,0), | |
getDigit(timeHour,1), | |
getDigit(timeMin,0), | |
getDigit(timeMin,1), | |
getDigit(timeSec,0), | |
getDigit(timeSec,1) ); | |
} | |
int lowThreshold = 210; | |
int highThreshold = 640; | |
int ticking = false; | |
int tickCount = 0; | |
int lastVal; | |
int countThreshold = 3; | |
int highCount = 0; | |
int lowCount =0; | |
void loop() { // wait for a second | |
int val = analogRead(0); | |
if(val>highThreshold){ | |
highCount--; | |
lowCount = countThreshold; | |
} | |
if(val<lowThreshold){ | |
lowCount --; | |
highCount = countThreshold; | |
} | |
if(false==ticking && highCount<=0) { | |
ticking = true; | |
advanceTime(); | |
} | |
if(true==ticking && lowCount<=0){ | |
ticking = false; | |
} | |
// print out the value you read: | |
writeTime(); | |
/*for(int i = 0; i<100; i++){ | |
writeLine( _t,_a, _p,_e,0, 0); | |
}*/ | |
} | |
void numberTest(){ | |
for(int i = 0; i<6; i++){ | |
setSegment(i); | |
for(int j=0; j<10; j++){ | |
setLed(lnum[j]); | |
delay(1000); | |
} | |
} | |
} | |
void setup() { | |
for (int i = 0; i< 8; i++){ | |
pinMode(leds[i], OUTPUT); | |
digitalWrite(leds[i], LOW); | |
} | |
for (int i = 0; i< 6; i++){ | |
pinMode(segs[i], OUTPUT); | |
digitalWrite(segs[i], LOW); | |
} | |
setSegment(0); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment