DaHu
November 21, 2014, 9:31am
1
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
uwefed
November 21, 2014, 10:19am
2
das geht mit map() nicht.
Du mußt zuerst mit if kontrollieren und dann eventuell map() aufrufen.
Grüße Uwe
ardubu
November 21, 2014, 10:32am
3
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
DaHu
December 9, 2014, 10:01am
6
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);
uwefed
December 9, 2014, 11:01am
7
currentColorValueRed=analogRead(analogPin);
if (currentColorValueRed <=80) currentColorValueRed = 80;
currentColorValueRed=(255-map(currentColorValueRed, 80, 1023, 0, 255);
ist eigentlich auch nicht komplizierter.
Grüße Uwe