Frage zu map, die ich nicht nachlesen konnte.

Angenommen ich habe Werte von 0 bis 50, die sollen als Ergebnis 0 - 240 ergeben

A = map(B,0,50,0,240);

soweit klar.

Jatzt möchte ich ganz am Anfang eine Variable einlesen ( sagen wir, die heißt x und kann zwischen -10 und +30 betragen, und wird, z.B. im Setup, nur einmal eingelesen.

Kann ich dann wie folgt mappen

A = map(x,50,0,240);

?

Eher map(x,-10,30,0,250)

Gruß Tommy

Hi

Was sollte Dich hindern? Allerdings sollte Dein map schon die komplette Anzahl an Parametern haben - sonst meckert der Kompiler.

MfG

Eine gute Variante ist auch: ausprobieren :)

Statt irgendwas einzulesen baust Du Dir eine Schleife die die Werte durchläuft, und Du schaust entspannt auf dem seriellen Monitor die Ergebnisse an.

sorry, sollte heißen

A = map(B,x,30,0,240)

So wäre dann der Werte-Eingangsbereich nicht -10 bis 30, sondern X bis 30,

so war das gemeint.

Keine Ahnung, was Du damit erreichen willst. Probiere es einfach aus.

Gruß Tommy

JA, werde ich,

was ich damit ereichen will, ist eigentlich ziemlich simpel.

Für den, den es interessiert:

Ich möchte für einen Bereich an Eingangswerten, die entsprechenden Ausgangswerte 0 bis 240 erreichen.

Der Eingangswert ( Obergrenze ) wir dann bei 42 liegen, das ist simpel.

Der Eingangswert ( Untergrenze ) kann aber von Tag zu Tag variieren. Trotzdem soll der Tagesaktuelle anfangs eingelesene Eingangswert am Ausgang die 0 erezugen.

Ich habe einen Temperaturbereich der von der aktuellen Außentemperatur bis 42°C geht.

Die Ausgangswerte sind die Winkel des Farbkreises RGB.

Beginnen soll es mit kalt ( Blau ) und enden bei rot ( heiß = 42°C )

Kalt, also Blau ist aber meine Ausgangstemperatur, die Tagesaktuelle.

Läge die z.B. bei -10°C fest, dann würde im Sommer der Farbverlauf bis 42° blassrosa bis rot nur sein.

Mit der Variablen sorge ich nun dafür, das von aktueller Temperatur bis zum Heizziel von 42° einmal der komplette Regenbogen durchlaufen wird.

Heute 15°C - 42°C entspricht blau bis rot

Morgen 7°C bis 42°C entspricht blau bis rot.

Und da dachte ich, bevor ich mir jetzt wieder die Finger wund programmiere ( es fällt mir halt als Anfänger noch etwas schwer, da frag ich mal, ob so etwas geht.

In so fern fnd ich meine Frage gar ncht sooo dumm :)

Mit der Erklärung wird es anschaulicher. Danke.

Ich weiß jetzt nicht, ob ich es richtig verstanden habe. Ich versuche es mal mit meinen Worten zu erklären:

Du hast einen Anfangswert anfang von -10 bis 30, den Du im Setup ermittelst.

Im Loop beziehst Du Dich auf diesen Wert:

int wert = map(messwert, anfang, 50, 0, 240);

Habe ich das richtig verstanden?

Gruß Tommy

ja, genau so habe ich das gemeint.

Hi

Wenn Du DS18B20 dafür benutzt, nimm den Roh-Wert - ist in 1/16tel Grad - macht die Auflösung direkt 16 Mal größer. (Messbereich -55...125 °C) Die 42°C wären dann (42*16) - kann der Kompiler prima selber ausrechnen.

MfG

Alle Parameter die Du einer Funktion übergibst können statt Zahlen auch Variablen sein. Da ist map() nicht anders als digitalMode(), digitalWrite() usw. Grüße Uwe

@ postmaster,

es ist der TMP36, der analoge.

Aber auch da ist die Range von analogRead deutlich größer als die paar °C, so das sich im Mapping eine etwas feinere Auflösung ergibt. Habs grad mal umgeschrieben.

Danke für den Tip.