Arduino automatische Abschaltzeit
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 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