Go Down

Topic: Berechnungsfehler (Read 510 times) previous topic - next topic

Addi

Hallo,
ich bin gerade dabei einen Taschenrechner auf dem Arduino zu implementieren und habe folgendes Problem:
Wen ich 2 zahlen Addiere z.B. 1 + 2 kommt 99 heraus. Wo liegt der Fehler?
Quellcode:
Code: [Select]

char incoming;

void addiere(int zahl1,int zahl2) {
int zahl3 = zahl1 + zahl2;
Serial.println(zahl3);
}

void loop() {
  int zahl1;
  int zahl2;
  if(Serial.available()){
  Serial.println("Arduino Taschenrechner: Operand eingeben");
  incoming = Serial.read();
  switch(incoming) {
  case '+' :
    Serial.println("Operator + erkannt");
    Serial.println("Zahl 1 eingeben");
    while(!Serial.available()){
      delay(1);
    }
    if(Serial.available()> 0){
    zahl1 = Serial.read();}
    Serial.println("Zahl 2 eingeben");
    while(!Serial.available()){
      delay(1);
    }
    if(Serial.available() >0){
    zahl2 = Serial.read();}
    addiere(zahl1,zahl2);
    break;
    }
  }
}


Addi
/ \    _|  _| o
 /--\ (_| (_| |

uwefed

Rechnet richtig, 49 +50 ist 99.
Du rechnest mit den Ashii-Werten der Zeichen "1" und "2" und nicht mit den Zahlen 1 und 2.
Informiere Dich mal über atoi()
Grüße Uwe

Addi

Funktioniert nicht. Es kommt folgende Fehlermeldung:
Code: [Select]
test.cpp: In function 'void loop()':
test:114: error: invalid conversion from 'int' to 'const char*'
test:114: error: initializing argument 1 of 'int atoi(const char*)'
test:122: error: invalid conversion from 'int' to 'const char*'
test:122: error: initializing argument 1 of 'int atoi(const char*)'


Bei folgendem Code:

Code: [Select]

void loop() {
  int zahl1;
  int zahl2;
  if(Serial.available()){
  Serial.println("Arduino Taschenrechner: Operand eingeben");
  incoming = Serial.read();
  switch(incoming) {
  case '+' :
    Serial.println("Operator + erkannt");
    Serial.println("Zahl 1 eingeben");
    while(!Serial.available()){
      delay(1);
    }
    if(Serial.available()> 0){
    zahl1 = atoi(Serial.read());}
    Serial.println("Zahl 2 eingeben");
    while(!Serial.available()){
      delay(1);
    }
    if(Serial.available() >0){
    zahl2 = atoi(Serial.read());}
    addiere(zahl3,zahl4);
    break;
    }
  }
}


Addi
/ \    _|  _| o
 /--\ (_| (_| |

michael_x

Quote
Funktioniert nicht

Soll dein "Arduino als Taschenrechner nur bis 9+9 rechnen können ?

( atoi arbeitet mit char* als Zeiger auf mehrere Buchstaben, du liest aber nur einzelne Zeichen )

Wenn du mehrere Buchstaben ( z.B. "12" ) als eine Zahl mit atoi lesen willst , musst du sie auch so speichern.
Wenn nicht, hilft dir schon
int zahl1 =  Serial.read() - '0';  // einfachste Umwandlung
anstelle von atoi()

Addi


Soll dein "Arduino als Taschenrechner nur bis 9+9 rechnen können ?

Ja, er soll nur einige Funktionen darstellen.

Addi
/ \    _|  _| o
 /--\ (_| (_| |

michael_x

Dann ...
Quote
hilft dir schon
int zahl1 =  Serial.read() - '0';  // einfachste Umwandlung

Das setzt natürlich "korrekte Eingaben" voraus.


Mit char Arrays solltest du dich langfristig trotzdem beschäftigen
Was ist der Unterschied zwischen 0 , '0' und "0" ?
Und was macht die '0' in der Zeile oben ?

Go Up