Da kann man noch einen drauf setzen....
Combie, deine Lösung beruht auf avr-gcc für einen atmega328, davon hat aber klff nichts gesagt.
Hat da nicht ein von mir sehr geschätztes Forumsmitglied, vor kurzem noch als Mantra was mit ungeprüften Voraussetzungen und falschen Annahmen oder so ähnlich erzählt? ![]()
Wenn es um 5 LED geht, muss man nicht unbedingt den schnellstmöglichen Sketch schreiben.
Dass uwefed vergessen hat, 4 LED auszuschalten, spricht nicht generell gegen eine Lösung auf Arduino-Sprach-Ebene.
Aber wie breit die Bereiche für grün, gelb und rot sein sollen, hat klff offen gelassen, das spricht gegen euren map - Vorschlag (oder eine einfache Division).
Da ist eine Schleife mit if, oder ElEspanol's case - Range deutlich flexibler.
Mein Vorschlag:
// ROT GELB GRÜN GELB ROT
const byte leds[] = { 10, 12, 13, 11, 9 };
const int limits[] = { -1024, -800, -200, 200, 700 , 1024 };
void setup() {
for (byte pin : leds) pinMode(pin, OUTPUT);
}
void loop() {
int wert1 = analogRead(A0);
int wert2 = analogRead(A1);
int diff = wert1 - wert2; // -1023 ... + 1023
for (byte i = 0; i < sizeof(leds); i++) {
if (limits[i] < diff && diff <= limits[i + 1])
digitalWrite(leds[i], HIGH);
else
digitalWrite(leds[i], LOW);
}
}
warum kein if ?