Hello everybody,
i am quite stuck and i don't understand what is the issue.
I tried for so long, but I can't find the issue. Here is my code:
//leds 7 segment display
#define A 7
#define B 6
#define C 4
#define D 3
#define E 2
#define F 8
#define G 9
#define Dp 5
#define display1 10
#define display2 11
#define display3 13
int num; // Variable to store the number to be displayed
int previousNum; // Variable to store the previous number for comparison
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.setTimeout(80); //this will stop everything in serial to give you, and check, the infromation
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
pinMode(Dp, OUTPUT);
pinMode(display1, OUTPUT);
pinMode(display2, OUTPUT);
pinMode(display3, OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
int incomingNum = Serial.parseInt(); // Read the new number from serial
if (incomingNum != num) { // Only update if the number has changed
num = incomingNum;
}
}
if (num != previousNum) { // Check if the number has changed since last display update
number(num); // Update the display with the new number
previousNum = num; // Update previousNum to the current num
}
delay(5); // Short delay to help with display stability
}
void number(int n){
int hecto = n / 100; // Calculate hundreds place
int deca = (n % 100) / 10; // Calculate tens place
int integer = n % 10; // Calculate ones place
// Display each digit
digitalWrite(display1, HIGH);
segments(hecto);
delay(5); // Short delay to ensure the digit is visible
digitalWrite(display1, LOW);
digitalWrite(display2, HIGH);
segments(deca);
delay(5);
digitalWrite(display2, LOW);
digitalWrite(display3, HIGH);
segments(integer);
delay(5);
digitalWrite(display3, LOW);
}
void displays(){
digitalWrite(display1, LOW);
digitalWrite(display2, LOW);
digitalWrite(display3, LOW);
}
void ghost() {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
void segments(int num){
ghost();
switch(num){
case 0:
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, LOW);
break;
case 1:
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
break;
case 2:
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
break;
case 3:
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
break;
case 4:
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
break;
case 5:
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
break;
case 6:
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
break;
case 7:
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
break;
case 8:
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
break;
case 9:
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
break;
}
}
Explaining this a bit, I tried to send a 3 digit number to the arduino via serial communication. Then I want it to keep displaying the number I send via serial com, but here is the issue, i can't seem to find a way to make the arduino keep displaying the numbers it always make it flicker once then shows "000"
my code in the beginning looked like this
//leds 7 segment display
#define A 7
#define B 6
#define C 4
#define D 3
#define E 2
#define F 8
#define G 9
#define Dp 5
#define display1 10
#define display2 11
#define display3 13
int num; // Variable to store the number to be displayed
int previousNum = -1; // Variable to store the previous number for comparison
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.setTimeout(80); //this will stop everything in serial to give you, and check, the infromation
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
pinMode(Dp, OUTPUT);
pinMode(display1, OUTPUT);
pinMode(display2, OUTPUT);
pinMode(display3, OUTPUT);
}
void loop() {
if (Serial.available() > 0) { // Check if new data is available
num = Serial.parseInt(); // Read the new number from serial
}
previousNum = num;
number(previousNum);
}
void number(int n){
int hecto = n / 100; // Calculate hundreds place
int deca = (n % 100) / 10; // Calculate tens place
int integer = n % 10; // Calculate ones place
// Display each digit
digitalWrite(display1, HIGH);
segments(hecto);
delay(5); // Short delay to ensure the digit is visible
digitalWrite(display1, LOW);
digitalWrite(display2, HIGH);
segments(deca);
delay(5);
digitalWrite(display2, LOW);
digitalWrite(display3, HIGH);
segments(integer);
delay(5);
digitalWrite(display3, LOW);
}
void ghost() {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
void segments(int num){
ghost();
switch(num){
case 0:
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, LOW);
break;
case 1:
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
break;
case 2:
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
break;
case 3:
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
break;
case 4:
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
break;
case 5:
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
break;
case 6:
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
break;
case 7:
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
break;
case 8:
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
break;
case 9:
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
break;
}
delay(1);
}