Potentiometer-Wert auslesen und anderen Wert ausgeben

Moin.

Ich habe da mal wieder ne Frage.

Und zwar möchte ich ein Potentiometer analog auslesen und die Werte umrechnen lassen.

Gedacht ist, dass wenn ich z.B. nen analogen Wert zwischen 10 und 300 habe, das mir der Wert 1, bei einem Wert zwischen 301 und 600 der Wert 2 und bei einem Wert zwischen 601 und 900 der Wert 3 ausgeworfen wird.

Es gibt natürlich die einfache Variante mit if-Anweisungen, aber das ist bei 81 Zahlen etwas mühsam!

poti=analogRead(A0);

if(poti<300, poti>10){
      wert=1;
    }

    if(poti<600,poti>301){
      wert=2; 
    }

    if(poti<900,poti>601){
      wert=3; 
    }

Kennt Ihr ne elegantere Lösung?

Besten dank schon mal im voraus !

Wie kommst du auf 81 Zahlen? Kannst du eine Funktion dazu aufstellen. (mathematisch)

Wie wäre es mit map()

81 Zahlen habe ich nu einfach definiert!

habe das über ne Formel versucht:

(analogWert * 81)/972

Die 972 kommen durch 12 *81 zustande! das ist der maximale Wert in 12erschritten, den ich erreichen möchte!

Das Problem ist nur, das bei der Rechnung nun Minuszahlen raus kommen. Hat wahrscheinlich mit nem Überlauf zu tun?

Es ist mir ein Rätsel, was du vor hast.... Dass du auf einem falschen Weg bist, ist ja klar...

Aber wo soll es hin gehen? Bitte beschreibe dein Ziel, und nicht den falschen Weg.

Warum gefällt dir map() nicht?

Hallo,

Du kannst Werte zwischen 0 und 1023 einlesen. Wenn Du Bereiche definierst in 300er Sprüngen, 10-300 301-600 601-900 901-1023

damit erhalte ich 4 Bereiche die ich auswerten muß. Wie kommst Du auf 81 Bereiche? Ich verstehe Dein Problem wahrscheinlich noch nicht.

habe es schon gelöst.

habe nen long genommen

quasi:

int poti;
long wert;

poti=analogRead(A0); 

wert=(poti*81l)/972;

Schön wenn man selber des Rätsels Lösung findet :)

Aber vielen Dank

hab das jetzt erst gesehen.

ja map ist wirklich sinnvoller.

Was wollst du an dieser Stelle mit einem long (abgesehen dass ich die Schreibweise sehr unntypisch finde)? Das ist keine Lösung.

Warum nicht einfach kürzen? :-X

wert = poti/12;

Für diesen Fall ist map() überhaupt nicht von nöten!!

sschultewolter: Was wollst du an dieser Stelle mit einem

Um den Integer-Überlauf zu verhindern?

Wenn man vorher kürzt, kommt es doch garnicht erst zu einem Int-Überlauf 8)

Ok, kann man machen. Schadet aber auch nichts in long zu rechnen