Zitat Zitat von i_make_it Beitrag anzeigen
Hallo,

ähnliche Frage, grade 2 Tage her.
Ich nehme grade mal mein Beispiel von da:

Code:
unsigned long prev1micros = 0;
const long toggleinterval = 1000; // nach wieviel Millisekunden soll ein Zustandswechsel erfolgen
int togglestate = LOW;

void setup() {
}

void loop() {
<<<<< hier passiert was das nichts mit der Zeit zu tun hat
  unsigned long cur1micros = millis();
  if (cur1micros - prev1micros >= toggleinterval) { //alle 10ms umschalten
    prev1micros = cur1micros;
    if (togglestate == LOW){
      togglestate = HIGH;
<<<<< hier passiert was das Abhängig von der Zeit ist
    }else{
      togglestate = LOW;
<<<<< hier passiert was das Abhängig von der Zeit ist
    }
  }
<<<<< hier passiert was das nichts mit der Zeit zu tun hat
}
den Code hatte ich für einen Arduino Nano geschrieben.

Deine Ausgangslage ist halt anders.
Also immer wenn der Befehl zum setzen des Pins kommt, setzt man 'prev1micros = cur1micros' (oder 'prev1micros = millis()') schaltet den Pin und setzt 'togglestate = HIGH'.
Wenn 'togglestate == HIGH' ist und 'cur1micros - prev1micros >= toggleinterval' ist, löscht man den Pin wieder und setzt 'togglestate = LOW'.

Soll nach dem ersten Empfangs des Befehls ein zweiter Befehl ignoriert werden, solange der Pin gesetzt ist, muß man das auch noch verriegeln.

Ich hoffe das hilft als Denkanstoß.

Hallo,
Ja vielen Dank schonmal.
Aber das wäre ja dann im Prinzip das gleiche was ich schon unten stehen habe, nur das dass von dir direkt in der void loop ausgeführt wird. In wie fern macht das ein Problem das in eine Funktion umzulagern?

Gruß

- - - Aktualisiert - - -

Code:
unsigned long prev1micros = 0;
const long toggleinterval = 1000; // nach wieviel Millisekunden soll ein Zustandswechsel erfolgen
int togglestate = LOW;

void setup() {
}

void loop() {
<<<<< hier passiert was das nichts mit der Zeit zu tun hat
  unsigned long cur1micros = millis();
  if (cur1micros - prev1micros >= toggleinterval) { //alle 10ms umschalten
    prev1micros = cur1micros;
    if (togglestate == LOW){
      togglestate = HIGH;
<<<<< hier passiert was das Abhängig von der Zeit ist
    }else{
      togglestate = LOW;
<<<<< hier passiert was das Abhängig von der Zeit ist
    }
  }
Zudem das Problem was ich hier sehe ist, das wenn ein Kanal geschalten ist die Variable togglestate auf HIGH gesetzt wird. Sendet der Sender also nach 100ms, wo der 1. Kanal noch am Halten ist (200ms), wird der gesendete Kanal auch erst nach Ablauf der 200ms geschalten, da togglestate noch auf HIGH ist und der Kanal erst geschaltet werden kann, wenn togglestate wieder gleich LOW ist.