Components and supplies
1
Adafruit DS1307 RTC
1
LUMOS HV_PS
4
IN-1 Nixie Tubes
1
Through Hole Resistor, 680 ohm
1
ItsyBitsy 32u4
4
Through Hole Resistor, 33 kohm
2
LED (generic)
2
High Voltage Shift Register HV5622
Tools and machines
1
Soldering iron (generic)
Project description
Code
IN1 Itsy Bitsy Clock
arduino
1#include <Wire.h> 2#include <RTClib.h> 3#include <SPI.h> 4#define 5 NX 10 6#define latchPin 10 7#define blankPin 8 8#define ledPin 12 9int ledState 10 = LOW; 11int testpattern = 0; 12 13RTC_DS1307 RTC; 14DateTime now; 15unsigned 16 long previousMillis = 0; 17const long interval = 1000; 18unsigned long MinuteCount 19 = 0; 20unsigned long SecondCount = 0; 21 22 23uint32_t Symbol[10]={0x1, 0x2, 24 0x4, 0x8 , 0x10, 0x20, 0x40, 0x80 , 0x100, 0x200}; 25//Logic arrangement [ 0, 1, 26 2, 3 , 4 , 5 , 6 , 7 , 8 , 9 ] 27// LSB 28 << Shifts this way -------> 29// >> Shifts 30 this way <------- MSB 31// Personal 32 Notes only 33void setup() { 34 pinMode(ledPin,OUTPUT); 35 pinMode(blankPin, 36 OUTPUT); 37 digitalWrite(blankPin, LOW); 38 pinMode(latchPin, OUTPUT); 39 Serial.begin(9600); 40 41 RTC.begin(); 42 Wire.begin(); 43 SPI.begin(); 44 SPI.setDataMode(SPI_MODE2); 45 46 SPI.setClockDivider(SPI_CLOCK_DIV4); 47 //RTC.adjust(DateTime(F(__DATE__),F(__TIME__))); 48 49 if (! RTC.isrunning()){ 50 Serial.println("RTC is NOT RUNNING!"); 51 RTC.adjust(DateTime(F(__DATE__),F(__TIME__))); 52 53 } 54 delay(1000); 55 } 56 57void loop() { 58 digitalWrite(blankPin, 59 HIGH); 60 if (millis()-MinuteCount > 40000) { 61 MinuteCount = millis(); 62 63 if (testpattern == 0) { 64 testpattern = 1; 65 } else if (testpattern 66 == 1) { 67 VegasProtocol(); 68 testpattern = 0; 69 } 70 } else 71 if (millis()-SecondCount > 1000) { 72 SecondCount = millis(); 73 GetTime(); 74 75 Timex(); 76 } 77 unsigned long currentMillis = millis(); 78 if (currentMillis 79 - previousMillis >= interval){ 80 previousMillis = currentMillis; 81 if 82 (ledState == LOW){ 83 ledState = HIGH; 84 }else{ 85 ledState = LOW; 86 87 } 88 digitalWrite(ledPin, ledState); 89 } 90 //Uncomment below to see 91 serial monitor output of time 92 //Serial.print(now.hour(),DEC); 93 //Serial.print(':'); 94 95 //Serial.print(now.minute(),DEC); 96 //Serial.println(); 97 //delay(1500); 98 99 } 100 101void VegasProtocol() 102{ 103 uint16_t digitValue=0x200; 104 for (int 105 i=0;i<NX; i++){ 106 digitalWrite(latchPin,LOW); 107 SPI.transfer16(digitValue); 108 109 SPI.transfer16(digitValue); 110 SPI.transfer16(digitValue); 111 SPI.transfer16(digitValue); 112 113 digitalWrite(latchPin,HIGH); 114 digitValue=digitValue>>1; 115 delay(100);} 116 117 for (int i=0;i<NX; i++){ 118 digitalWrite(latchPin,LOW); 119 SPI.transfer16(Symbol[i]); 120 121 SPI.transfer16(Symbol[i]); 122 SPI.transfer16(Symbol[i]); 123 SPI.transfer16(Symbol[i]); 124 125 digitalWrite(latchPin,HIGH); 126 delay(100); 127 } 128} 129 130void Timex() 131{ 132 133 digitalWrite(latchPin, LOW); 134 uint32_t 135 Timemm; 136 uint32_t Timehh; 137 Timemm=now.minute(); 138 uint32_t Var32; 139 140 Var32=0; 141 Var32|=(uint32_t)(Symbol[Timemm%10]<<16);//NX4 xx:x0 142 Timemm=Timemm/10; 143 144 Var32|=(uint32_t)(Symbol[Timemm%10]);//NX3 xx:0x 145 //Register 2 controlling 146 NX3 and NX4 147 SPI.transfer(Var32>>24); 148 SPI.transfer(Var32>>16); 149 150 SPI.transfer(Var32>>8); 151 SPI.transfer(Var32); 152 Timehh=now.hour(); 153 154 Var32=0; 155 Var32|=(uint32_t)(Symbol[Timehh%10]<<16);//NX2 x0:xx 156 Timehh=Timehh/10; 157 158 Var32|=(uint32_t)(Symbol[Timehh%10]);//NX1 0x:xx 159 //Main Register controlling 160 NX1 and NX2 161 SPI.transfer(Var32>>24); 162 SPI.transfer(Var32>>16); 163 SPI.transfer(Var32>>8); 164 165 SPI.transfer(Var32); 166 digitalWrite(latchPin, HIGH); 167} 168void GetTime(){ 169 170 now = RTC.now(); 171}
IN1 Itsy Bitsy Clock
arduino
1#include <Wire.h> 2#include <RTClib.h> 3#include <SPI.h> 4#define NX 10 5#define latchPin 10 6#define blankPin 8 7#define ledPin 12 8int ledState = LOW; 9int testpattern = 0; 10 11RTC_DS1307 RTC; 12DateTime now; 13unsigned long previousMillis = 0; 14const long interval = 1000; 15unsigned long MinuteCount = 0; 16unsigned long SecondCount = 0; 17 18 19uint32_t Symbol[10]={0x1, 0x2, 0x4, 0x8 , 0x10, 0x20, 0x40, 0x80 , 0x100, 0x200}; 20//Logic arrangement [ 0, 1, 2, 3 , 4 , 5 , 6 , 7 , 8 , 9 ] 21// LSB << Shifts this way -------> 22// >> Shifts this way <------- MSB 23// Personal Notes only 24void setup() { 25 pinMode(ledPin,OUTPUT); 26 pinMode(blankPin, OUTPUT); 27 digitalWrite(blankPin, LOW); 28 pinMode(latchPin, OUTPUT); 29 Serial.begin(9600); 30 RTC.begin(); 31 Wire.begin(); 32 SPI.begin(); 33 SPI.setDataMode(SPI_MODE2); 34 SPI.setClockDivider(SPI_CLOCK_DIV4); 35 //RTC.adjust(DateTime(F(__DATE__),F(__TIME__))); 36 if (! RTC.isrunning()){ 37 Serial.println("RTC is NOT RUNNING!"); 38 RTC.adjust(DateTime(F(__DATE__),F(__TIME__))); 39 } 40 delay(1000); 41 } 42 43void loop() { 44 digitalWrite(blankPin, HIGH); 45 if (millis()-MinuteCount > 40000) { 46 MinuteCount = millis(); 47 if (testpattern == 0) { 48 testpattern = 1; 49 } else if (testpattern == 1) { 50 VegasProtocol(); 51 testpattern = 0; 52 } 53 } else if (millis()-SecondCount > 1000) { 54 SecondCount = millis(); 55 GetTime(); 56 Timex(); 57 } 58 unsigned long currentMillis = millis(); 59 if (currentMillis - previousMillis >= interval){ 60 previousMillis = currentMillis; 61 if (ledState == LOW){ 62 ledState = HIGH; 63 }else{ 64 ledState = LOW; 65 } 66 digitalWrite(ledPin, ledState); 67 } 68 //Uncomment below to see serial monitor output of time 69 //Serial.print(now.hour(),DEC); 70 //Serial.print(':'); 71 //Serial.print(now.minute(),DEC); 72 //Serial.println(); 73 //delay(1500); 74 } 75 76void VegasProtocol() 77{ 78 uint16_t digitValue=0x200; 79 for (int i=0;i<NX; i++){ 80 digitalWrite(latchPin,LOW); 81 SPI.transfer16(digitValue); 82 SPI.transfer16(digitValue); 83 SPI.transfer16(digitValue); 84 SPI.transfer16(digitValue); 85 digitalWrite(latchPin,HIGH); 86 digitValue=digitValue>>1; 87 delay(100);} 88 for (int i=0;i<NX; i++){ 89 digitalWrite(latchPin,LOW); 90 SPI.transfer16(Symbol[i]); 91 SPI.transfer16(Symbol[i]); 92 SPI.transfer16(Symbol[i]); 93 SPI.transfer16(Symbol[i]); 94 digitalWrite(latchPin,HIGH); 95 delay(100); 96 } 97} 98 99void Timex() 100{ 101 digitalWrite(latchPin, LOW); 102 uint32_t Timemm; 103 uint32_t Timehh; 104 Timemm=now.minute(); 105 uint32_t Var32; 106 Var32=0; 107 Var32|=(uint32_t)(Symbol[Timemm%10]<<16);//NX4 xx:x0 108 Timemm=Timemm/10; 109 Var32|=(uint32_t)(Symbol[Timemm%10]);//NX3 xx:0x 110 //Register 2 controlling NX3 and NX4 111 SPI.transfer(Var32>>24); 112 SPI.transfer(Var32>>16); 113 SPI.transfer(Var32>>8); 114 SPI.transfer(Var32); 115 Timehh=now.hour(); 116 Var32=0; 117 Var32|=(uint32_t)(Symbol[Timehh%10]<<16);//NX2 x0:xx 118 Timehh=Timehh/10; 119 Var32|=(uint32_t)(Symbol[Timehh%10]);//NX1 0x:xx 120 //Main Register controlling NX1 and NX2 121 SPI.transfer(Var32>>24); 122 SPI.transfer(Var32>>16); 123 SPI.transfer(Var32>>8); 124 SPI.transfer(Var32); 125 digitalWrite(latchPin, HIGH); 126} 127void GetTime(){ 128 now = RTC.now(); 129}
Downloadable files
Schematic
Schematic
Comments
Only logged in users can leave comments