Variabler Timerinterrupt

Hallo alle zusammen. Momentan sieht meine IST Situation wie folgt aus:
Vor Setup:

int schrittbreite = 100;

Im Setup:

Timer1.initialize(schrittbreite);
  Timer1.attachInterrupt(zeitscan, schrittbreite);

Später im Programm:

void zeitscan(){
if(nulldurchgang_erkannt == true){
  if(counter >= schnittzeitpunkt){
  digitalWrite(triac, HIGH);
  digitalWrite(test, HIGH);
  counter = 0;
  nulldurchgang_erkannt = false;
    }
  else {
  counter++;
    }
  }
}

Hier wird quasi mein Phasenanschnitt 0-100% ermöglicht. 0-100% setze ich weiter unten indem ich meine variable schnittzeitpunkt via Encoder einstelle.
Ist es möglich die Variable schrittbreite vorher im Setup mit einer Funktion auf einen bestimmten wert zu setzten? Sprich ich möchte vorab die Phase auf Frequenz überprüfen (50 || 60 hz) und dann entsprechen meinen Timerinterrupt konfigurieren. Oder bin ich irgendwie auf dem Holzweg und muss nur eine umrechnungsvariable für den schnittzeitpunkt benutzen?

Ja.

unsigned int tik = 0;

void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));
  Serial.println(tik);
  tik = initMeinWert();
  Serial.println(tik);
}
unsigned int initMeinWert()
{
  unsigned int A = 1; 
  unsigned B = 2;
  return A + B;
}


void loop()
{
}

Ist hierbei auch egal ob die Funktion einige Sekunden braucht?

Ja.
Du kannst im Setup() machen was Du willst - und das auch solange wie Du willst - wenn Dein "Hauptprogramm" erst mit loop beginnt. (Mein "Hauptprogramm" ist im setup :slight_smile: ) Das Setup wird einmal durchlaufen - danach erst wieder nach einem Neustart....
Du kannst ja im setup() auch ein delay von 30Sekunden einbauen. Da passiert halt nur nichts :wink: Ausser delay()....

Ich danke dir vielmals :slight_smile:

Die Variante der Berechnung hat den Vorteil, das Du das später wiederverwenden kannst.
Du kannst also auch im loop immer mal wieder nachrechnen.....

Interessanter Gedanke. Im meinem fall nicht notwendig daher ist es so wie du oben beschrieben hast am günstigsten.