Bei map Befehl Werte bzw. Bereiche weglassen

Hallo,

ich habe Probleme bei folgenden Code:

currentColorValueRed=(255-map(analogRead(spectrumValue) 0, 1024, 0, 255));

Ich habe also Werte von 0-1024 die ich in Werte von 0-255 wandel. Nun möchte ich allerdings das aller Eingangswerte kleiner 75 wie 0 behandelt werden und die restlichen Wert von 0 -255 entsprechen.

Die aus meiner sicht einfachste Art funktioniert nicht:

currentColorValueRed=(255-map(analogRead(spectrumValue) 75, 1024, 0, 255));

Wie müsste es richtig aussehen? Stehe irgendwie auf dem Schlauch.

Viele Grüße

das geht mit map() nicht.

Du mußt zuerst mit if kontrollieren und dann eventuell map() aufrufen.
Grüße Uwe

könnte das nicht so funktionieren?

currentColorValueRed=(255-map((max(analogRead(spectrumValue,75)) 75, 1024, 0, 255));

Abgesehen davon, dass deine Formel fehlerhaft ist, ardubu, hilft dieses nicht weiter.
Dann hättest du einen dauerhaften Offset von 75.

Die einfachste Möglichkeit wäre der Dreisatz. Ansonsten ist Uwes Ansatz der Richtige.

if(value < 75) value = 0;
else {
value = 255-map(value, 75, 1023, 0, 255);
}
}

PS: Analogread gibt einen Wert von 0 - 1023 aus. Somit muss das auch richtig eingetragen werden. Nicht 1024

Abgesehen davon, dass deine Formel fehlerhaft ist, ardubu, hilft dieses nicht weiter.
Dann hättest du einen dauerhaften Offset von 75.

Die einfachste Möglichkeit wäre der Dreisatz. Ansonsten ist Uwes Ansatz der Richtige.

void loop() {
int value = analogRead(A0);

if(value < 75) value = 0;
else {
value = 255-map(value, 75, 1023, 0, 255);
}
}

PS.: AnalogRead liefert Werte von 0- 1023

Vielen dank für eure Antworten.

Inzwischen habe ich noch eine weitere Lösung gefunden. Die meines erachtens auch sehr einfach ist.

Es handelt sich hierbei um

constrain(x,a,b)

Die Funktion constrain gibt x zurück, wenn x größer oder gleich a und kleiner oder gleich b ist. Ist x kleiner als a, wird a zurückgegeben. Ist x größer als b, wird b zurückgegeben.

Mein Code sieht jetzt folgendermaßen aus:

currentColorValueRed=analogRead(analogPin);
currentColorValueRed=constrain(currentColorValueRed, 80, 1023);
currentColorValueRed=(255-map(currentColorValueRed, 80, 1023, 0, 255);
currentColorValueRed=analogRead(analogPin);
if (currentColorValueRed <=80) currentColorValueRed = 80;
currentColorValueRed=(255-map(currentColorValueRed, 80, 1023, 0, 255);

ist eigentlich auch nicht komplizierter. :wink:
Grüße Uwe