ich bin neu bei Euch in der Arduino Welt und stoße im Augenblick auf folgendes Problem:
Ein Relais soll per Zufallszahl ein- und wieder ausgeschaltet werden. Es werden also Zahlen zwischen 1-10 ausgegeben und bei kleiner als 2 wird eingeschaltet und bei größer als 8 eingeschaltet.
Das funktioniert auch alles, soweit so gut.
ABER. Sobald der Einschaltbefehlt kommt soll folgendes passieren:
eine LED soll ohne Verzögerung eingeschaltet werden
das Relais soll erst nach 2 Sekunden eingeschaltet werden
das Programm soll indessen weiter laufen
Mit delay habe ich leider keinen Erfolg in meinem kleinen Programm da dieses nur die Ausgabe der Zufallszahl verlangsamt.
Vielleicht könnt ihr mir behilflich sein.
Das Programm:
long randNumber;
int Relais1 = 6;
void setup() {
Serial.begin(9600);
randomSeed(analogRead(0));
pinMode(Relais1, OUTPUT);
}
void loop() {
randNumber = random(10);
Serial.println(randNumber);
delay (500);
if (randNumber >8)
digitalWrite(Relais1, HIGH);
if (randNumber <2)
digitalWrite (Relais1, LOW);
}
Dann sind jetzt mal 5Sekunden Pause drin.
Aber mal ne Frage: Schaltet das Relais wirklich bei HIGH? Die mir bekannten Relaisboards schalten bei LOW.
Wenn das Relais jetzt nicht 5 Sekunden an bleibt, tausche in case 1: und case 2: für das relais das HIGH gegen LOW.
unsigned long randNumber;
const byte relaisPin = 6;
const byte ledPin = LED_BUILTIN;
byte schritt;
unsigned long lastmillis;
void setup()
{
Serial.begin(9600);
randomSeed(analogRead(0));
pinMode(relaisPin, OUTPUT);
pinMode(ledPin, OUTPUT);
}
void loop()
{
randNumber = random(11); // die letze ausgebbare Ziffer ist 10
switch (schritt)
{
case 0:
Serial.println(randNumber);
if (randNumber > 8)
{
digitalWrite(ledPin, HIGH);
lastmillis = millis();
schritt++;
}
break;
case 1:
if (millis() - lastmillis >= 2000)
{
digitalWrite(relaisPin, HIGH);
lastmillis = millis();
schritt++;
}
break;
case 2:
Serial.println(randNumber);
if (millis() - lastmillis > 5000)
{
if (randNumber < 2)
{
digitalWrite(relaisPin, LOW);
digitalWrite(ledPin, LOW);
schritt = 0;
}
}
break;
default:
schritt = 0;
break;
}
}
Doch doch, die werden schon beachtet.
Wenn > 8: led an, 2 sekunden später relais an, nach weiteren 5 sekunden wird begonnen zu prüfen und wenn <2 geht alles aus. und es beginnt von vorn.
Wenn nach einer zufälligen Zahl das Relais einschaltet soll ein Knopf gedrückt werden müssen. Um dieses aber vorab kenntlich zu machen das es jetzt gleich passiert soll eben 2 Sekunden davor die LED leuchten.
Sobald das Relais abgeschaltet wird soll eine andere LED Leuchten um zu zeigen das der Knopf gleich losgelassen werden kann.