Hallo,
ich habe mir ein kleines Programm gebastelt, das eine LED nach einem Programm unterschiedlich blinken lassen soll. Ein Teil des Programms besteht darin, dass die LED immer schneller und dann wieder langsamer blinken soll.
Ich habe mir dazu die mathematische Formel überlegt (eine lineare Funktion) und diese dann in ArduinoCode umgesetzt. Jetzt habe ich das Problem, dass der erste Wert richtig berechnet wird, aber nach dem ersten Mal einfach kein neuer Wert mehr berechnet wird. Im Moment kann ich das Problem leider noch nicht nachvollziehen. So viel ich gelesen habe, kann der Arduino ja FloatingPoint-Berechnungen durchführen. Falls das nicht stimmt, wie löst man soetwas dann :?
Edit: Hier der jetzt funktionierende Code:
void blinkPhase1() {
long tstart = millis();
int delayval;
float m;
lcd.clear();
lcd.home();
lcd.print("Phase 1");
lcd.setCursor(0,1);
lcd.print("Rampe 4-20-4 Hz");
m = 16/(10*1000); // Um Floating point zu erhalten muss in der Rechnung selbst floatingpoint enthalten sein -> falsch: m = 16/10; //Steigung der Funktion Frequenzverlauf: df/dt
while((millis() -tstart) < 10000) {
togglePin(LEDPIN); // Schaltet den Ausgang um: ein/aus
if (stopcmd) return; // Wenn der Stop-Taster gedrückt wurde, soll das Programm abgebrochen werden. (stopcmd wird durch die ISR1 (ausgelöst durch den Taster) gesetzt)
delayval = (int) (1000/((m*(millis()-tstart))+4));
lcd.setCursor(0,3); //debug
lcd.print(delayval); //debug
delay(delayval);
}
// Verlangsamendes Blinken
tstart = millis();
while((millis() -tstart) < 10000) {
togglePin(LEDPIN);
if (stopcmd) return;
delayval = (int) (1000/(20-(m*(millis()-tstart))));
lcd.setCursor(0,3); //debug
lcd.print(delayval); //debug
delay(delayval);
}
}