toInt() bringt negativen Wert?

Hallo zusammen,

ich versuche eine String über die Serielle Schnittstelle an das Board zu senden und dort in ein integer zu wandeln. Das klappt auch einwandfrei, außer ich nehmn hohe Werte wie: 35800 (siehe Bild).
Leider habe ich keine Ahnung warum das so ist, manchmal kommt der “Fehler” bereits bei niederen Zahlen. Hoffe ihr könnt mir helfen :wink:

Mein Code:

void setup() {
  Serial.begin(115200);
  Serial.println("Arduino Nano Wavegen. v1.0 \n");
  Serial.flush();
}

void loop() {

  while (Serial.available() > 0) {
      frequency = Serial.readStringUntil("\n");
      Serial.print("Input:    ");
      Serial.print(frequency);
      freq = frequency.toInt();
      delay(50);
      Serial.print("Frequenz: ");
      Serial.println(freq);
      Serial.println();
  }

https://www.google.com/search?client=firefox-b-d&q=c%2B%2B+toint

Wie groß ist ein int auf einem AVR?

Int ist definiert von −32.768 bis 32.767.
Bei Werten darüber und darunter dürften die Probleme auftreten, in diesem eigentlich Bereich nicht.

PS. Text bitte als Text posten, nicht als Bild :wink:

Die einfachsten Dinge vergisst man :slight_smile:

Vielen Dank für die schnellen Antworten!

Habe nun als double konvertiert, um meinen Bereich abzudecken, und siehe da es funktioniert :smiley:

BG,
dr_kimble

Das

dr_kimble:
Habe nun als double konvertiert,

Das ist Unsinn. Schau dir lieber mal toInt() genauer an:
https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/toint

Data type: long.

Außerdem gibt es auch die Standard C/C++ Konvertierungsfunktionen mit denen du viel mehr machen kannst

War nicht ganz verständlich ausgedrückt :sweat_smile:

Verwende nun diese Konversion:
https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/todouble

:smiley:

Das ist mir schon klar. Da Gleitkommazahlen zu verwenden ist aber Unsinn. Es gibt auch Integer mit größeren Wertebereichen. Long und unsigned long.