Hallo,

mein Projekt beinhaltet zur Zeit 2 Arduinos. Einen Sender und einem Empfänger mit Hilfe der RF24 Libary. Der Sender sendet an den Empfänger die Nummer des zu schaltenden Kanals/Pins. Der Empfänger soll dann diesen Kanal/Pin anschalten und nach z.B. 200ms diesen Kanal auch wieder ausschalten. Das hört sich jetzt erstmal nicht so schwer an, aber wenn der Sender jetzt 2 Kanäle im Abstand von 100ms sendet werden die Ersten jetzt denke ich wissen das es nicht einfach mit

Code:
digitalWrite(kanal, HIGH);
delay(200);
digitalWrite(kanal, LOW);
getan ist. Denn hier werden nicht die 100ms Abstand eingehalten sondern erst wenn die 200ms, die der Kanal halten soll abgelaufen um sind, wird der nächste Kanal geschalten.

Ich habe schonmal was mit
Code:
millis();
versucht aber bin leider nicht wirklich weiter gekommen.


Mein Versuch

Code:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Conceptinetics.h>

DMX_Master        dmx_master ( 24 , 2 ); //DMX

RF24 radio(7, 8); // CNS, CE
const byte address[6] = "00001";
long buttonState;
int State = LOW;
int Anzahl[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24}; //Kanäle die geschalten werden dürfen
int Anzahl2 = 0;
long OnTime = 200;
unsigned long preMills = 0;

void setup() {
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  dmx_master.enable ();
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
}

void loop() {
  while (!radio.available());
  radio.read(&buttonState, sizeof(buttonState)); //Hier enthalten der Kanal
  Anzahl2 = buttonState - 1;
  if(buttonState == Anzahl[Anzahl2]) { //Wenn geschalten werden darf
      schuss(buttonState); 
  }
}

void schuss(int kanal) { //Mein versuch mit millis();
unsigned long currentMills = millis();
if(State == LOW){
digitalWrite(kanal, HIGH);
dmx_master.setChannelValue (kanal , 255);
State = HIGH;
preMills = currentMills; 
}
if((State == HIGH) && (currentMills - preMills >= OnTime)){
digitalWrite(kanal, LOW);
dmx_master.setChannelValue (kanal , 0);
State = LOW;
}
}

Vielen Dank