So I am pretty new to Arduino and this is my first post on this forum.
I am using a IrReceiver and its remote to display numbers on a 7 segments display.
if (decodedValue == "FORWARD") {
contatore = contatore++;
if (contatore > 9) {
contatore = 0;
}
if(contatore == 0) {
clearDisplay();
display0();
delay(200);
} else if(contatore == 1) {
clearDisplay();
display1();
delay(200);
} else if(contatore == 2) {
clearDisplay();
display2();
delay(200);
} else if(contatore == 3) {
clearDisplay();
display3();
delay(200);
} else if(contatore == 4) {
clearDisplay();
display4();
delay(200);
} else if(contatore == 5) {
clearDisplay();
display5();
delay(200);
} else if(contatore == 6) {
clearDisplay();
display6();
delay(200);
} else if(contatore == 7) {
clearDisplay();
display7();
delay(200);
} else if(contatore == 8) {
clearDisplay();
display8();
delay(200);
} else if(contatore == 9) {
clearDisplay();
display9();
delay(200);
}
}
if (decodedValue == "BACKWARD") {
contatore = contatore - 1;
if (contatore < 0) {
contatore = 9;
}
if(contatore == 0) {
clearDisplay();
display0();
delay(200);
} else if(contatore == 1) {
clearDisplay();
display1();
delay(200);
} else if(contatore == 2) {
clearDisplay();
display2();
delay(200);
} else if(contatore == 3) {
clearDisplay();
display3();
delay(200);
} else if(contatore == 4) {
clearDisplay();
display4();
delay(200);
} else if(contatore == 5) {
clearDisplay();
display5();
delay(200);
} else if(contatore == 6) {
clearDisplay();
display6();
delay(200);
} else if(contatore == 7) {
clearDisplay();
display7();
delay(200);
} else if(contatore == 8) {
clearDisplay();
display8();
delay(200);
} else if(contatore == 9) {
clearDisplay();
display9();
delay(200);
}
}
This code just make me press FORWARD to add 1 to the display, and BACKWARD make me do -1
I have 2 main problem:
-
I want to numbers just go on when I press "FORWARD" but I don't really know how to do It, I tried using a for loop with for(int i = 0; i == 0) and at the end of the loop put a IrRemote,resume function, to get another signal to stop the counting, but it just stop my loop and after that I can't do anything.
-
I also want the same code that I wrote before but instead of "FORWARD" and "BACKWARD" I want to put "+" and "-" but when I do that it just doesn't work anymore.
I would like even any help to make my code simplier and more pratical.
Thank you.
NOTE: Of course this isn't the entire code but the rest work pretty well, but just in case someone want to check it I will put it right down below.
#include <IRremote.h>
int a = 2;
int b = 3;
int c = 4;
int d = 5;
int e = 6;
int f = 7;
int g = 8;
int IR = 9;
int contatore = 0;
void display0() {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
}
void display1() {
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
}
void display2() {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(g, HIGH);
}
void display3() {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(g, HIGH);
}
void display4() {
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void display5() {
digitalWrite(a, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void display6() {
digitalWrite(a, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void display7() {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
}
void display8() {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void display9() {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void clearDisplay() {
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
String decodeKeyValue(long result) {
switch(result){
case 0x16:
return "0";
case 0xC:
return "1";
case 0x18:
return "2";
case 0x5E:
return "3";
case 0x8:
return "4";
case 0x1C:
return "5";
case 0x5A:
return "6";
case 0x42:
return "7";
case 0x52:
return "8";
case 0x4A:
return "9";
case 0x9:
return "+";
case 0x15:
return "-";
case 0x7:
return "EQ";
case 0xD:
return "U/SD";
case 0x19:
return "CYCLE";
case 0x44:
return "PLAY/PAUSE";
case 0x43:
return "FORWARD";
case 0x40:
return "BACKWARD";
case 0x45:
return "POWER";
case 0x47:
return "MUTE";
case 0x46:
return "MODE";
case 0x0:
return "ERROR";
default :
return "ERROR";
}
}
void setup() {
for (int i = 2; i <=8; i++) {
pinMode(i, OUTPUT);
}
Serial.begin(9600);
IrReceiver.begin(IR, ENABLE_LED_FEEDBACK);
}
void loop() {
if (IrReceiver.decode()) {
String decodedValue = decodeKeyValue(IrReceiver.decodedIRData.command);
if (decodedValue == "0") {
clearDisplay();
display0();
contatore = 0;
}
if (decodedValue == "1") {
clearDisplay();
display1();
contatore = 1;
}
if (decodedValue == "2") {
clearDisplay();
display2();
contatore = 2;
}
if (decodedValue == "3") {
clearDisplay();
display3();
contatore = 3;
}
if (decodedValue == "4") {
clearDisplay();
display4();
contatore = 4;
}
if (decodedValue == "5") {
clearDisplay();
display5();
contatore = 5;
}
if (decodedValue == "6") {
clearDisplay();
display6();
contatore = 6;
}
if (decodedValue == "7") {
clearDisplay();
display7();
contatore = 7;
}
if (decodedValue == "8") {
clearDisplay();
display8();
contatore = 8;
}
if (decodedValue == "9") {
clearDisplay();
display9();
contatore = 9;
}
if (decodedValue == "CYCLE") {
clearDisplay();
display0();
delay(1000);
clearDisplay();
display1();
delay(1000);
clearDisplay();
display2();
delay(1000);
clearDisplay();
display3();
delay(1000);
clearDisplay();
display4();
delay(1000);
clearDisplay();
display5();
delay(1000);
clearDisplay();
display6();
delay(1000);
clearDisplay();
display7();
delay(1000);
clearDisplay();
display8();
delay(1000);
clearDisplay();
display9();
delay(1000);
clearDisplay();
display0();
contatore = 0;
}
if (decodedValue == "FORWARD") {
contatore = contatore++;
if (contatore > 9) {
contatore = 0;
}
if(contatore == 0) {
clearDisplay();
display0();
delay(200);
} else if(contatore == 1) {
clearDisplay();
display1();
delay(200);
} else if(contatore == 2) {
clearDisplay();
display2();
delay(200);
} else if(contatore == 3) {
clearDisplay();
display3();
delay(200);
} else if(contatore == 4) {
clearDisplay();
display4();
delay(200);
} else if(contatore == 5) {
clearDisplay();
display5();
delay(200);
} else if(contatore == 6) {
clearDisplay();
display6();
delay(200);
} else if(contatore == 7) {
clearDisplay();
display7();
delay(200);
} else if(contatore == 8) {
clearDisplay();
display8();
delay(200);
} else if(contatore == 9) {
clearDisplay();
display9();
delay(200);
}
}
if (decodedValue == "BACKWARD") {
contatore = contatore - 1;
if (contatore < 0) {
contatore = 9;
}
if(contatore == 0) {
clearDisplay();
display0();
delay(200);
} else if(contatore == 1) {
clearDisplay();
display1();
delay(200);
} else if(contatore == 2) {
clearDisplay();
display2();
delay(200);
} else if(contatore == 3) {
clearDisplay();
display3();
delay(200);
} else if(contatore == 4) {
clearDisplay();
display4();
delay(200);
} else if(contatore == 5) {
clearDisplay();
display5();
delay(200);
} else if(contatore == 6) {
clearDisplay();
display6();
delay(200);
} else if(contatore == 7) {
clearDisplay();
display7();
delay(200);
} else if(contatore == 8) {
clearDisplay();
display8();
delay(200);
} else if(contatore == 9) {
clearDisplay();
display9();
delay(200);
}
}
if(decodedValue == "POWER") {
if(digitalRead(a) == HIGH || digitalRead(b) == HIGH) {
clearDisplay();
delay(200);
} else if(digitalRead(a) == LOW) {
display0();
delay(200);
contatore = 0;
}
}
IrReceiver.resume();
}
}