Hello!
I have made a 7-segment display from arduino mega that displays a 3 digit integer sent from a different arduino mega. Below is my code. I want the display to simply hold the value that has been sent, until a new valid integer has been sent and then display that. When I have a tester arduino send values from a counting function every half second (using delay(500)) it displays just fine, but with my current code there is a problem where it holds the value for the expected delay time, but then it blinks and resets to displaying 05 or 00, depending on what the ones place of the last sent valid integer was. (the incoming integers will only be multiples of 5 (from 05 up to 190, with the exception of specific integer "45" (explained below))).
Any insight or advice into why this might be happening and how to resolve it would be super appreciated!
Thanks
/*
The LED strips circuit:
C
____
| |
E |____| A
| G |
F |____| B
D
*/
//ONES PLACES
int Aa1 = 2;
int Bb1 = 3;
int Cc1 = 4;
int Dd1 = 5;
int Ee1 = 6;
int Ff1 = 7;
int Gg1 = 8;
//TENS PLACES
int Aa2 = 22;
int Bb2 = 23;
int Cc2 = 24;
int Dd2 = 25;
int Ee2 = 26;
int Ff2 = 27;
int Gg2 = 28;
//DUH
int DECIMAL = 29;
int HUNDREDS = 30;
int resetter = 12;
void SHOW(int numero)
{
int ones = (numero%10);
int tens = ((numero/10)%10);
int hundreds = ((numero/100)%10);
if (ones == 0)
{
digitalWrite(Aa1, HIGH);
digitalWrite(Bb1, HIGH);
digitalWrite(Cc1, HIGH);
digitalWrite(Dd1, HIGH);
digitalWrite(Ee1, HIGH);
digitalWrite(Ff1, HIGH);
digitalWrite(Gg1, LOW);
}
if (ones == 5)
{
digitalWrite(Aa1, LOW);
digitalWrite(Bb1, HIGH);
digitalWrite(Cc1, HIGH);
digitalWrite(Dd1, HIGH);
digitalWrite(Ee1, HIGH);
digitalWrite(Ff1, LOW);
digitalWrite(Gg1, HIGH);
}
if (tens == 0)
{
digitalWrite(Aa2, HIGH);
digitalWrite(Bb2, HIGH);
digitalWrite(Cc2, HIGH);
digitalWrite(Dd2, HIGH);
digitalWrite(Ee2, HIGH);
digitalWrite(Ff2, HIGH);
digitalWrite(Gg2, LOW);
digitalWrite(DECIMAL, HIGH);
}
if (tens == 1)
{
digitalWrite(Aa2, HIGH);
digitalWrite(Bb2, HIGH);
digitalWrite(Cc2, LOW);
digitalWrite(Dd2, LOW);
digitalWrite(Ee2, LOW);
digitalWrite(Ff2, LOW);
digitalWrite(Gg2, LOW);
digitalWrite(DECIMAL, HIGH);
}
if (tens == 2)
{
digitalWrite(Aa2, HIGH);
digitalWrite(Bb2, LOW);
digitalWrite(Cc2, HIGH);
digitalWrite(Dd2, HIGH);
digitalWrite(Ee2, LOW);
digitalWrite(Ff2, HIGH);
digitalWrite(Gg2, HIGH);
digitalWrite(DECIMAL, HIGH);
}
if (tens == 3)
{
digitalWrite(Aa2, HIGH);
digitalWrite(Bb2, HIGH);
digitalWrite(Cc2, HIGH);
digitalWrite(Dd2, HIGH);
digitalWrite(Ee2, LOW);
digitalWrite(Ff2, LOW);
digitalWrite(Gg2, HIGH);
digitalWrite(DECIMAL, HIGH);
}
if (tens == 4)
{
digitalWrite(Aa2, HIGH);
digitalWrite(Bb2, HIGH);
digitalWrite(Cc2, LOW);
digitalWrite(Dd2, LOW);
digitalWrite(Ee2, HIGH);
digitalWrite(Ff2, LOW);
digitalWrite(Gg2, HIGH);
digitalWrite(DECIMAL, HIGH);
}
if (tens == 5)
{
digitalWrite(Aa2, LOW);
digitalWrite(Bb2, HIGH);
digitalWrite(Cc2, HIGH);
digitalWrite(Dd2, HIGH);
digitalWrite(Ee2, HIGH);
digitalWrite(Ff2, LOW);
digitalWrite(Gg2, HIGH);
digitalWrite(DECIMAL, HIGH);
}
if (tens == 6)
{
digitalWrite(Aa2, LOW);
digitalWrite(Bb2, HIGH);
digitalWrite(Cc2, HIGH);
digitalWrite(Dd2, HIGH);
digitalWrite(Ee2, HIGH);
digitalWrite(Ff2, HIGH);
digitalWrite(Gg2, HIGH);
digitalWrite(DECIMAL, HIGH);
}
if (tens == 7)
{
digitalWrite(Aa2, HIGH);
digitalWrite(Bb2, HIGH);
digitalWrite(Cc2, HIGH);
digitalWrite(Dd2, LOW);
digitalWrite(Ee2, LOW);
digitalWrite(Ff2, LOW);
digitalWrite(Gg2, LOW);
digitalWrite(DECIMAL, HIGH);
}
if (tens == 8)
{
digitalWrite(Aa2, HIGH);
digitalWrite(Bb2, HIGH);
digitalWrite(Cc2, HIGH);
digitalWrite(Dd2, HIGH);
digitalWrite(Ee2, HIGH);
digitalWrite(Ff2, HIGH);
digitalWrite(Gg2, HIGH);
digitalWrite(DECIMAL, HIGH);
}
if (tens == 9)
{
digitalWrite(Aa2, HIGH);
digitalWrite(Bb2, HIGH);
digitalWrite(Cc2, HIGH);
digitalWrite(Dd2, HIGH);
digitalWrite(Ee2, HIGH);
digitalWrite(Ff2, LOW);
digitalWrite(Gg2, HIGH);
digitalWrite(DECIMAL, HIGH);
}
if (hundreds == 0)
{
digitalWrite(HUNDREDS, LOW);
}
if (hundreds == 1)
{
digitalWrite(HUNDREDS, HIGH);
}
}
void setup() {
// put your setup code here, to run once:
pinMode(Aa1, OUTPUT);
pinMode(Bb1, OUTPUT);
pinMode(Cc1,OUTPUT);
pinMode(Dd1, OUTPUT);
pinMode(Ee1, OUTPUT);
pinMode(Ff1, OUTPUT);
pinMode(Gg1, OUTPUT);
//TENS PLACES
pinMode(Aa2, OUTPUT);
pinMode(Bb2, OUTPUT);
pinMode(Cc2, OUTPUT);
pinMode(Dd2, OUTPUT);
pinMode(Ee2, OUTPUT);
pinMode(Ff2, OUTPUT);
pinMode(Gg2, OUTPUT);
//DUH
pinMode(DECIMAL, OUTPUT);
pinMode(HUNDREDS, OUTPUT);
pinMode(resetter, INPUT_PULLUP);
Serial.begin(4800);
}
void loop() {
// put your main code here, to run repeatedly:
if (digitalRead(resetter) == LOW)
{
digitalWrite(Aa1, LOW);
digitalWrite(Bb1, LOW);
digitalWrite(Cc1, LOW);
digitalWrite(Dd1, LOW);
digitalWrite(Ee1, LOW);
digitalWrite(Ff1, LOW);
digitalWrite(Gg1, LOW);
digitalWrite(Aa2, LOW);
digitalWrite(Bb2, LOW);
digitalWrite(Cc2, LOW);
digitalWrite(Dd2, LOW);
digitalWrite(Ee2, LOW);
digitalWrite(Ff2, LOW);
digitalWrite(Gg2, LOW);
digitalWrite(DECIMAL, LOW);
digitalWrite(HUNDREDS, LOW);
}
else if (Serial.available())
{
int z = Serial.parseInt();
if (z > 0)
{
SHOW(z);
delay(3000);
}
if (z == 44); //if recieves 44, plus one and display that (because integer 45 is unrecognized by serial.parseint)
{
z=z+1;
SHOW(z);
delay(3000);
}
}
}