Go Down

Topic: Anfängerfrage - Potiwert in Prozent (Read 914 times) previous topic - next topic

Basteljoe

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:

Code: [Select]

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

uwefed

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

Code: [Select]
int pause_calc = map(poti_pause, 0,1023, 0,100);

grüße Uwe 

Basteljoe

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:

Code: [Select]

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! :)

sth77


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. ;)
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Basteljoe

#4
Apr 24, 2012, 09:44 pm Last Edit: Apr 24, 2012, 10:00 pm by Basteljoe Reason: 1
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. ;-)

uwefed


Deine Antwort ist zwar kreativer, die von Uwe aber richtiger. ;)

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

Go Up