void loop() { String GleichZeichen = " = "; lcd.setCursor(0, 0); while (Serial.available() > 0) { // solange lesen, bis return \n = return eingegeben wurde Eingabe = Serial.readStringUntil("\n"); // das letzte Zeichen ist return = \n → soll entfernt werden (-1) Eingabe = Eingabe.substring(0, Eingabe.length() - 1); lcd.clear(); // Addition // "+" Zeichen suchen if (Eingabe.indexOf('+') > 0) { int PlusZeichen = Eingabe.indexOf('+'); // erster Summand: von 0 bis zur Position des Pluszeichens String SummandEins = Eingabe.substring(0, PlusZeichen); // zweiter Summand: von der Position hinter dem Pluszeichen // bis zum letzten Zeichen String SummandZwei = Eingabe.substring(PlusZeichen + 1, Eingabe.length()); // rechnen Ergebnis = SummandEins.toInt() + SummandZwei.toInt(); // String Rechnung "zusammenbauen" Rechnung = SummandEins + " + " + SummandZwei + GleichZeichen + String(Ergebnis); BuchstabeGefunden = BuchstabeSuchen(SummandEins + SummandZwei); } // Subtraktion // "-" Zeichen suchen if (Eingabe.indexOf('-') > 0) { int MinusZeichen = Eingabe.indexOf('-'); // Minuend: von 0 bis zur Position des Minuszeichens String Minuend = Eingabe.substring(0, MinusZeichen); // Subtrahend: von der Position hinter dem Minuszeichen // bis zum letzten Zeichen String Subtrahend = Eingabe.substring(MinusZeichen + 1, Eingabe.length()); // rechnen Ergebnis = Minuend.toInt() - Subtrahend.toInt(); // String Rechnung "zusammenbauen" Rechnung = Minuend + " - " + Subtrahend + GleichZeichen + String(Ergebnis); // nach Buchstaben suchen BuchstabeGefunden = BuchstabeSuchen(Subtrahend + Minuend); } // Multiplikation // "*" Zeichen suchen if (Eingabe.indexOf('*') > 0) { int MalZeichen = Eingabe.indexOf('*'); // erster Faktor: von 0 bis zur Position des Malzeichens String FaktorEins = Eingabe.substring(0, MalZeichen); // zweiter Faktor: von der Position hinter dem Malzeichen // bis zum letzten Zeichen String FaktorZwei = Eingabe.substring(MalZeichen + 1, Eingabe.length()); // rechnen Ergebnis = FaktorEins.toInt() * FaktorZwei.toInt(); // String Rechnung "zusammenbauen" Rechnung = FaktorEins + " * " + FaktorZwei + GleichZeichen + String(Ergebnis); } // Division // "/" Zeichen suchen if (Eingabe.indexOf('/') > 0) { int GeteiltZeichen = Eingabe.indexOf('/'); // Dividend: von 0 bis zur Position des Geteiltzeichens String Dividend = Eingabe.substring(0, GeteiltZeichen); // Divisor: von der Position hinter dem Geteiltzeichen // bis zum letzten Zeichen String Divisor = Eingabe.substring(GeteiltZeichen + 1, Eingabe.length()); /* String Rechnung "zusammenbauen" Besonderheit: das Ergebnis einer Division kann eine Kommazahl sein → Datentyp float -> Kommazahlen Ergebnis zeigt nur 2 Nachkommastellen */ // Division durch 0 nicht möglich if (Divisor == "0") { DivisionNull = true; // String Rechnung ohne Ergebnis "zusammenbauen" Rechnung = Dividend + " : " + Divisor + GleichZeichen; } // Divisor != 0 -> rechnen else { float Quotient = Dividend.toFloat() / Divisor.toFloat(); // String Rechnung "zusammenbauen" Rechnung = Dividend + " : " + Divisor + GleichZeichen + String(Quotient); BuchstabeGefunden = BuchstabeSuchen(Dividend + Divisor); // . durch , ersetzen Rechnung.replace(".", ","); } } // wenn kein Buchstabe gefunden wurde oder Divisor != 0 -> Rechnung ausgeben if (!BuchstabeGefunden && !DivisionNull) RechnungAusgeben(); // Division durch 0 -> Meldung anzeigen if (DivisionNull) { Serial.println(Rechnung); Serial.println("Division durch 0 ist verboten ;-)"); lcd.clear(); lcd.setCursor(0, 0); lcd.print(Rechnung); lcd.setCursor(0, 1); lcd.print("Divison durch 0"); lcd.setCursor(0, 2); lcd.print("ist verboten ;-)"); } // Buchstabe eingegeben -> Meldung anzeigen if (BuchstabeGefunden) { Rechnung = Rechnung.substring(0, Rechnung.indexOf('=')); Serial.println(Rechnung); Serial.println("Buchstaben sind nicht erlaubt ;-)"); lcd.clear(); lcd.setCursor(0, 0); lcd.print(Rechnung); lcd.setCursor(0, 1); lcd.print("Buchstaben sind "); lcd.setCursor(0, 2); lcd.print("nicht erlaubt ;-)"); } // Eingaben löschen, Fehlervariablen auf false setzen Rechnung = ""; Eingabe = ""; DivisionNull = false; BuchstabeGefunden = false; } }