Mein Code geht nicht

const int redPin = 9;
const int greenPin = 10;
const int bluePin = 11;
const int delayTime = 70;
int a = 0;
int b = 255;
int c = 128;
int startTaster = 3;
int stopSchalter = 4;
int startTasterStatus = 0;
int stopSchalterStatus = 0;
bool faderGestartet = false;

void setup() {
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  pinMode(startTaster, INPUT);
  pinMode(stopSchalter, INPUT);
}

void loop() {
  startTasterStatus = digitalRead(startTaster);
  stopSchalterStatus = digitalRead(stopSchalter);

  if (startTasterStatus == HIGH && !faderGestartet) {
    faderGestartet = true;
  }

  if (stopSchalterStatus == HIGH && faderGestartet) {
    faderGestartet = false;
  }

  if (faderGestartet) {
    fadeRGB(b, a, b);
    fadeRGB(b, c, b);
    fadeRGB(b, b, c);
    fadeRGB(a, b, a);
    fadeRGB(a, b, c);
    fadeRGB(c, a, c);
    fadeRGB(b, a, a);
    fadeRGB(c, b, c);
    fadeRGB(a, a, b);
    fadeRGB(b, b, b);
    fadeRGB(c, c, c);
  }
}

void fadeRGB(int redValue, int greenValue, int blueValue) {
  for (int i = 0; i <= 255; i += 5) {
    if (!faderGestartet) return;
    analogWrite(redPin, map(i, 0, 255, 0, redValue));
    analogWrite(greenPin, map(i, 0, 255, 0, greenValue));
    analogWrite(bluePin, map(i, 0, 255, 0, blueValue));
    delay(delayTime);
  }

  for (int i = 255; i >= 0; i -= 5) {
    if (!faderGestartet) return;
    analogWrite(redPin, map(i, 0, 255, 0, redValue));
    analogWrite(greenPin, map(i, 0, 255, 0, greenValue));
    analogWrite(bluePin, map(i, 0, 255, 0, blueValue));
    delay(delayTime);
  }

  delay(70);
}

das soll ein rgb fader werden bei dem man mit einem knopf den Fader aktivieren und mit dem anderen deaktivieren kann. Kann mir wer sagen warum er nicht mehr deaktiviert wird wenn er läuft???

Wie hast Du die Widerstände an Deinen Tasten angeschlossen, um einsicheren Pegelwechsel hinzubekommen?

Deine for-Schleifen blockieren für 392,7 Sekunden. In der Zeit findet keine Tastenabfrage statt. Wenn du 393 Sekunden den Taster gedrückt hälst, sollte deine „Funktion“ beendet werden.

oder anders gesagt die FOR Schleifen brauchen solange bis sie fertig sind. Da die Tasterabfrage am Anfang der Schleifen ist (nicht drin) wird der Taster nur alle 393 Sekunden abgefragt.

Abhilfe schafft die Nichtbenutzung von delay und for und die Benutzung von millis und einer State maschine.

Grüße Uwe

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.