Go Down

Topic: Berechnungsfehler (Read 555 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy