ich bin Neuling und brauche eure Hilfe. Ich möchte versuchen bei einem einmaligen digitalWrite(ENABLE, HIGH) einmal etwas auszuführen aber währenddessen weitere Eingaben/digitalWrite(ENABLE, HIGH) zeittechnisch z. B. für 15 sek. "zu blockieren."
Diesen Sketch möchte ich später anderweitig anwenden, sodass bei einem Lichteinfall auf digitalRead(0), ein HIGH an einer Nebelmaschine abgegeben wird(statt wie unten im Sketch an einen DC Motor).
Damit die Nebelmaschine nicht direkt bei weiterem Lichteinfall auslöst, möchte ich hier eine Pause von digitalWrite(Enable, High) einlegen. Sobald ich ein delay(15000) hinter dem digitalWrite(ENABLE, HIGH) hinzufüge, führt es diesen nur für den Delay HIGH aus statt diesen zu blockieren.
Diese Funktion habe ich bisher leider nicht googeln können, eventuell habe ich falsch gesucht, dann schon einmal ein sorry von mir. Im unteren findet ihr meinen Sketch eventuell wird es so ersichtlicher.
Du musst nur wissen wie oft die Nebelmaschine angesteuert werden soll, bzw wie lange die Pause dazwischen sein soll. Dann nimmst du dir das "blink without delay" Beispiel und versuchst es zu verstehen.
Die blinkende LED ist deine Nebelmaschine, deren Blinkgeschwindigkeit musst du dementsprechend anpassen. Als Bedingung zum Setzen des Ausgangs nimmst du noch deinen Lichtsensor dazu.
So kannst du auch noch andere Dinge erledigen lassen ohne das dein Programm blockiert wird
Danke für die prompten Antworten. Den Titel habe ich aus dem "How to use this forum - please read" als Vorgabe übernommen.
Um auf mein Vorhaben nochmal zurück zukommen. Wir sind Betreiber einer Indoor Minigolf Anlage. In einem Themenraum gibt es eine Bahn welche als Hindernis einen Vulkan beinhaltet. Wenn bei der Bahn eingelocht wird möchte ich den Vulkan per Nebelmaschine einmal "zum ausbrechen" bringen. Dafür wollte ich einen Fotowiderstand für den Lichteinfall benutzen sobald es durch den eingelochten Ball dunkel wird. Damit es nicht die ganze Zeit die Nebelmaschine anschmeißt wollte ich eine Pause zwischen den Nebelstößen einlegen um die Kosten der Nebelmaschine gering zu halten.
Achso, das ist dann doch etwas anders als ich dachte.
Den Ablauf würde ich so ungefähr machen:
Ball erkennen -> Zeit ablaufen lassen -> ist der Ball immer noch da? -> Nebelmaschine starten -> Zeit ablaufen lassen -> Nebelmaschine ausschalten
Durch das zweimalige einlesen des Eingangs mit Zeit dazwischen kann man Fehlalarme etwas eindämmen, zum Beispiel wenn jemand den Schläger übers Loch zieht oder der Ball drüber weg läuft
Es ergibt soweit alles sinn, Scherheinz. Wie könnte ich das mit dem Code dann wie beschrieben umsetzen? Bräuchte einen Denkanstoß. Wäre sehr lieb, wenn du mir dabei weiterhelfen könntest, zerbreche mir nämlich dabei schon seit geraumer Zeit den Kopf
Das hab ich von einem sketch übernommen, welcher für einen DC Motor bestimmt war. Das sollte die Drehrichtung des Motors bestimmen. Das würde ich dann rausnehmen, weil das mit dem Vorhaben gar nichts zutun hat.
Für die Nebelmaschine würde ich dann einen neuen Sketch schreiben um es dort zu verwenden. Derzeit hab ich als OUTPUT statt einer Nebelmaschine einen DC Motor verwendet, bis die Nebelmaschine eintrifft. Hätte hierfür auch eine LED zum tüfteln benutzen können. Hat also keine weitere Bedeutung.
newcomer1:
Danke für die prompten Antworten. Den Titel habe ich aus dem "How to use this forum - please read" als Vorgabe übernommen.
.....
Das ist doch keine Vorgabe, sondern nur ein Beispiel.
Zumal wir uns hier im deutschen Forumsteil befinden.
Und ein aussagekräftiger Titel, der dein Problem kurz beschreibt, ist immer besser.
ist ja fast noch Weihnachten, also hier mein Q&D Ansatz
ich gehe mal davon aus das Du letzlich mit einem Relais schalten willst, macht jedenfalls Sinn. Musst halt die Zeiten und den Relais Ausgang anpassen. Habs kurz getestet sollte für Deinen Anwendungsfall erst mal so reichen.
mfg
Heinz
/* LDR mit Widerstand als als Spannungsteiler aufgebaut
Hardware UNO
*/
byte ldr = 0;// Eingang zum lesen des LDR
byte relais = 13;// Ausgang Nebelmaschine
int LDRwert; // Messwert LDR Sensor
bool nebel_on; // status Ausgang
unsigned long startwarte;
unsigned long wartezeit = 2000UL;
unsigned long nebelzeit = 5000UL;
void setup() {
pinMode (relais, OUTPUT);
//Serial.begin(9600);
}
void loop() {
LDRwert = analogRead(ldr);// relais wert lesen
//Serial.println (LDRwert);
if (LDRwert > 700) { // wenn dunke erkannt wird
// wenn wartezeit abgelaufen
if (millis() - startwarte > wartezeit) {
nebel_on = true;
}
}
else { // sonst aus und reset wartezeit
nebel_on = false;
startwarte = millis();
}
// wenn nebelzeit abgelaufen
if ( millis() - startwarte > nebelzeit + wartezeit) {
nebel_on = false;
}
digitalWrite(relais, nebel_on); // Ausgang schreiben
}