diff --git a/Firmware for NCS314 v3.x/DisplayNixie3x/.cproject b/Firmware for NCS314 v3.x/DisplayNixie3x/.cproject
new file mode 100644
index 0000000..97ef612
--- /dev/null
+++ b/Firmware for NCS314 v3.x/DisplayNixie3x/.cproject
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Firmware for NCS314 v3.x/DisplayNixie3x/.project b/Firmware for NCS314 v3.x/DisplayNixie3x/.project
new file mode 100644
index 0000000..041b610
--- /dev/null
+++ b/Firmware for NCS314 v3.x/DisplayNixie3x/.project
@@ -0,0 +1,27 @@
+
+
+ DisplayNixie3x
+
+
+
+
+
+ org.eclipse.cdt.managedbuilder.core.genmakebuilder
+ clean,full,incremental,
+
+
+
+
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder
+ full,incremental,
+
+
+
+
+
+ org.eclipse.cdt.core.cnature
+ org.eclipse.cdt.core.ccnature
+ org.eclipse.cdt.managedbuilder.core.managedBuildNature
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigNature
+
+
diff --git a/Firmware for NCS314 v3.x/DisplayNixie3x/.settings/language.settings.xml b/Firmware for NCS314 v3.x/DisplayNixie3x/.settings/language.settings.xml
new file mode 100644
index 0000000..9ff0d1a
--- /dev/null
+++ b/Firmware for NCS314 v3.x/DisplayNixie3x/.settings/language.settings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Firmware for NCS314 v3.x/DisplayNixie3x/.settings/org.eclipse.cdt.managedbuilder.core.prefs b/Firmware for NCS314 v3.x/DisplayNixie3x/.settings/org.eclipse.cdt.managedbuilder.core.prefs
new file mode 100644
index 0000000..86c4b17
--- /dev/null
+++ b/Firmware for NCS314 v3.x/DisplayNixie3x/.settings/org.eclipse.cdt.managedbuilder.core.prefs
@@ -0,0 +1,13 @@
+eclipse.preferences.version=1
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cross.exe.debug.493283321/CPATH/delimiter=\:
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cross.exe.debug.493283321/CPATH/operation=remove
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cross.exe.debug.493283321/CPLUS_INCLUDE_PATH/delimiter=\:
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cross.exe.debug.493283321/CPLUS_INCLUDE_PATH/operation=remove
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cross.exe.debug.493283321/C_INCLUDE_PATH/delimiter=\:
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cross.exe.debug.493283321/C_INCLUDE_PATH/operation=remove
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cross.exe.debug.493283321/append=true
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cross.exe.debug.493283321/appendContributed=true
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.cross.exe.debug.493283321/LIBRARY_PATH/delimiter=\:
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.cross.exe.debug.493283321/LIBRARY_PATH/operation=remove
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.cross.exe.debug.493283321/append=true
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.cross.exe.debug.493283321/appendContributed=true
diff --git a/Firmware for NCS314 v3.x/DisplayNixie3x/Debug/DisplayNixie3x b/Firmware for NCS314 v3.x/DisplayNixie3x/Debug/DisplayNixie3x
new file mode 100644
index 0000000..677bb84
Binary files /dev/null and b/Firmware for NCS314 v3.x/DisplayNixie3x/Debug/DisplayNixie3x differ
diff --git a/Firmware for NCS314 v3.x/DisplayNixie3x/Debug/makefile b/Firmware for NCS314 v3.x/DisplayNixie3x/Debug/makefile
new file mode 100644
index 0000000..2bd1d14
--- /dev/null
+++ b/Firmware for NCS314 v3.x/DisplayNixie3x/Debug/makefile
@@ -0,0 +1,59 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+-include ../makefile.init
+
+RM := rm -rf
+
+# All of the sources participating in the build are defined here
+-include sources.mk
+-include src/subdir.mk
+-include subdir.mk
+-include objects.mk
+
+ifneq ($(MAKECMDGOALS),clean)
+ifneq ($(strip $(CC_DEPS)),)
+-include $(CC_DEPS)
+endif
+ifneq ($(strip $(C++_DEPS)),)
+-include $(C++_DEPS)
+endif
+ifneq ($(strip $(C_UPPER_DEPS)),)
+-include $(C_UPPER_DEPS)
+endif
+ifneq ($(strip $(CXX_DEPS)),)
+-include $(CXX_DEPS)
+endif
+ifneq ($(strip $(C_DEPS)),)
+-include $(C_DEPS)
+endif
+ifneq ($(strip $(CPP_DEPS)),)
+-include $(CPP_DEPS)
+endif
+endif
+
+-include ../makefile.defs
+
+# Add inputs and outputs from these tool invocations to the build variables
+
+# All Target
+all: DisplayNixie3x
+
+# Tool invocations
+DisplayNixie3x: $(OBJS) $(USER_OBJS)
+ @echo 'Building target: $@'
+ @echo 'Invoking: Cross G++ Linker'
+ g++ -o "DisplayNixie3x" $(OBJS) $(USER_OBJS) $(LIBS)
+ @echo 'Finished building target: $@'
+ @echo ' '
+
+# Other Targets
+clean:
+ -$(RM) $(CC_DEPS)$(C++_DEPS)$(EXECUTABLES)$(OBJS)$(C_UPPER_DEPS)$(CXX_DEPS)$(C_DEPS)$(CPP_DEPS) DisplayNixie3x
+ -@echo ' '
+
+.PHONY: all clean dependents
+.SECONDARY:
+
+-include ../makefile.targets
diff --git a/Firmware for NCS314 v3.x/DisplayNixie3x/Debug/objects.mk b/Firmware for NCS314 v3.x/DisplayNixie3x/Debug/objects.mk
new file mode 100644
index 0000000..188e58f
--- /dev/null
+++ b/Firmware for NCS314 v3.x/DisplayNixie3x/Debug/objects.mk
@@ -0,0 +1,8 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+USER_OBJS :=
+
+LIBS := -lwiringPi
+
diff --git a/Firmware for NCS314 v3.x/DisplayNixie3x/Debug/sources.mk b/Firmware for NCS314 v3.x/DisplayNixie3x/Debug/sources.mk
new file mode 100644
index 0000000..f9fe80f
--- /dev/null
+++ b/Firmware for NCS314 v3.x/DisplayNixie3x/Debug/sources.mk
@@ -0,0 +1,27 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+C_UPPER_SRCS :=
+CXX_SRCS :=
+C++_SRCS :=
+OBJ_SRCS :=
+CC_SRCS :=
+ASM_SRCS :=
+C_SRCS :=
+CPP_SRCS :=
+O_SRCS :=
+S_UPPER_SRCS :=
+CC_DEPS :=
+C++_DEPS :=
+EXECUTABLES :=
+OBJS :=
+C_UPPER_DEPS :=
+CXX_DEPS :=
+C_DEPS :=
+CPP_DEPS :=
+
+# Every subdirectory with source files must be described here
+SUBDIRS := \
+src \
+
diff --git a/Firmware for NCS314 v3.x/DisplayNixie3x/Debug/src/DisplayNixie3x.d b/Firmware for NCS314 v3.x/DisplayNixie3x/Debug/src/DisplayNixie3x.d
new file mode 100644
index 0000000..cdeb97a
--- /dev/null
+++ b/Firmware for NCS314 v3.x/DisplayNixie3x/Debug/src/DisplayNixie3x.d
@@ -0,0 +1 @@
+src/DisplayNixie3x.d: ../src/DisplayNixie3x.cpp
diff --git a/Firmware for NCS314 v3.x/DisplayNixie3x/Debug/src/DisplayNixie3x.o b/Firmware for NCS314 v3.x/DisplayNixie3x/Debug/src/DisplayNixie3x.o
new file mode 100644
index 0000000..f77db47
Binary files /dev/null and b/Firmware for NCS314 v3.x/DisplayNixie3x/Debug/src/DisplayNixie3x.o differ
diff --git a/Firmware for NCS314 v3.x/DisplayNixie3x/Debug/src/subdir.mk b/Firmware for NCS314 v3.x/DisplayNixie3x/Debug/src/subdir.mk
new file mode 100644
index 0000000..31b0814
--- /dev/null
+++ b/Firmware for NCS314 v3.x/DisplayNixie3x/Debug/src/subdir.mk
@@ -0,0 +1,24 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+# Add inputs and outputs from these tool invocations to the build variables
+CPP_SRCS += \
+../src/DisplayNixie3x.cpp
+
+OBJS += \
+./src/DisplayNixie3x.o
+
+CPP_DEPS += \
+./src/DisplayNixie3x.d
+
+
+# Each subdirectory must supply rules for building sources it contributes
+src/%.o: ../src/%.cpp
+ @echo 'Building file: $<'
+ @echo 'Invoking: Cross G++ Compiler'
+ g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+
diff --git a/Firmware for NCS314 v3.x/DisplayNixie3x/src/DisplayNixie3x.cpp b/Firmware for NCS314 v3.x/DisplayNixie3x/src/DisplayNixie3x.cpp
new file mode 100644
index 0000000..5532d0e
--- /dev/null
+++ b/Firmware for NCS314 v3.x/DisplayNixie3x/src/DisplayNixie3x.cpp
@@ -0,0 +1,373 @@
+//============================================================================
+// Name : DisplayNixie.cpp
+// Author : GRA&AFCH
+// Version : v1.0
+// Copyright : Free
+// Description : Display time on shields NCS314 v3.x
+// Date : 27.04.2020
+//============================================================================
+
+#define _VERSION "1.0 for NCS314 HW Version 3.x"
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#define bitRead(value, bit) (((value) >> (bit)) & 0x01)
+#define bitSet(value, bit) ((value) |= (1UL << (bit)))
+#define bitClear(value, bit) ((value) &= ~(1UL << (bit)))
+#define bitWrite(value, bit, bitvalue) (bitvalue ? bitSet(value, bit) : bitClear(value, bit))
+
+using namespace std;
+#define LEpin 3
+#define SHDNpin 2
+#define UP_BUTTON_PIN 1
+#define DOWN_BUTTON_PIN 4
+#define MODE_BUTTON_PIN 5
+#define BUZZER_PIN 0
+#define I2CAdress 0x68
+#define I2CFlush 0
+
+#define DEBOUNCE_DELAY 150
+#define TOTAL_DELAY 17
+
+#define SECOND_REGISTER 0x0
+#define MINUTE_REGISTER 0x1
+#define HOUR_REGISTER 0x2
+#define WEEK_REGISTER 0x3
+#define DAY_REGISTER 0x4
+#define MONTH_REGISTER 0x5
+#define YEAR_REGISTER 0x6
+
+#define RED_LIGHT_PIN 28
+#define GREEN_LIGHT_PIN 27
+#define BLUE_LIGHT_PIN 29
+#define MAX_POWER 100
+
+#define UPPER_DOTS_MASK 0x80000000
+#define LOWER_DOTS_MASK 0x40000000
+
+#define LEFT_REPR_START 5
+#define LEFT_BUFFER_START 0
+#define RIGHT_REPR_START 2
+#define RIGHT_BUFFER_START 4
+
+uint16_t SymbolArray[10]={1, 2, 4, 8, 16, 32, 64, 128, 256, 512};
+
+int fileDesc;
+int redLight = 100;
+int greenLight = 0;
+int blueLight = 0;
+int lightCycle = 0;
+bool dotState = 0;
+int rotator = 0;
+
+int bcdToDec(int val) {
+ return ((val / 16 * 10) + (val % 16));
+}
+
+int decToBcd(int val) {
+ return ((val / 10 * 16) + (val % 10));
+}
+
+tm addHourToDate(tm date) {
+ date.tm_hour += 1;
+ mktime(&date);
+ return date;
+}
+
+tm addMinuteToDate(tm date) {
+ date.tm_min += 1;
+ mktime(&date);
+ return date;
+}
+
+tm getRTCDate() {
+ wiringPiI2CWrite(fileDesc, I2CFlush);
+ tm date;
+ date.tm_sec = bcdToDec(wiringPiI2CReadReg8(fileDesc,SECOND_REGISTER));
+ date.tm_min = bcdToDec(wiringPiI2CReadReg8(fileDesc,MINUTE_REGISTER));
+ date.tm_hour = bcdToDec(wiringPiI2CReadReg8(fileDesc,HOUR_REGISTER));
+ date.tm_wday = bcdToDec(wiringPiI2CReadReg8(fileDesc,WEEK_REGISTER));
+ date.tm_mday = bcdToDec(wiringPiI2CReadReg8(fileDesc,DAY_REGISTER));
+ date.tm_mon = bcdToDec(wiringPiI2CReadReg8(fileDesc,MONTH_REGISTER));
+ date.tm_year = bcdToDec(wiringPiI2CReadReg8(fileDesc,YEAR_REGISTER));
+ date.tm_isdst = 0;
+ return date;
+}
+
+void updateRTCHour(tm date) {
+ wiringPiI2CWrite(fileDesc, I2CFlush);
+ wiringPiI2CWriteReg8(fileDesc,HOUR_REGISTER,decToBcd(date.tm_hour));
+ wiringPiI2CWrite(fileDesc, I2CFlush);
+}
+
+void updateRTCMinute(tm date) {
+ wiringPiI2CWrite(fileDesc, I2CFlush);
+ wiringPiI2CWriteReg8(fileDesc,MINUTE_REGISTER,decToBcd(date.tm_min));
+ wiringPiI2CWriteReg8(fileDesc,HOUR_REGISTER,decToBcd(date.tm_hour));
+ wiringPiI2CWrite(fileDesc, I2CFlush);
+}
+void resetRTCSecond() {
+ wiringPiI2CWrite(fileDesc, I2CFlush);
+ wiringPiI2CWriteReg8(fileDesc,SECOND_REGISTER, 0);
+ wiringPiI2CWrite(fileDesc, I2CFlush);
+}
+
+void writeRTCDate(tm date) {
+ wiringPiI2CWrite(fileDesc, I2CFlush);
+ wiringPiI2CWriteReg8(fileDesc,SECOND_REGISTER,decToBcd(date.tm_sec));
+ wiringPiI2CWriteReg8(fileDesc,MINUTE_REGISTER,decToBcd(date.tm_min));
+ wiringPiI2CWriteReg8(fileDesc,HOUR_REGISTER,decToBcd(date.tm_hour));
+ wiringPiI2CWriteReg8(fileDesc,WEEK_REGISTER,decToBcd(date.tm_wday));
+ wiringPiI2CWriteReg8(fileDesc,DAY_REGISTER,decToBcd(date.tm_mday));
+ wiringPiI2CWriteReg8(fileDesc,MONTH_REGISTER,decToBcd(date.tm_mon));
+ wiringPiI2CWriteReg8(fileDesc,YEAR_REGISTER,decToBcd(date.tm_year));
+ wiringPiI2CWrite(fileDesc, I2CFlush);
+}
+
+void initPin(int pin) {
+ pinMode(pin, INPUT);
+ pullUpDnControl(pin, PUD_UP);
+
+}
+
+void funcMode(void) {
+ static unsigned long modeTime = 0;
+ if ((millis() - modeTime) > DEBOUNCE_DELAY) {
+ puts("MODE button was pressed.");
+ resetRTCSecond();
+ modeTime = millis();
+ }
+}
+
+void dotBlink()
+{
+ static unsigned int lastTimeBlink=millis();
+
+ if ((millis() - lastTimeBlink) > 1000)
+ {
+ lastTimeBlink=millis();
+ dotState = !dotState;
+ }
+}
+
+/*void rotateFireWorks() {
+ int fireworks[] = {0,0,1,
+ -1,0,0,
+ 0,1,0,
+ 0,0,-1,
+ 1,0,0,
+ 0,-1,0
+ };
+ redLight += fireworks[rotator * 3];
+ greenLight += fireworks[rotator * 3 + 1];
+ blueLight += fireworks[rotator * 3 + 2];
+ softPwmWrite(RED_LIGHT_PIN, redLight);
+ softPwmWrite(GREEN_LIGHT_PIN, greenLight);
+ softPwmWrite(BLUE_LIGHT_PIN, blueLight);
+ lightCycle = lightCycle + 1;
+ if (lightCycle == MAX_POWER) {
+ rotator = rotator + 1;
+ lightCycle = 0;
+ }
+ if (rotator > 5)
+ rotator = 0;
+}*/
+
+uint32_t get32Rep(char * _stringToDisplay, int start) {
+ uint32_t var32 = 0;
+
+ var32= (SymbolArray[_stringToDisplay[start]-0x30])<<20;
+ var32|=(SymbolArray[_stringToDisplay[start - 1]-0x30])<<10;
+ var32|=(SymbolArray[_stringToDisplay[start - 2]-0x30]);
+ return var32;
+}
+
+void fillBuffer(uint32_t var32, unsigned char * buffer, int start) {
+
+ buffer[start] = var32>>24;
+ buffer[start + 1] = var32>>16;
+ buffer[start + 2] = var32>>8;
+ buffer[start + 3] = var32;
+}
+
+
+uint32_t addBlinkTo32Rep(uint32_t var) {
+ if (dotState)
+ {
+ var &=~LOWER_DOTS_MASK;
+ var &=~UPPER_DOTS_MASK;
+ }
+ else
+ {
+ var |=LOWER_DOTS_MASK;
+ var |=UPPER_DOTS_MASK;
+ }
+ return var;
+}
+
+char _stringToDisplay[8];
+void doIndication();
+
+int main(int argc, char* argv[]) {
+ printf("Nixie Clock v%s \n\r", _VERSION);
+ wiringPiSetup();
+ //softToneCreate (BUZZER_PIN);
+ //softToneWrite(BUZZER_PIN, 1000);
+ softPwmCreate(RED_LIGHT_PIN, 100, MAX_POWER);
+ softPwmCreate(GREEN_LIGHT_PIN, 0, MAX_POWER);
+ softPwmCreate(BLUE_LIGHT_PIN, 0, MAX_POWER);
+ initPin(UP_BUTTON_PIN);
+ initPin(DOWN_BUTTON_PIN);
+ initPin(MODE_BUTTON_PIN);
+ wiringPiISR(MODE_BUTTON_PIN,INT_EDGE_RISING,&funcMode);
+ fileDesc = wiringPiI2CSetup(I2CAdress);
+
+ tm date = getRTCDate();
+ time_t seconds = time(NULL);
+ tm* timeinfo = localtime (&seconds);
+ date.tm_mday = timeinfo->tm_mday;
+ date.tm_wday = timeinfo->tm_wday;
+ date.tm_mon = timeinfo->tm_mon + 1;
+ date.tm_year = timeinfo->tm_year - 100;
+ writeRTCDate(date);
+
+ if (wiringPiSPISetupMode (0, 2000000, 3)) {
+ puts("SPI ok");
+ }
+ else {
+ puts("SPI NOT ok");
+ return 0;
+ }
+
+ pinMode(SHDNpin, OUTPUT);
+ digitalWrite(SHDNpin, HIGH); //HIGH = ON
+
+ long hourDelay = millis();
+ long minuteDelay = hourDelay;
+ do {
+ //char _stringToDisplay[8];
+ date = getRTCDate();
+ char* format ="%H%M%S";
+ strftime(_stringToDisplay, 8, format, &date);
+
+
+ pinMode(LEpin, OUTPUT);
+ dotBlink();
+
+ doIndication();
+
+ if (digitalRead(UP_BUTTON_PIN) == 0 && (millis() - hourDelay) > DEBOUNCE_DELAY) {
+ updateRTCHour(addHourToDate(date));
+ hourDelay = millis();
+ }
+ if (digitalRead(DOWN_BUTTON_PIN) == 0 && (millis() - minuteDelay) > DEBOUNCE_DELAY) {
+ updateRTCMinute(addMinuteToDate(date));
+ minuteDelay = millis();
+ }
+
+// rotateFireWorks();
+
+ delay (TOTAL_DELAY);
+ }
+ while (true);
+ return 0;
+}
+
+
+#define UpperDotsMask 0x80000000
+#define LowerDotsMask 0x40000000
+
+void doIndication()
+{
+
+ unsigned long Var32=0;
+ unsigned long New32_L=0;
+ unsigned long New32_H=0;
+ unsigned char buff[8];
+
+ long digits=atoi(_stringToDisplay);
+
+ /**********************************************************
+ * Data format incomin [H1][H2][M1][M2][S1][S2]
+ *********************************************************/
+
+ //-------- REG 1 -----------------------------------------------
+ Var32=0;
+
+ Var32|=(unsigned long)(SymbolArray[digits%10])<<20; // s2
+ digits=digits/10;
+
+ Var32|=(unsigned long)(SymbolArray[digits%10])<<10; //s1
+ digits=digits/10;
+
+ Var32|=(unsigned long)(SymbolArray[digits%10]); //m2
+ digits=digits/10;
+
+ if (dotState) Var32|=LowerDotsMask;
+ else Var32&=~LowerDotsMask;
+
+ if (dotState) Var32|=UpperDotsMask;
+ else Var32&=~UpperDotsMask;
+
+ for (int i=1; i<=32; i++)
+ {
+ i=i+32;
+ int newindex=16*(3-(ceil((float)i/4)*4-i))+ceil((float)i/4);
+ i=i-32;
+ if (newindex<=32) bitWrite(New32_L, newindex-1, bitRead(Var32, i-1));
+ else bitWrite(New32_H, newindex-32-1, bitRead(Var32, i-1));
+ }
+ //-------------------------------------------------------------------------
+
+ //-------- REG 0 -----------------------------------------------
+ Var32=0;
+
+ Var32|=(unsigned long)(SymbolArray[digits%10])<<20; // m1
+ digits=digits/10;
+
+ Var32|= (unsigned long)(SymbolArray[digits%10])<<10; //h2
+ digits=digits/10;
+
+ Var32|= (unsigned long)SymbolArray[digits%10]; //h1
+ digits=digits/10;
+
+ if (dotState) Var32|=LowerDotsMask;
+ else Var32&=~LowerDotsMask;
+
+ if (dotState) Var32|=UpperDotsMask;
+ else Var32&=~UpperDotsMask;
+
+ for (int i=1; i<=32; i++)
+ {
+ int newindex=16*(3-(ceil((float)i/4)*4-i))+ceil((float)i/4);
+ if (newindex<=32) bitWrite(New32_L, newindex-1, bitRead(Var32, i-1));
+ else bitWrite(New32_H, newindex-32-1, bitRead(Var32, i-1));
+ }
+
+ buff[0] = New32_H>>24;
+ buff[1] = New32_H>>16;
+ buff[2] = New32_H>>8;
+ buff[3] = New32_H;
+
+ buff[4] = New32_L>>24;
+ buff[5] = New32_L>>16;
+ buff[6] = New32_L>>8;
+ buff[7] = New32_L;
+
+ wiringPiSPIDataRW(0, buff, 8);
+
+ digitalWrite(LEpin, HIGH); // <<-- H -> L
+
+ digitalWrite(LEpin, LOW); //<<-- H -> L
+
+//-------------------------------------------------------------------------
+}
+
diff --git a/Firmware for NCS318/DisplayNixie/.cproject b/Firmware for NCS318/DisplayNixie/.cproject
new file mode 100644
index 0000000..f15b22f
--- /dev/null
+++ b/Firmware for NCS318/DisplayNixie/.cproject
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Firmware for NCS318/DisplayNixie/.project b/Firmware for NCS318/DisplayNixie/.project
new file mode 100644
index 0000000..654b804
--- /dev/null
+++ b/Firmware for NCS318/DisplayNixie/.project
@@ -0,0 +1,27 @@
+
+
+ DisplayNixie
+
+
+
+
+
+ org.eclipse.cdt.managedbuilder.core.genmakebuilder
+ clean,full,incremental,
+
+
+
+
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder
+ full,incremental,
+
+
+
+
+
+ org.eclipse.cdt.core.cnature
+ org.eclipse.cdt.core.ccnature
+ org.eclipse.cdt.managedbuilder.core.managedBuildNature
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigNature
+
+
diff --git a/Firmware for NCS318/DisplayNixie/.settings/language.settings.xml b/Firmware for NCS318/DisplayNixie/.settings/language.settings.xml
new file mode 100644
index 0000000..d04974f
--- /dev/null
+++ b/Firmware for NCS318/DisplayNixie/.settings/language.settings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Firmware for NCS318/DisplayNixie/.settings/org.eclipse.cdt.managedbuilder.core.prefs b/Firmware for NCS318/DisplayNixie/.settings/org.eclipse.cdt.managedbuilder.core.prefs
new file mode 100644
index 0000000..86c4b17
--- /dev/null
+++ b/Firmware for NCS318/DisplayNixie/.settings/org.eclipse.cdt.managedbuilder.core.prefs
@@ -0,0 +1,13 @@
+eclipse.preferences.version=1
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cross.exe.debug.493283321/CPATH/delimiter=\:
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cross.exe.debug.493283321/CPATH/operation=remove
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cross.exe.debug.493283321/CPLUS_INCLUDE_PATH/delimiter=\:
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cross.exe.debug.493283321/CPLUS_INCLUDE_PATH/operation=remove
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cross.exe.debug.493283321/C_INCLUDE_PATH/delimiter=\:
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cross.exe.debug.493283321/C_INCLUDE_PATH/operation=remove
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cross.exe.debug.493283321/append=true
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cross.exe.debug.493283321/appendContributed=true
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.cross.exe.debug.493283321/LIBRARY_PATH/delimiter=\:
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.cross.exe.debug.493283321/LIBRARY_PATH/operation=remove
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.cross.exe.debug.493283321/append=true
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.cross.exe.debug.493283321/appendContributed=true
diff --git a/Firmware for NCS318/DisplayNixie/Debug/DisplayNixie b/Firmware for NCS318/DisplayNixie/Debug/DisplayNixie
new file mode 100644
index 0000000..64bc9ab
Binary files /dev/null and b/Firmware for NCS318/DisplayNixie/Debug/DisplayNixie differ
diff --git a/Firmware for NCS318/DisplayNixie/Debug/makefile b/Firmware for NCS318/DisplayNixie/Debug/makefile
new file mode 100644
index 0000000..6bd9144
--- /dev/null
+++ b/Firmware for NCS318/DisplayNixie/Debug/makefile
@@ -0,0 +1,59 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+-include ../makefile.init
+
+RM := rm -rf
+
+# All of the sources participating in the build are defined here
+-include sources.mk
+-include src/subdir.mk
+-include subdir.mk
+-include objects.mk
+
+ifneq ($(MAKECMDGOALS),clean)
+ifneq ($(strip $(CC_DEPS)),)
+-include $(CC_DEPS)
+endif
+ifneq ($(strip $(C++_DEPS)),)
+-include $(C++_DEPS)
+endif
+ifneq ($(strip $(C_UPPER_DEPS)),)
+-include $(C_UPPER_DEPS)
+endif
+ifneq ($(strip $(CXX_DEPS)),)
+-include $(CXX_DEPS)
+endif
+ifneq ($(strip $(C_DEPS)),)
+-include $(C_DEPS)
+endif
+ifneq ($(strip $(CPP_DEPS)),)
+-include $(CPP_DEPS)
+endif
+endif
+
+-include ../makefile.defs
+
+# Add inputs and outputs from these tool invocations to the build variables
+
+# All Target
+all: DisplayNixie
+
+# Tool invocations
+DisplayNixie: $(OBJS) $(USER_OBJS)
+ @echo 'Building target: $@'
+ @echo 'Invoking: Cross G++ Linker'
+ g++ -o "DisplayNixie" $(OBJS) $(USER_OBJS) $(LIBS)
+ @echo 'Finished building target: $@'
+ @echo ' '
+
+# Other Targets
+clean:
+ -$(RM) $(CC_DEPS)$(C++_DEPS)$(EXECUTABLES)$(OBJS)$(C_UPPER_DEPS)$(CXX_DEPS)$(C_DEPS)$(CPP_DEPS) DisplayNixie
+ -@echo ' '
+
+.PHONY: all clean dependents
+.SECONDARY:
+
+-include ../makefile.targets
diff --git a/Firmware for NCS318/DisplayNixie/Debug/objects.mk b/Firmware for NCS318/DisplayNixie/Debug/objects.mk
new file mode 100644
index 0000000..188e58f
--- /dev/null
+++ b/Firmware for NCS318/DisplayNixie/Debug/objects.mk
@@ -0,0 +1,8 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+USER_OBJS :=
+
+LIBS := -lwiringPi
+
diff --git a/Firmware for NCS318/DisplayNixie/Debug/sources.mk b/Firmware for NCS318/DisplayNixie/Debug/sources.mk
new file mode 100644
index 0000000..f9fe80f
--- /dev/null
+++ b/Firmware for NCS318/DisplayNixie/Debug/sources.mk
@@ -0,0 +1,27 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+C_UPPER_SRCS :=
+CXX_SRCS :=
+C++_SRCS :=
+OBJ_SRCS :=
+CC_SRCS :=
+ASM_SRCS :=
+C_SRCS :=
+CPP_SRCS :=
+O_SRCS :=
+S_UPPER_SRCS :=
+CC_DEPS :=
+C++_DEPS :=
+EXECUTABLES :=
+OBJS :=
+C_UPPER_DEPS :=
+CXX_DEPS :=
+C_DEPS :=
+CPP_DEPS :=
+
+# Every subdirectory with source files must be described here
+SUBDIRS := \
+src \
+
diff --git a/Firmware for NCS318/DisplayNixie/Debug/src/DisplayNixie.d b/Firmware for NCS318/DisplayNixie/Debug/src/DisplayNixie.d
new file mode 100644
index 0000000..c8efe49
--- /dev/null
+++ b/Firmware for NCS318/DisplayNixie/Debug/src/DisplayNixie.d
@@ -0,0 +1 @@
+src/DisplayNixie.d: ../src/DisplayNixie.cpp
diff --git a/Firmware for NCS318/DisplayNixie/Debug/src/DisplayNixie.o b/Firmware for NCS318/DisplayNixie/Debug/src/DisplayNixie.o
new file mode 100644
index 0000000..c77852d
Binary files /dev/null and b/Firmware for NCS318/DisplayNixie/Debug/src/DisplayNixie.o differ
diff --git a/Firmware for NCS318/DisplayNixie/Debug/src/subdir.mk b/Firmware for NCS318/DisplayNixie/Debug/src/subdir.mk
new file mode 100644
index 0000000..c0ecb23
--- /dev/null
+++ b/Firmware for NCS318/DisplayNixie/Debug/src/subdir.mk
@@ -0,0 +1,24 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+# Add inputs and outputs from these tool invocations to the build variables
+CPP_SRCS += \
+../src/DisplayNixie.cpp
+
+OBJS += \
+./src/DisplayNixie.o
+
+CPP_DEPS += \
+./src/DisplayNixie.d
+
+
+# Each subdirectory must supply rules for building sources it contributes
+src/%.o: ../src/%.cpp
+ @echo 'Building file: $<'
+ @echo 'Invoking: Cross G++ Compiler'
+ g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+
diff --git a/Firmware for NCS318/DisplayNixie/src/DisplayNixie.cpp b/Firmware for NCS318/DisplayNixie/src/DisplayNixie.cpp
new file mode 100644
index 0000000..41e4811
--- /dev/null
+++ b/Firmware for NCS318/DisplayNixie/src/DisplayNixie.cpp
@@ -0,0 +1,287 @@
+//============================================================================
+// Name : DisplayNixie.cpp
+// Author : GRA&AFCH
+// Version : v1.3
+// Copyright : Free
+// Description : Display time on shields NCS318 v1.1
+//============================================================================
+
+#define _VERSION "1.3"
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+using namespace std;
+#define LEpin 3
+#define UP_BUTTON_PIN 1
+#define DOWN_BUTTON_PIN 4
+#define MODE_BUTTON_PIN 5
+#define BUZZER_PIN 0
+#define I2CAdress 0x68
+#define I2CFlush 0
+
+#define DEBOUNCE_DELAY 150
+#define TOTAL_DELAY 17
+
+#define SECOND_REGISTER 0x0
+#define MINUTE_REGISTER 0x1
+#define HOUR_REGISTER 0x2
+#define WEEK_REGISTER 0x3
+#define DAY_REGISTER 0x4
+#define MONTH_REGISTER 0x5
+#define YEAR_REGISTER 0x6
+
+//#define RED_LIGHT_PIN 28
+//#define GREEN_LIGHT_PIN 27
+//#define BLUE_LIGHT_PIN 29
+#define MAX_POWER 100
+
+#define UPPER_DOTS_MASK 0x80000000
+#define LOWER_DOTS_MASK 0x40000000
+
+#define LEFT_REPR_START 5
+#define LEFT_BUFFER_START 0
+#define RIGHT_REPR_START 2
+#define RIGHT_BUFFER_START 4
+
+uint16_t SymbolArray[10]={1, 2, 4, 8, 16, 32, 64, 128, 256, 512};
+
+int fileDesc;
+int redLight = 100;
+int greenLight = 0;
+int blueLight = 0;
+int lightCycle = 0;
+bool dotState = 0;
+int rotator = 0;
+
+int bcdToDec(int val) {
+ return ((val / 16 * 10) + (val % 16));
+}
+
+int decToBcd(int val) {
+ return ((val / 10 * 16) + (val % 10));
+}
+
+tm addHourToDate(tm date) {
+ date.tm_hour += 1;
+ mktime(&date);
+ return date;
+}
+
+tm addMinuteToDate(tm date) {
+ date.tm_min += 1;
+ mktime(&date);
+ return date;
+}
+
+tm getRTCDate() {
+ wiringPiI2CWrite(fileDesc, I2CFlush);
+ tm date;
+ date.tm_sec = bcdToDec(wiringPiI2CReadReg8(fileDesc,SECOND_REGISTER));
+ date.tm_min = bcdToDec(wiringPiI2CReadReg8(fileDesc,MINUTE_REGISTER));
+ date.tm_hour = bcdToDec(wiringPiI2CReadReg8(fileDesc,HOUR_REGISTER));
+ date.tm_wday = bcdToDec(wiringPiI2CReadReg8(fileDesc,WEEK_REGISTER));
+ date.tm_mday = bcdToDec(wiringPiI2CReadReg8(fileDesc,DAY_REGISTER));
+ date.tm_mon = bcdToDec(wiringPiI2CReadReg8(fileDesc,MONTH_REGISTER));
+ date.tm_year = bcdToDec(wiringPiI2CReadReg8(fileDesc,YEAR_REGISTER));
+ date.tm_isdst = 0;
+ return date;
+}
+
+void updateRTCHour(tm date) {
+ wiringPiI2CWrite(fileDesc, I2CFlush);
+ wiringPiI2CWriteReg8(fileDesc,HOUR_REGISTER,decToBcd(date.tm_hour));
+ wiringPiI2CWrite(fileDesc, I2CFlush);
+}
+
+void updateRTCMinute(tm date) {
+ wiringPiI2CWrite(fileDesc, I2CFlush);
+ wiringPiI2CWriteReg8(fileDesc,MINUTE_REGISTER,decToBcd(date.tm_min));
+ wiringPiI2CWriteReg8(fileDesc,HOUR_REGISTER,decToBcd(date.tm_hour));
+ wiringPiI2CWrite(fileDesc, I2CFlush);
+}
+void resetRTCSecond() {
+ wiringPiI2CWrite(fileDesc, I2CFlush);
+ wiringPiI2CWriteReg8(fileDesc,SECOND_REGISTER, 0);
+ wiringPiI2CWrite(fileDesc, I2CFlush);
+}
+
+void writeRTCDate(tm date) {
+ wiringPiI2CWrite(fileDesc, I2CFlush);
+ wiringPiI2CWriteReg8(fileDesc,SECOND_REGISTER,decToBcd(date.tm_sec));
+ wiringPiI2CWriteReg8(fileDesc,MINUTE_REGISTER,decToBcd(date.tm_min));
+ wiringPiI2CWriteReg8(fileDesc,HOUR_REGISTER,decToBcd(date.tm_hour));
+ wiringPiI2CWriteReg8(fileDesc,WEEK_REGISTER,decToBcd(date.tm_wday));
+ wiringPiI2CWriteReg8(fileDesc,DAY_REGISTER,decToBcd(date.tm_mday));
+ wiringPiI2CWriteReg8(fileDesc,MONTH_REGISTER,decToBcd(date.tm_mon));
+ wiringPiI2CWriteReg8(fileDesc,YEAR_REGISTER,decToBcd(date.tm_year));
+ wiringPiI2CWrite(fileDesc, I2CFlush);
+}
+
+void initPin(int pin) {
+ pinMode(pin, INPUT);
+ pullUpDnControl(pin, PUD_UP);
+
+}
+
+void funcMode(void) {
+ static unsigned long modeTime = 0;
+ if ((millis() - modeTime) > DEBOUNCE_DELAY) {
+ puts("MODE button was pressed.");
+ resetRTCSecond();
+ modeTime = millis();
+ }
+}
+
+
+
+uint32_t get32Rep(char * _stringToDisplay, int start) {
+ uint32_t var32 = 0;
+
+ var32= (SymbolArray[_stringToDisplay[start]-0x30])<<20;
+ var32|=(SymbolArray[_stringToDisplay[start - 1]-0x30])<<10;
+ var32|=(SymbolArray[_stringToDisplay[start - 2]-0x30]);
+ return var32;
+}
+
+void fillBuffer(uint32_t var32, unsigned char * buffer, int start) {
+ buffer[start] = var32>>24;
+ buffer[start + 1] = var32>>16;
+ buffer[start + 2] = var32>>8;
+ buffer[start + 3] = var32;
+}
+
+void dotBlink()
+{
+ static unsigned int lastTimeBlink=millis();
+
+ if ((millis() - lastTimeBlink) > 1000)
+ {
+ lastTimeBlink=millis();
+ dotState = !dotState;
+ }
+}
+/*
+void rotateFireWorks() {
+ int fireworks[] = {0,0,1,
+ -1,0,0,
+ 0,1,0,
+ 0,0,-1,
+ 1,0,0,
+ 0,-1,0
+ };
+ redLight += fireworks[rotator * 3];
+ greenLight += fireworks[rotator * 3 + 1];
+ blueLight += fireworks[rotator * 3 + 2];
+ softPwmWrite(RED_LIGHT_PIN, redLight);
+ softPwmWrite(GREEN_LIGHT_PIN, greenLight);
+ softPwmWrite(BLUE_LIGHT_PIN, blueLight);
+ lightCycle = lightCycle + 1;
+ if (lightCycle == MAX_POWER) {
+ rotator = rotator + 1;
+ lightCycle = 0;
+ }
+ if (rotator > 5)
+ rotator = 0;
+}*/
+
+uint32_t addBlinkTo32Rep(uint32_t var) {
+ if (dotState)
+ {
+ var &=~LOWER_DOTS_MASK;
+ var &=~UPPER_DOTS_MASK;
+ }
+ else
+ {
+ var |=LOWER_DOTS_MASK;
+ var |=UPPER_DOTS_MASK;
+ }
+ return var;
+}
+
+
+int main(int argc, char* argv[]) {
+ printf("Nixie Clock v%s \n\r", _VERSION);
+ wiringPiSetup();
+ //softToneCreate (BUZZER_PIN);
+ //softToneWrite(BUZZER_PIN, 1000);
+
+ /*softPwmCreate(RED_LIGHT_PIN, 100, MAX_POWER);
+ softPwmCreate(GREEN_LIGHT_PIN, 0, MAX_POWER);
+ softPwmCreate(BLUE_LIGHT_PIN, 0, MAX_POWER);
+ */
+ initPin(UP_BUTTON_PIN);
+ initPin(DOWN_BUTTON_PIN);
+ initPin(MODE_BUTTON_PIN);
+ //wiringPiISR(MODE_BUTTON_PIN,INT_EDGE_RISING,&funcMode);
+ fileDesc = wiringPiI2CSetup(I2CAdress);
+
+ tm date = getRTCDate();
+ time_t seconds = time(NULL);
+ tm* timeinfo = localtime (&seconds);
+ date.tm_mday = timeinfo->tm_mday;
+ date.tm_wday = timeinfo->tm_wday;
+ date.tm_mon = timeinfo->tm_mon + 1;
+ date.tm_year = timeinfo->tm_year - 100;
+ writeRTCDate(date);
+
+ if (wiringPiSPISetupMode (0, 2000000, 2)) {
+ puts("SPI ok");
+ }
+ else {
+ puts("SPI NOT ok");
+ return 0;
+ }
+
+ long hourDelay = millis();
+ long minuteDelay = hourDelay;
+ long modeDelay=hourDelay;
+ do {
+ char _stringToDisplay[8];
+ date = getRTCDate();
+ char* format ="%H%M%S";
+ strftime(_stringToDisplay, 8, format, &date);
+
+
+ pinMode(LEpin, OUTPUT);
+ dotBlink();
+
+ unsigned char buff[8];
+
+ uint32_t var32 = get32Rep(_stringToDisplay, LEFT_REPR_START);
+ var32 = addBlinkTo32Rep(var32);
+ fillBuffer(var32, buff , LEFT_BUFFER_START);
+
+ var32 = get32Rep(_stringToDisplay, RIGHT_REPR_START);
+ var32 = addBlinkTo32Rep(var32);
+ fillBuffer(var32, buff , RIGHT_BUFFER_START);
+
+ if (digitalRead(UP_BUTTON_PIN) == 0 && (millis() - hourDelay) > DEBOUNCE_DELAY) {
+ updateRTCHour(addHourToDate(date));
+ hourDelay = millis();
+ }
+ if (digitalRead(DOWN_BUTTON_PIN) == 0 && (millis() - minuteDelay) > DEBOUNCE_DELAY) {
+ updateRTCMinute(addMinuteToDate(date));
+ minuteDelay = millis();
+ }
+
+ if (digitalRead(MODE_BUTTON_PIN) == 0 && (millis() - modeDelay) > DEBOUNCE_DELAY) {
+ resetRTCSecond();
+ modeDelay = millis();
+ }
+
+ //rotateFireWorks();
+ digitalWrite(LEpin, LOW);
+ wiringPiSPIDataRW(0, buff, 8);
+ digitalWrite(LEpin, HIGH);
+ delay (TOTAL_DELAY);
+ }
+ while (true);
+ return 0;
+}
diff --git a/Firmware/src/DisplayNixie.cpp b/Firmware/src/DisplayNixie.cpp
index 0325053..07a5ccf 100644
--- a/Firmware/src/DisplayNixie.cpp
+++ b/Firmware/src/DisplayNixie.cpp
@@ -1,12 +1,12 @@
//============================================================================
// Name : DisplayNixie.cpp
// Author : GRA&AFCH
-// Version : v1.2
+// Version : v2.3
// Copyright : Free
// Description : Display time on shields NCS314 v2.x or NCS312
//============================================================================
-#define _VERSION "1.2"
+#define _VERSION "2.3"
#include
#include
@@ -18,6 +18,8 @@
#include
using namespace std;
+#define R5222_PIN 22
+bool HV5222;
#define LEpin 3
#define UP_BUTTON_PIN 1
#define DOWN_BUTTON_PIN 4
@@ -205,6 +207,8 @@ uint32_t addBlinkTo32Rep(uint32_t var) {
return var;
}
+//uint64_t* reverseBit(uint64_t num);
+uint64_t reverseBit(uint64_t num);
int main(int argc, char* argv[]) {
printf("Nixie Clock v%s \n\r", _VERSION);
@@ -217,7 +221,7 @@ int main(int argc, char* argv[]) {
initPin(UP_BUTTON_PIN);
initPin(DOWN_BUTTON_PIN);
initPin(MODE_BUTTON_PIN);
- wiringPiISR(MODE_BUTTON_PIN,INT_EDGE_RISING,&funcMode);
+ //wiringPiISR(MODE_BUTTON_PIN,INT_EDGE_RISING,&funcMode);
fileDesc = wiringPiI2CSetup(I2CAdress);
tm date = getRTCDate();
@@ -237,8 +241,15 @@ int main(int argc, char* argv[]) {
return 0;
}
+ pinMode(R5222_PIN, INPUT);
+ pullUpDnControl(R5222_PIN, PUD_UP);
+ HV5222=!digitalRead(R5222_PIN);
+ if (HV5222) puts("R52222 resistor detected. HV5222 algorithm is used.");
+ uint64_t reverseBuffValue;
+
long hourDelay = millis();
long minuteDelay = hourDelay;
+ long modeDelay = hourDelay;
do {
char _stringToDisplay[8];
date = getRTCDate();
@@ -253,10 +264,12 @@ int main(int argc, char* argv[]) {
uint32_t var32 = get32Rep(_stringToDisplay, LEFT_REPR_START);
var32 = addBlinkTo32Rep(var32);
+
fillBuffer(var32, buff , LEFT_BUFFER_START);
var32 = get32Rep(_stringToDisplay, RIGHT_REPR_START);
var32 = addBlinkTo32Rep(var32);
+
fillBuffer(var32, buff , RIGHT_BUFFER_START);
if (digitalRead(UP_BUTTON_PIN) == 0 && (millis() - hourDelay) > DEBOUNCE_DELAY) {
@@ -267,9 +280,27 @@ int main(int argc, char* argv[]) {
updateRTCMinute(addMinuteToDate(date));
minuteDelay = millis();
}
+ if (digitalRead(MODE_BUTTON_PIN) == 0 && (millis() - modeDelay) > DEBOUNCE_DELAY) {
+ resetRTCSecond();
+ modeDelay = millis();
+ }
rotateFireWorks();
digitalWrite(LEpin, LOW);
+
+ if (HV5222)
+ {
+ reverseBuffValue=reverseBit(*(uint64_t*)buff);
+ buff[4]=reverseBuffValue;
+ buff[5]=reverseBuffValue>>8;
+ buff[6]=reverseBuffValue>>16;
+ buff[7]=reverseBuffValue>>24;
+ buff[0]=reverseBuffValue>>32;
+ buff[1]=reverseBuffValue>>40;
+ buff[2]=reverseBuffValue>>48;
+ buff[3]=reverseBuffValue>>56;
+ }
+
wiringPiSPIDataRW(0, buff, 8);
digitalWrite(LEpin, HIGH);
delay (TOTAL_DELAY);
@@ -277,3 +308,16 @@ int main(int argc, char* argv[]) {
while (true);
return 0;
}
+
+//uint64_t* reverseBit(uint64_t num)
+uint64_t reverseBit(uint64_t num)
+{
+ uint64_t reverse_num=0;
+ int i;
+ for (i=0; i<64; i++)
+ {
+ if ((num & ((uint64_t)1<