Skip to content

Instantly share code, notes, and snippets.

@TheSofox
Last active July 1, 2020 20:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save TheSofox/6417ddc32f87ee5f9321190d65d9c207 to your computer and use it in GitHub Desktop.
Save TheSofox/6417ddc32f87ee5f9321190d65d9c207 to your computer and use it in GitHub Desktop.
#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