Pages: [1]   Go Down
Author Topic: Anfängerfrage - Potiwert in Prozent  (Read 844 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

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:
int pause_calc = map(poti_pause, 0,1023, 0,100);

grüße Uwe   
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Germany
Online Online
Edison Member
*
Karma: 47
Posts: 2321
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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. smiley-wink
Logged

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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. ;-)
« Last Edit: April 24, 2012, 03:00:47 pm by Basteljoe » Logged

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

Deine Antwort ist zwar kreativer, die von Uwe aber richtiger. smiley-wink
Sollte man Preise für kreative Lösungen vergeben?  smiley-wink smiley-wink smiley-wink
grüße Uwe
Logged

Pages: [1]   Go Up
Jump to: