Potiwertebereich für AnalogWrite anpassen

Gast #5020752
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
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
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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.