So, let me throw in some backstory. I changed my computer for a new one and was checking all my sketches, just some routine check. Then, I went to test my 'calculator' I made a few months ago.
It's principle is very basic : you can send '1+3' or '10-5*7' or anything else in this spectrum, and it gives you back the result. Pretty simple stuff, right?
Then I typed 1+1. It gave me back 0. Typed 24-7. It gave me back 0 again. I restarted the IDE and the problem continued. So I tried 1+3-2. Surprisingly, it sent back the correct asnwer, 2!
After that, it would send me the INVALID message (That I created so, if you typed wrong, that would be showing you did it).
I'll leave the code here because I have absolutely no idea of what's going on.
long number1;
long number2;
long number3;
char signal1;
char signal2;
long result;
void setup() {
Serial.begin(9600);
Serial.println("Send me some calculation");
Serial.println("EG : 2+3");
Serial.println();
}
void loop() {
if (Serial.available() > 0) {
number1 = Serial.parseInt();
signal1 = Serial.read();
number2 = Serial.parseInt();
if (Serial.available() < 1) {
simpleResolution();
} else {
signal2 = Serial.read();
number3 = Serial.parseInt();
complexResolution();
}
Serial.println("Result = ");
Serial.println(result);
Serial.println();
Serial.println("Send me another, if you wish");
Serial.println();
}
}
void simpleResolution() {
switch (signal1) {
case '+' :
result = number1 + number2;
break;
case '-' :
result = number1 - number2;
break;
case '*' :
result = number1 * number2;
break;
case '/' :
result = number1 / number2;
break;
default :
Serial.println("INVALID");
Serial.println();
result = 0;
break;
}
}
void complexResolution() {
if (signal1 == '+' && signal2 == '+') {
result = number1 + number2;
result = result + number3;
}
if (signal1 == '+' && signal2 == '-') {
result = number1 + number2;
result = result - number3;
}
if (signal1 == '+' && signal2 == '*') {
result = number1 + number2;
result = result * number3;
}
if (signal1 == '+' && signal2 == '/') {
result = number1 + number2;
result = result / number3;
}
if (signal1 == '-' && signal2 == '+') {
result = number1 - number2;
result = result + number3;
}
if (signal1 == '-' && signal2 == '-') {
result = number1 - number2;
result = result - number3;
}
if (signal1 == '-' && signal2 == '*') {
result = number1 - number2;
result = result * number3;
}
if (signal1 == '-' && signal2 == '/') {
result = number1 - number2;
result = result / number3;
}
if (signal1 == '*' && signal2 == '+') {
result = number1 * number2;
result = result + number3;
}
if (signal1 == '*' && signal2 == '-') {
result = number1 * number2;
result = result - number3;
}
if (signal1 == '*' && signal2 == '*') {
result = number1 * number2;
result = result * number3;
}
if (signal1 == '*' && signal2 == '/') {
result = number1 * number2;
result = result / number3;
}
if (signal1 == '/' && signal2 == '+') {
result = number1 / number2;
result = result + number3;
}
if (signal1 == '/' && signal2 == '-') {
result = number1 / number2;
result = result - number3;
}
if (signal1 == '/' && signal2 == '*') {
result = number1 / number2;
result = result * number3;
}
if (signal1 == '/' && signal2 == '/') {
result = number1 / number2;
result = result / number3;
}
}
If anyone knows the problem here, please awnser it for me
Joprp05:
So, let me throw in some backstory. I changed my computer for a new one and was checking all my sketches, just some routine check. Then, I went to test my 'calculator' I made a few months ago.
Are you saying that this program worked when you were using the old PC and WITHOUT A SINGLE CHANGE to the Arduino program it is not working now?
If so, are you now using a different version of the Arduino IDE? And if so have you tried installing and using the version of the IDE that you used to be using? (You can install sever versions of the IDE on a PC).
To be honest, I can't see how the version of the IDE could cause the problem, but it would be interesting to try.
Since you ask the user to input the whole equation in one line this is easy. Don't parse anything out at first. Just take in all the data and stick it into a char buffer. Keep adding each character you read into the buffer until you get to a newline character. At that point, you know you've got the entire thing. Then, parse the numbers and operators out of that char array. strtok function may be helpful. And of course, you need atoi function to convert the ascii into real numbers like parseInt is doing for you now.
Firstly, sorry, that nope wasn't for this, my internet failed for a sec.
Secondly (I am so embarresed to say this), I kinda don't know how to do that? I can try, but i'm not an expert when it comes to manipulating data (I am so ashamed). I'll try to give you a prototype
Thirdly, no Robin, IDE 1.8.4 didn't work. I guess it's the code. Maybe i mistakenly pressed a key and bugged the whole thing. I don't have a clue at this point