#define LED_ON LOW
#define LED_OFF HIGH
#define DG1 23
#define DG2 25
#define DG3 18
#define DG4 14
#define A 32
#define B 13
#define C 5
#define D 22
#define E 19
#define F 33
#define G 27
#define DP 21
#define DPColon 26
hw_timer_t *timer1 = NULL;
hw_timer_t *timer2 = NULL;
unsigned int number = 0;
unsigned int tmpnumber1, tmpnumber2, tmpnumber3, tmpnumber4;
int status7Seg = 1;
int minclock = 0;
int secclock = 0;
bool statusclock = true;
unsigned long currenttime = 0;
unsigned long lasttime1sec = 0;
unsigned long lasttime500ms = 0;
bool tooglecolon = true;
void timer1_callback( void );
void showNumber(int num);
void setup() {
number = 0;
tmpnumber1 = number / 1000;
tmpnumber2 = (number - ((tmpnumber1) * 1000)) / 100;
tmpnumber3 = (number - (tmpnumber1 * 1000) - (tmpnumber2 * 100)) / 10;
tmpnumber4 = (number - (tmpnumber1 * 1000) - (tmpnumber2 * 100) - (tmpnumber3 * 10));
Serial.begin( 115200 );
Serial.printf( "\nShow Number : %d\n", number);
//Serial.printf( "\nDG1:%d DG2:%d DG3:%d DG4:%d\n", tmpnumber1, tmpnumber2, tmpnumber3, tmpnumber4);
pinMode(DG1, OUTPUT); pinMode(DG2, OUTPUT); pinMode(DG3, OUTPUT); pinMode(DG4, OUTPUT);
pinMode(DPColon, OUTPUT);
pinMode(A, OUTPUT); pinMode(B, OUTPUT); pinMode(C, OUTPUT);
pinMode(D, OUTPUT); pinMode(E, OUTPUT); pinMode(F, OUTPUT);
pinMode(G, OUTPUT); pinMode(DP, OUTPUT);
timer1 = timerBegin(1000000);
timerAttachInterrupt( timer1, &timer1_callback );
timerAlarm( timer1, 10000, true, 0 );
}
void loop() {
currenttime = millis();
if(currenttime - lasttime1sec >= 1000){
lasttime1sec = currenttime;
tmpnumber1 = minclock / 10;
tmpnumber2 = (minclock - ((tmpnumber1) * 10)) / 1;
tmpnumber3 = secclock / 10;
tmpnumber4 = (secclock - ((tmpnumber3) * 10)) / 1;
if(statusclock == true){
Serial.printf("Clock RUN -> %02d:%02d\n", minclock, secclock);
secclock++;
if(secclock>=60){
secclock = 0;
minclock++;
if(minclock>=60){
minclock = 0;
}
}
}else{
Serial.printf("Clock STOP -> %02d:%02d\n", minclock, secclock);
}
if(Serial.available()>0){
String rxuart = Serial.readString();
int rxuartint = rxuart.toInt();
if(rxuartint == 1){
statusclock = true;
Serial.println("Clock RUN " + rxuart);
}else if(rxuartint == 2){
statusclock = false;
Serial.println("Clock STOP " + rxuart);
}else{
Serial.println("Unknow cmd " + rxuart);
}
}
}
if(currenttime - lasttime500ms >= 500){
lasttime500ms = currenttime;
if(statusclock == true){
if(tooglecolon == true){
digitalWrite(DPColon, HIGH);
}else{
digitalWrite(DPColon, LOW);
}
tooglecolon = !tooglecolon;
}
}
}
void timer1_callback( void )
{
showNumber(10);
digitalWrite( DG1, HIGH );
digitalWrite( DG2, HIGH );
digitalWrite( DG3, HIGH );
digitalWrite( DG4, HIGH );
if (status7Seg == 1) {
showNumber(tmpnumber1);
digitalWrite( DG1, LOW );
digitalWrite( DG2, HIGH ); digitalWrite( DG3, HIGH ); digitalWrite( DG4, HIGH );
status7Seg = 2;
}
else if (status7Seg == 2) {
showNumber(tmpnumber2);
digitalWrite( DG2, LOW );
digitalWrite( DG1, HIGH ); digitalWrite( DG3, HIGH ); digitalWrite( DG4, HIGH );
status7Seg = 3;
}
else if (status7Seg == 3) {
showNumber(tmpnumber3);
digitalWrite( DG3, LOW );
digitalWrite( DG1, HIGH ); digitalWrite( DG2, HIGH ); digitalWrite( DG4, HIGH );
status7Seg = 4;
}
else if (status7Seg == 4) {
showNumber(tmpnumber4);
digitalWrite( DG4, LOW );
digitalWrite( DG1, HIGH ); digitalWrite( DG2, HIGH ); digitalWrite( DG3, HIGH );
status7Seg = 1;
}
else{
status7Seg = 1;
}
}
void showNumber(int num){
if (num == 0){
digitalWrite( A, HIGH ); digitalWrite( B, HIGH ); digitalWrite( C, HIGH );
digitalWrite( D, HIGH ); digitalWrite( E, HIGH ); digitalWrite( F, HIGH ); digitalWrite( G, LOW );
}
else if (num == 1) {
digitalWrite( A, LOW ); digitalWrite( B, HIGH ); digitalWrite( C, HIGH );
digitalWrite( D, LOW ); digitalWrite( E, LOW ); digitalWrite( F, LOW ); digitalWrite( G, LOW );
}
else if (num == 2) {
digitalWrite( A, HIGH ); digitalWrite( B, HIGH ); digitalWrite( C, LOW );
digitalWrite( D, HIGH ); digitalWrite( E, HIGH ); digitalWrite( F, LOW ); digitalWrite( G, HIGH );
}
else if (num == 3) {
digitalWrite( A, HIGH ); digitalWrite( B, HIGH ); digitalWrite( C, HIGH );
digitalWrite( D, HIGH ); digitalWrite( E, LOW ); digitalWrite( F, LOW ); digitalWrite( G, HIGH );
}
else if (num == 4) {
digitalWrite( A, LOW ); digitalWrite( B, HIGH ); digitalWrite( C, HIGH );
digitalWrite( D, LOW ); digitalWrite( E, LOW ); digitalWrite( F, HIGH ); digitalWrite( G, HIGH );
}
else if (num == 5) {
digitalWrite( A, HIGH ); digitalWrite( B, LOW ); digitalWrite( C, HIGH );
digitalWrite( D, HIGH ); digitalWrite( E, LOW ); digitalWrite( F, HIGH ); digitalWrite( G, HIGH );
}
else if (num == 6) {
digitalWrite( A, HIGH ); digitalWrite( B, LOW ); digitalWrite( C, HIGH );
digitalWrite( D, HIGH ); digitalWrite( E, HIGH ); digitalWrite( F, HIGH ); digitalWrite( G, HIGH );
}
else if (num == 7) {
digitalWrite( A, HIGH ); digitalWrite( B, HIGH ); digitalWrite( C, HIGH );
digitalWrite( D, LOW ); digitalWrite( E, LOW ); digitalWrite( F, LOW ); digitalWrite( G, LOW );
}
else if (num == 8) {
digitalWrite( A, HIGH ); digitalWrite( B, HIGH ); digitalWrite( C, HIGH );
digitalWrite( D, HIGH ); digitalWrite( E, HIGH ); digitalWrite( F, HIGH ); digitalWrite( G, HIGH );
}
else if (num == 9) {
digitalWrite( A, HIGH ); digitalWrite( B, HIGH ); digitalWrite( C, HIGH );
digitalWrite( D, HIGH ); digitalWrite( E, LOW ); digitalWrite( F, HIGH ); digitalWrite( G, HIGH );
}
else {
digitalWrite( A, LOW ); digitalWrite( B, LOW ); digitalWrite( C, LOW );
digitalWrite( D, LOW ); digitalWrite( E, LOW ); digitalWrite( F, LOW ); digitalWrite( G, LOW );
}
}