Skip to content

Instantly share code, notes, and snippets.

@mytja
Created December 31, 2020 20:20
Show Gist options
  • Save mytja/b48cc1cfa80252cf0c1a175d67371b1c to your computer and use it in GitHub Desktop.
Save mytja/b48cc1cfa80252cf0c1a175d67371b1c to your computer and use it in GitHub Desktop.
Nixie Clock Countdown code based on GreatScott!'s code for nixie clock
#include <Wire.h>
#define A1 3
#define B1 4
#define C1 5
#define D1 6
#define A2 7
#define B2 8
#define C2 9
#define D2 10
#define A3 11
#define B3 12
#define C3 13
#define D3 14
#define A4 15
#define B4 16
#define C4 2
#define D4 1
#define pot A3
char A[4] = {A1, A2, A3, A4};
char B[4] = {B1, B2, B3, B4};
char C[4] = {C1, C2, C3, C4};
char D[4] = {D1, D2, D3, D4};
int zero;
int one;
int two;
int three;
int timeTo = 3600;
void setup() {
pinMode(A1, OUTPUT);
pinMode(B1, OUTPUT);
pinMode(C1, OUTPUT);
pinMode(D1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(B2, OUTPUT);
pinMode(C2, OUTPUT);
pinMode(D2, OUTPUT);
pinMode(A3, OUTPUT);
pinMode(B3, OUTPUT);
pinMode(C3, OUTPUT);
pinMode(D3, OUTPUT);
pinMode(A4, OUTPUT);
pinMode(B4, OUTPUT);
pinMode(C4, OUTPUT);
pinMode(D4, OUTPUT);
pinMode(pot, INPUT);
for (char i = 0; i < 4; i++) {
digitalWrite(A[i], HIGH);
digitalWrite(B[i], HIGH);
digitalWrite(C[i], HIGH);
digitalWrite(D[i], HIGH);
}
}
void loop() {
int nDigits = floor(log10(abs(timeTo))) + 1;
switch (nDigits){
case 1:
zero = 0;
one = 0;
two = 0;
three = timeTo % 10;
break;
case 2:
zero = 0;
one = 0;
two = (timeTo / 10) % 10;
three = timeTo % 10;
break;
case 3:
zero = 0;
one = timeTo % 1000 / 100;
two = (timeTo / 10) % 10;
three = timeTo % 10;
break;
case 4:
zero = (timeTo / 1000) % 1000;
one = timeTo % 1000 / 100;
two = (timeTo / 10) % 10;
three = timeTo % 10;
break;
}
// Serial.println(zero);
// Serial.println(one);
// Serial.println(two);
// Serial.println(three);
writenumber(0, zero);
writenumber(1, one);
writenumber(2, two);
writenumber(3, three);
timeTo--;
delay(1000);
}
void writenumber(int a, int b) {
switch (b) {
case 0:
digitalWrite(A[a], LOW);
digitalWrite(B[a], LOW);
digitalWrite(C[a], LOW);
digitalWrite(D[a], LOW);
break;
case 9:
digitalWrite(A[a], HIGH);
digitalWrite(B[a], LOW);
digitalWrite(C[a], LOW);
digitalWrite(D[a], LOW);
break;
case 8:
digitalWrite(A[a], LOW);
digitalWrite(B[a], HIGH);
digitalWrite(C[a], LOW);
digitalWrite(D[a], LOW);
break;
case 7:
digitalWrite(A[a], HIGH);
digitalWrite(B[a], HIGH);
digitalWrite(C[a], LOW);
digitalWrite(D[a], LOW);
break;
case 6:
digitalWrite(A[a], LOW);
digitalWrite(B[a], LOW);
digitalWrite(C[a], HIGH);
digitalWrite(D[a], LOW);
break;
case 5:
digitalWrite(A[a], HIGH);
digitalWrite(B[a], LOW);
digitalWrite(C[a], HIGH);
digitalWrite(D[a], LOW);
break;
case 4:
digitalWrite(A[a], LOW);
digitalWrite(B[a], HIGH);
digitalWrite(C[a], HIGH);
digitalWrite(D[a], LOW);
break;
case 3:
digitalWrite(A[a], HIGH);
digitalWrite(B[a], HIGH);
digitalWrite(C[a], HIGH);
digitalWrite(D[a], LOW);
break;
case 2:
digitalWrite(A[a], LOW);
digitalWrite(B[a], LOW);
digitalWrite(C[a], LOW);
digitalWrite(D[a], HIGH);
break;
case 1:
digitalWrite(A[a], HIGH);
digitalWrite(B[a], LOW);
digitalWrite(C[a], LOW);
digitalWrite(D[a], HIGH);
break;
}
}
void off(int a) {
digitalWrite(A[a], HIGH);
digitalWrite(B[a], HIGH);
digitalWrite(C[a], HIGH);
digitalWrite(D[a], HIGH);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment