Potiwertebereich für AnalogWrite anpassen

Gast #5020752
Lesenswert?

Hallo Community,

ich verwende einen Arduino Uno und einen linearen Gasdrehgriff als Poti.
Mein Poti läuft zwischen den Bereichen von 168 bis 875 Ohm.

168 -> aus
875 -> maximal Anschlag

Nun möchte ich gerne meinen Potimessbereich [168 - 875] für analogWrite 
auf den Wertebereich [0 - 255] anpassen.

Mein Vorschlag:
1
int potiWert = 0;
2

3
int steuerWert = 0;
4

5

6
void setup() {
7
 Serial.begin(9600);
8
}
9

10
void loop() {
11
 
12
 potiWert = (6 * potiWert + 4 * analogRead(A0))/10; 
13

14
 steuerWert = 255*(potiWert -168)/(875-168); // skalierter Wertbereich (0-255)
15
}

Problem:

steuerWert dient als Umrechnung in den 0-255 Bereich.
Jedoch erhalte ich hierfür Minuswerte ab einer bestimmten Größe der 
Zahl.
(s. Anhang)

Ich hoff Ihr könnt mir weiterhelfen.

Vielen Dank

Gruß

Matthias
Angehängte Dateien:
Gast #5020758
Lesenswert?

Matthias schrieb:
> potiWert = (6 * potiWert + 4 * analogRead(A0))/10;

Was soll das?

Matthias schrieb:
> steuerWert = 255*(potiWert -168)/(875-168);

Dir ist bewusst, daß dein Wertebereich von int 16 Bit? ist.
Wenn also potiwert größer als 128+168 wird und das mit 255 (ist eh 
falsch, müsste 256 sein) multipliziert wird läuft deine Variable über.

Wegen so einem int Variablenüberlauf ist mal eine Ariane-Rakete 
abgestürzt.

Weiter ist dir kekannt daß int divisionen abschneiden. Also 11/12 ist 
bei int 0!
Gast #5020837
Lesenswert?

Wenn Du Dir mal die Arduino Funktion anschaust, siehst du, wie dort der 
Überlauf verhindert wurde. Es wurden "long" Variablen verwendet. In 
deinem Einzeiler kannst du das etwas effizienter so umsetzen:

> steuerWert = (long int) 255*(potiWert -168)/(875-168);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren