Kann mir, einem blutigen Anfänger, jemand einen Hinweis geben, warum in diesem Code die Leds ziemlich durcheinander blinken, nachdem ich den Modus per Tastatureingabe ändere? Ich wähle case 1, alles wunderbar, dann case 2 und schon blinken die 3 Leds im Array, wie sie wollen. Selbst wenn sie zunächst gleichmäßig auf und ab Faden ... irgendwann geraten sie durcheinander.
Und ich möchte mit dem Sketch auch einen Servo steuern. Der Servo-Teil funktioniert in einem eigenen Sketch zum Testen so, wie er soll. Nur hier tut sich einfach garnichts.
#include "Tlc5940.h"
#include "tlc_fades.h"
#include <Servo.h>
#define interval 500
int fadingMode = 0; //Beginn mit TLC Reset
int ledPins[] = {2,3,4};
int pinCount = sizeof(ledPins)/sizeof(int);
int max = 100;
unsigned char x;
unsigned long startTime = 0;
unsigned long waitUntil=0;
Servo myServo;
int grad = 0;
TLC_CHANNEL_TYPE channel;
void setup() {
myServo.attach(5);
Tlc.init();
Serial.begin(115200);
}
void loop()
{
if(Serial.available()){
if(Serial.peek() == 'l'){
Serial.flush();
}
else{
fadingMode = Serial.parseInt();
Serial.print("Mode set to ");
Serial.print(fadingMode);
Serial.print(": ");
startTime = millis();
switch(fadingMode){
case 0:
Serial.println("allet uff Null");
break;
case 1:
Serial.println("Flash");
break;
case 2:
Serial.println("Slow Blinker");
break;
case 3:
Serial.println("mover");
break;
}
}
}
unsigned char brightness;
switch(fadingMode){
case 0:
// TLC Resert, alles aus
for (int thisPin = 0; thisPin < pinCount; thisPin++) {
Tlc.clear();
tlc_removeFades(ledPins[thisPin]);
// Tlc.update();
}
break;
case 1:
Flash();
break;
case 2:
slowBlink();
break;
case 3:
mover();
break;
default:
Serial.println("Unknown Mode!");
delay(1000);
break;
}
}
void Flash(void){ // Flasher Variante
for (int thisPin = 0; thisPin < pinCount; thisPin++) {
uint16_t duration = 150;
uint32_t startMillis = millis()+ 2000;
uint32_t endMillis = startMillis + duration;
tlc_addFade(ledPins[thisPin], 4095, max, startMillis, endMillis);
tlc_updateFades();
}
}
void slowBlink(void){ //slower blinkin
for (int thisPin = 0; thisPin < pinCount; thisPin++) {
// tlc_removeFades(ledPins[thisPin]);
uint16_t duration = 2000;
uint32_t startMillis = millis()+ 2000;
uint32_t endMillis = startMillis + duration;
tlc_addFade(ledPins[thisPin], 0, 4095, startMillis, endMillis);
tlc_addFade(ledPins[thisPin], 4095, 0, startMillis, endMillis + duration);
tlc_updateFades();
}
}
void mover(void){ // schaltet einfach nur die Led ein
for (int grad=0; grad<=100; grad=grad+1)
{
myServo.write(grad);
//Serial.println(grad);
delay(200);
}
}