Hey there,
I'm trying to build a clock using an Arduino Nano and 6 IV-11 VFD-Tubes.
After some trial and error from the hardware side everything is running like a dream.
But after many attempts I just can't get the software right so everything is displayed correctly.
My best attempt is shown downbelow, which still isn't working quite right.
The first tube just displays a 2 and the rest just 9.
I hope someone has advise or some tips for me to get this project working.
Greetings
#include <Arduino.h>
#include <Wire.h> // this #include still required because the RTClib depends on it
#include "RTClib.h"
int SRCLK = 11;
int RCLK = 12;
int SER = 4; //The three pins connected to the Shiftreg.
int counter = 1;
int nowseconds = 0;
int nowhours = 0;
int nowminutes = 0;
int numZero = 63;
int numOne = 6;
int numTwo = 91;
int numThree = 79;
int numFour = 102;
int numFive = 109;
int numSix = 125;
int numSeven = 7;
int numEight = 127;
int numNine = 111; //The data that is needed to be shifted into the ShiftReg. for the equivalent
//number to be displayed
RTC_Millis rtc;
void setup() {
pinMode(10, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT); //These are the Anodes of the VFD's
pinMode(SRCLK, OUTPUT);
pinMode(RCLK, OUTPUT);
pinMode(SER, OUTPUT); //Shiftreg. Pins
rtc.begin(DateTime(F(__DATE__), F(__TIME__)));
rtc.adjust(DateTime(2017, 11, 19, 19, 0, 0)); //Setting up the RTC for testing
}
void loop () {
DateTime now = rtc.now(); //Recieve the Time
if (counter = 1){
nowhours = now.hour();
int nowhours = nowhours / 10; //getting the first digit of the hours and putting them in a Int.
if (nowhours = 0){
digitalWrite(RCLK, LOW);
shiftOut(SER, SRCLK, MSBFIRST, 0);
digitalWrite(RCLK, HIGH);
}
if (nowhours = 1){
digitalWrite(RCLK, LOW);
shiftOut(SER, SRCLK, MSBFIRST, numOne);
digitalWrite(RCLK, HIGH);
}
if (nowhours = 2){
digitalWrite(RCLK, LOW);
shiftOut(SER, SRCLK, MSBFIRST, numTwo);
digitalWrite(RCLK, HIGH);
} //three times checking the digit and transferring the data to the ShiftReg.
digitalWrite(10, HIGH);
delay(1);
digitalWrite(10, LOW); //briefly turning the VFD Number 1 on to display the first Digit
}
if (counter = 2){
nowhours = now.hour(); //"resetting" the Int.
int nowhours = nowhours % 10; //getting the second digit of the hour
if (nowhours = 0){
digitalWrite(RCLK, LOW);
shiftOut(SER, SRCLK, MSBFIRST, numZero);
digitalWrite(RCLK, HIGH);
}
if (nowhours = 1){
digitalWrite(RCLK, LOW);
shiftOut(SER, SRCLK, MSBFIRST, numOne);
digitalWrite(RCLK, HIGH);
}
if (nowhours = 2){
digitalWrite(RCLK, LOW);
shiftOut(SER, SRCLK, MSBFIRST, numTwo);
digitalWrite(RCLK, HIGH);
}
if (nowhours = 3){
digitalWrite(RCLK, LOW);
shiftOut(SER, SRCLK, MSBFIRST, numThree);
digitalWrite(RCLK, HIGH);
}
if (nowhours = 4){
digitalWrite(RCLK, LOW);
shiftOut(SER, SRCLK, MSBFIRST, numFour);
digitalWrite(RCLK, HIGH);
}
if (nowhours = 5){
digitalWrite(RCLK, LOW);
shiftOut(SER, SRCLK, MSBFIRST, numFive);
digitalWrite(RCLK, HIGH);
}
if (nowhours = 6){
digitalWrite(RCLK, LOW);
shiftOut(SER, SRCLK, MSBFIRST, numSix);
digitalWrite(RCLK, HIGH);
}
if (nowhours = 7){
digitalWrite(RCLK, LOW);
shiftOut(SER, SRCLK, MSBFIRST, numSeven);
digitalWrite(RCLK, HIGH);
}
if (nowhours = 8){
digitalWrite(RCLK, LOW);
shiftOut(SER, SRCLK, MSBFIRST, numEight);
digitalWrite(RCLK, HIGH);
}
if (nowhours = 9){
digitalWrite(RCLK, LOW);
shiftOut(SER, SRCLK, MSBFIRST, numNine);
digitalWrite(RCLK, HIGH);
} //checking for the second digit and transmitting the data to the ShiftReg.
digitalWrite(2, HIGH);
delay(1);
digitalWrite(2, LOW); //briefly turning the second VFD on to display the second digit
}
if (counter = 3){
digitalWrite(3, HIGH);
delay(1);
digitalWrite(3, LOW);
}
if (counter = 4){
digitalWrite(6, HIGH);
delay(1);
digitalWrite(6, LOW);
}
if (counter = 5){
digitalWrite(7, HIGH);
delay(1);
digitalWrite(7, LOW);
}
if (counter = 6){
digitalWrite(8, HIGH);
delay(1);
digitalWrite(8, LOW);
}
//just turning on the rest of the VFD's for testing purposes
if (counter = 6){
counter = 1;
}
else{
counter = counter + 1; //this is used for the purpose of updating one VFD per cycle
}
}