Anfängerfrage - Potiwert in Prozent

Hallo!

Ich stehe gerade total auf dem Schlauch. Mit meinem Arduino lese ich einen Poti aus, dies klappt auch ohne Probleme. Der maximaler Wert liegt bei 1023. Nun (versuche) rechne ich mir den ausgelesenen Wert in Prozent um:

int poti_pause = analogRead(A1);                  // Poti-Wert auslesen, max. Wert 1023
int pause_calc = (poti_pause * 100)/1023;       // Potiwert in Prozent umrechnen, Klammer zuerst

Im Serialmonitor wird mir jedoch bei Potianschlag -28 angezeigt. Ist meine Rechnung falsch?
Wenn ich z.B. auf "50%" regle, dann wäre die Rechnung doch (512(halber Poti_maxwert)* 100)/1023 = 50.

Wo liegt mein Fehler?

Viele Grüße,
basteljoe

Eine Variable vom Typ int kann Werte zwischen -32,768 und 32,767 speichern (16 Bit).
1023 mal 100 ergibt 102300. Davon werden nur die letzten 16 bit gespeichert und bit 16 als Vorzeichen interpretiert.

Für diese Rechnung mußt Du eine long-Variable benutzen oder die Funktion map()
http://arduino.cc/en/Reference/Map

int pause_calc = map(poti_pause, 0,1023, 0,100);

grüße Uwe

Hallo Uwe!

Ich habe das Problem jetzt gefunden!!
Der Arduino (Uno) kann nur maximal bis 255 adressieren, alles darüber erzeugt krumme Werte.

Mein Code sieht jetzt folgendermaßen aus:

int poti_pause = analogRead(A1);                  // Poti-Wert auslesen, max. Wert 1023
int pause_calc = ((poti_pause/4) * 100)/255;       // Potiwert in Prozent umrechnen, Klammer zuerst

Jetzt zeigt er mir im Terminal auch die vollen 100% bei Maximalanschlag des Poti an! :slight_smile:

Basteljoe:
Hallo Uwe!

Ich habe das Problem jetzt gefunden!! Der Arduino (Uno) kann nur maximal bis 255 adressieren, alles darüber erzeugt krumme Werte.

Deine Antwort ist zwar kreativer, die von Uwe aber richtiger. :wink:

Achso, also bezieht sich der Datentyp auch auf die Zwischenrechnung, nicht nur auf das Endergebnis. Ich probiers aus!

**edit: okay, Uwe hatte Recht, danke!
***edit2: es muss eine gewisse Zeit dauern, schließlich fahre ich 4000 Schritte mit einem Schrittmotor. :wink:

sth77:
Deine Antwort ist zwar kreativer, die von Uwe aber richtiger. :wink:

Sollte man Preise für kreative Lösungen vergeben? :wink: :wink: :wink:
grüße Uwe