Created
September 10, 2018 00:32
-
-
Save Grippy98/8c267734c1a2bc05fc5375faf8a00850 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
/* | |
Nixie Clock Code by Andrei Aldea | |
Adapted for use with HV5530 Nixie Driver boards by Johnny Izzard | |
And the Sodaq_DS3231 library by Sodaq Moja | |
*/ | |
#include <SPI.h> | |
#include <Wire.h> | |
#include "Sodaq_DS3231.h" | |
char weekDay[][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; | |
#define LD 10 | |
#define CLK 13 | |
#define SDO 11 | |
#define PWM 9 | |
uint32_t old_ts; | |
#define tube_off 10 | |
#define ind_off 3 | |
uint16_t decimal_lookup[11] = {0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, 0x0000}; // decimal_lookup[0]...decimal_lookup[9] outputs corresponding nixie number. decimal_lookup[10] is off. | |
uint8_t ind_lookup[4] = {0x01, 0x02, 0x03, 0x00}; // ind_lookup[0] is top indicator, ind_lookup[1] is bottom indicator, ind_lookup[2] is both, ind_lookup[3] is off. | |
uint32_t data1 = 0; // Used to store data to be shifted | |
uint32_t data2 = 0; | |
uint32_t data3 = 0; | |
uint32_t data4 = 0; | |
uint8_t tube1 = 0; // Value to display on the corresponding tube. | |
uint8_t tube2 = 0; | |
uint8_t tube3 = 0; | |
uint8_t tube4 = 0; | |
uint8_t tube5 = 0; | |
uint8_t tube6 = 0; | |
uint8_t tube7 = 0; | |
uint8_t tube8 = 0; | |
uint8_t indicator1 = 0; // Value to display on the corresponding indicator. | |
uint8_t indicator2 = 0; | |
uint8_t indicator3 = 0; | |
uint8_t indicator4 = 0; | |
void setup() { | |
Serial.begin(57600); | |
Wire.begin(); | |
rtc.begin(); | |
pinMode(LD, OUTPUT); // LD is pin 10 (active high) | |
pinMode(CLK, OUTPUT); // CLK is pin 13 | |
pinMode(SDO, OUTPUT); // SDO is pin 11 | |
pinMode(PWM, OUTPUT); // PWM (Blank) is pin 9 (active low) | |
digitalWrite(LD, LOW); | |
digitalWrite(CLK, LOW); | |
digitalWrite(SDO, LOW); | |
digitalWrite(PWM, HIGH); | |
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE1)); | |
/* Reset Values/Blank The Display */ | |
tube1 = tube_off; | |
tube2 = tube_off; | |
tube3 = tube_off; | |
tube4 = tube_off; | |
tube5 = tube_off; | |
tube6 = tube_off; | |
tube7 = tube_off; | |
tube8 = tube_off; | |
indicator1 = ind_off; | |
indicator2 = ind_off; | |
indicator3 = ind_off; | |
indicator4 = ind_off; | |
update_disp(); | |
} | |
void loop() { | |
DateTime now = rtc.now(); //get the current date-time | |
uint32_t ts = now.getEpoch(); | |
analogWrite(PWM, 150); //Set Brightness | |
if (old_ts == 0 || old_ts != ts) { | |
old_ts = ts; | |
indicator1 = 2; // Both indicators on | |
indicator2 = 2; | |
indicator3 = 2; | |
indicator4 = ind_off; | |
tube8 = now.hour()/10; | |
tube7 = now.hour()%10; | |
tube6 = now.minute()/10; | |
tube5 = now.minute()%10; | |
tube4 = now.second()/10; | |
tube3 = now.second()%10; | |
tube2 = 2; | |
tube1 = 2; | |
update_disp(); | |
/*for(int i=0; i<=99; i++) | |
{ | |
tube2 = i/10; | |
tube1 = i%10; | |
delay(10); | |
update_disp(); | |
} | |
}*/ | |
} | |
//delay(500); | |
} | |
void update_disp(void) { | |
data1 = 0x00000000; | |
data1 |= ((uint32_t (decimal_lookup[tube1])) & 0x000003FF); | |
data1 |= ((uint32_t (decimal_lookup[tube2]) << 10) & 0x000FFC00); | |
data1 |= ((uint32_t (ind_lookup[indicator1]) << 20) & 0x00300000); | |
data2 = 0x00000000; | |
data2 |= ((uint32_t (decimal_lookup[tube3])) & 0x000003FF); | |
data2 |= ((uint32_t (decimal_lookup[tube4]) << 10) & 0x000FFC00); | |
data2 |= ((uint32_t (ind_lookup[indicator2]) << 20) & 0x00300000); | |
data3 = 0x00000000; | |
data3 |= ((uint32_t (decimal_lookup[tube5])) & 0x000003FF); | |
data3 |= ((uint32_t (decimal_lookup[tube6]) << 10) & 0x000FFC00); | |
data3 |= ((uint32_t (ind_lookup[indicator3]) << 20) & 0x00300000); | |
data4 = 0x00000000; | |
data4 |= ((uint32_t (decimal_lookup[tube7])) & 0x000003FF); | |
data4 |= ((uint32_t (decimal_lookup[tube8]) << 10) & 0x000FFC00); | |
data4 |= ((uint32_t (ind_lookup[indicator4]) << 20) & 0x00300000); | |
digitalWrite(LD, HIGH); | |
SPI.transfer(data1 >> 24); | |
SPI.transfer(data1 >> 16); | |
SPI.transfer(data1 >> 8); | |
SPI.transfer(data1); | |
digitalWrite(LD, LOW); | |
digitalWrite(LD, HIGH); | |
digitalWrite(LD, HIGH); | |
SPI.transfer(data2 >> 24); | |
SPI.transfer(data2 >> 16); | |
SPI.transfer(data2 >> 8); | |
SPI.transfer(data2); | |
digitalWrite(LD, LOW); | |
digitalWrite(LD, HIGH); | |
digitalWrite(LD, HIGH); | |
SPI.transfer(data3 >> 24); | |
SPI.transfer(data3 >> 16); | |
SPI.transfer(data3 >> 8); | |
SPI.transfer(data3); | |
digitalWrite(LD, LOW); | |
digitalWrite(LD, HIGH); | |
digitalWrite(LD, HIGH); | |
SPI.transfer(data4 >> 24); | |
SPI.transfer(data4 >> 16); | |
SPI.transfer(data4 >> 8); | |
SPI.transfer(data4); | |
digitalWrite(LD, LOW); | |
digitalWrite(LD, HIGH); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment