#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;
unsigned int number = 0;
unsigned int tmpnumber1, tmpnumber2, tmpnumber3, tmpnumber4;
int status7Seg = 1;
void timer1_callback( void );
void showNumber(int num);
bool togglecolon = true;
unsigned long current = 0;
unsigned long last1sec = 0;
unsigned long last500ms = 0;
int secclock = 0;
int minclock = 0;
bool statusclock = true;
void setup() {
// number = 9999;
// 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 );
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 ); // 100 Hz / 1 sec
}
void loop() {
current = millis();
if(current - last500ms >= 500){
last500ms = millis();
if(statusclock)
digitalWrite(DPColon , !digitalRead(DPColon));
}
if(current - last1sec >= 1000){
last1sec = current;
tmpnumber4 = secclock%10;
tmpnumber3 = secclock/10;
tmpnumber2 = minclock%10;
tmpnumber1 = minclock/10;
Serial.printf("Clock -> %02d:%02d\n", minclock, secclock);
if(statusclock){
secclock++;
if(secclock == 60){
minclock++;
secclock = 0;
if(minclock == 60){
minclock = 0;
}
}
}
if(Serial.available() > 0){
String data = Serial.readString();
int num = data.toInt();
if(num == 1){
Serial.println("Rx interrupt 1 : Clock continue");
statusclock = true;
}
else if(num == 2){
Serial.println("Rx interrupt 2 : Clock stop");
statusclock = false;
}
else{
Serial.println(("Input error."));
}
}
}
}
void timer1_callback( void )
{
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( DG1, HIGH );
digitalWrite( DG2, LOW);
digitalWrite( DG3, HIGH);
digitalWrite( DG4, HIGH);
status7Seg = 3;
}
else if (status7Seg == 3)
{
showNumber(tmpnumber3);
digitalWrite( DG1, HIGH );
digitalWrite( DG2, HIGH );
digitalWrite( DG3, LOW );
digitalWrite( DG4, HIGH );
status7Seg = 4;
}
else if (status7Seg == 4)
{
showNumber(tmpnumber4);
digitalWrite( DG1, HIGH );
digitalWrite( DG2, HIGH );
digitalWrite( DG3, HIGH );
digitalWrite( DG4, LOW );
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 );
}
}