etwas alle 1-10 minuten neu starten lassen

Hallo,

ich möchte einen Befehl und eine LED alle 10 Minuten neu triggern lassen, würde ich dort mit einen delay arbeiten oder eine zählschleife laufen lassen? Könnt Ihr mir ein Beispiel dafür geben?

delay(wartezeit)
//LED blink

oder

unsigned long timercount = 0;
unsigned long timer_start = 0;
unsinged long wartezeit = 1000; //1000ms = 1 sekunde

void setup() {
   timer_start = millis();
}

void loop() {
   timercount = millis();

   if (timercount - timer_start > wartezeit){
      // LED blink
      timer_start = timercount;
   }
}

Die Wartezeit müsste natürlich entsprechend auf 10 Minuten angepasst werden.

Hallo,

irgentwie greift das nicht,
ich habe extra die LED am ANfang auf off gestellt, aber der Ton wird gehalten und die LED blinkt nicht:

       if (buttonCounter < 1) {
         
         timercount = millis();

         if (timercount - timer_start > wartezeit){
                
               digitalWrite(LEDpin, LOW);
               noteOn(0x80, note, 0x00);
               delay(100);
               noteOn(0x90, note, 0x7F);
               // save the note we played, so we can turn it off:
               lastNotePlayed = note;
               digitalWrite(LEDpin, HIGH);
               aktiv = 1;
               buttonCounter++;
            timer_start = timercount;
         }
         
         //noteOn(0x80, note, 0x00);
     
         //delay (900);
       } else {
         noteOn(0x80, lastNotePlayed, 0x00);
         digitalWrite(LEDpin, LOW);
         buttonCounter = 0;
       }

Kann es sein das Buttoncount nie kleiner als 1 ist und somit immer der else Zweig ausgeführt wird?

Gerade eben nochmal getestet lässt folgender Code eine LED alle 5 Sekunden kurz aufblitzen.

unsigned long timercount = 0;
unsigned long timer_start = 0;
unsigned long wartezeit = 5000; //5000ms = 5 sekunde

void setup() {
   timer_start = millis();
   pinMode(10, OUTPUT);
}

void loop() {
   timercount = millis();

   if (timercount - timer_start > wartezeit){
      // LED blink
      digitalWrite(10,HIGH);
      timer_start = timercount;
      delay(100);
   }
  
    digitalWrite(10,LOW);  
}

gloob: Kann es sein das Buttoncount nie kleiner als 1 ist und somit immer der else Zweig ausgeführt wird?

nope, dann wär ja die LED aus, ich hab mal ein delay innerhalb der if abfrage, der ton wird dann neu getriggert,

Sorry aber so richtig verstehe ich dein Probleme gerade nicht. vielleicht stellst du mal ein bisschen mehr Code ein und sagst genau an welcher Stelle was nicht ausgeführt wird.

void loop() {
   //  My potentiometer gave a range from 0 to 1023:
  // AnalogValue = analogRead(0);
   //  convert to a range from 0 to 127:
  // note = AnalogValue/8;
   currentSwitchState = digitalRead(switchPin);
   // Check to see that the switch is pressed:
   if (currentSwitchState == 1) {
     //  check to see that the switch wasn't pressed last time
     //  through the main loop:
     if (lastSwitchState == 0) {
       // set the note value based on the analog value, plus a couple octaves:
       // note = note + 60;
       // start a note playing:
       if (buttonCounter < 1) {
         
         timercount = millis();

         if (timercount - timer_start > wartezeit) {
              
               noteOn(0x80, lastNotePlayed, 0x00);
               digitalWrite(LEDpin, LOW);
               delay(100);
               noteOn(0x90, note, 0x7F);
               // save the note we played, so we can turn it off:
               lastNotePlayed = note;
               digitalWrite(LEDpin, HIGH);
               aktiv = 1;
               buttonCounter++;
            timer_start = timercount;
         }
         
         //noteOn(0x80, note, 0x00);
     
         //delay (900);
       } else {
         noteOn(0x80, lastNotePlayed, 0x00);
         digitalWrite(LEDpin, LOW);
         buttonCounter = 0;
       }
     
    } 
   }
/*   else {   // if the switch is not pressed:
     //  but the switch was pressed last time through the main loop:
     if (lastSwitchState == 1) {
       //  stop the last note played:
       noteOn(0x78, lastNotePlayed, 0x00);
       digitalWrite(LEDpin, LOW);
     }
   }
*/
   //  save the state of the switch for next time
   //  through the main loop:
   lastSwitchState = currentSwitchState;
 }

 //  plays a MIDI note.  Doesn't check to see that
 //  cmd is greater than 127, or that data values are  less than 127:
 void noteOn(byte cmd, byte data1, byte  data2) {
   Serial.print(cmd, BYTE);
   Serial.print(data1, BYTE);
   Serial.print(data2, BYTE);
 }

 // Blinks an LED 3 times
 void blink(int howManyTimes) {
   int i;
   for (i=0; i< howManyTimes; i++) {
     digitalWrite(LEDpin, HIGH);
     delay(100);
     digitalWrite(LEDpin, LOW);
     delay(100);
   }
 }

Im Programm sollte ja direkt nach noteOn(80*) die LED einmal blinken,
noteOn(80 sollte den ton beenden und 2 zeilen tiefer mit noteOn(90 neu triggern.
Jetzt ist es aber so das der Ton durchgehend läuft und auch die LED nicht blinkt.
Wenn ich jetzt den Ton beende muss ich die “wartezeit” warten bis ich den Ton neu triggern kann.

EDIT:

ich hab den Fehler gefunden, dauert ne weile bis man die Logik versteht, ist keine website oder n string den man verarbeitet…