Blinklicht mit steigender / fallender Frequenz

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);
  }
}

Aurillium:
So viel ich gelesen habe, kann der Arduino ja FloatingPoint-Berechnungen durchführen. Falls das nicht stimmt, wie löst man soetwas dann :?

Wenn Du eine Gleitkommarechnung machen möchtest, müßte in der Rechnung auch eine Gleitkommazahl vorkommen.

m = 16/10; // ist gleich 1 (Ganzzahlrechnung nur mit ganzen Zahlen)

Gleitkommarechnung

m = 16/10.0; // ist gleich 1.6 (Gleitkommarechnung, weil mit Gleitkommazahl in der Rechnung)

Da 10.0 im Gegensatz zu 10 eine Gleitkommakonstante ist, wird in dem Fall eine Gleitkommarechnung durchgeführt.

Danke für den Hinweis, daran hab ich gar nicht mehr gedacht....
Die Sekunden mussten noch in Millisekunden umgerechnet werden, jetzt passts - ich ändere das mal im Code oben und kommentiere die falsche Version in der entsprechenden Zeile aus, falls jemand den Code verwenden möchte :slight_smile:

Einfach die Steigung in der Zeile in der m festgelegt wird anpassen und die Zeiten in den while-Schleifenköpfen entsprechend anpassen. Funktioniert jetzt wunderbar.
m = Frequenzunterschied / Zeit