Pages: [1]   Go Down
Author Topic: Berechnungsfehler  (Read 487 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 5
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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
Logged

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

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 269
Posts: 21824
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Full Member
***
Karma: 5
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Funktioniert nicht. Es kommt folgende Fehlermeldung:
Code:
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:
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
Logged

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

Germany
Offline Offline
Faraday Member
**
Karma: 59
Posts: 3071
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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()
Logged

Offline Offline
Full Member
***
Karma: 5
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Soll dein "Arduino als Taschenrechner nur bis 9+9 rechnen können ?
Ja, er soll nur einige Funktionen darstellen.

Addi
Logged

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

Germany
Offline Offline
Faraday Member
**
Karma: 59
Posts: 3071
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
Logged

Pages: [1]   Go Up
Jump to: