Sicherheitseingabe über Taster

Hallo, vielen Dank für das Nutzen des Forums hier! Ich starte gleich mit einer Frage.

Ich würde gern folgendes umsetzen.

Über ein Arduino nano möchte ich ein Relais schalten. Soweit so gut.

Ich möchte mit einem Taster aber eine gewisse Sicherheitseingabe machen können.

Z.B. kurz kurz lang oder kurz lang kurz. Bin auf die Library onbuttonn.h gestoßen.

Kann mir jemand sagen, ob das damit geht? VG

Ja, das geht sogar ohne die Lib. Ein ideales kleines Projekt um Programmieren zu lernen. Fang einmal damit an, ein Relais für 1,5 Sekunden einzuschalten und dann für 800ms aus. Ohne den Befehl delay(). Du brauchst digitalWrite, pinMode, millis und if.

1 Like

.

ja das geht ganz bestimmt.

Danke für die Info Werner. Ja, das möchte ich gern lernen. Ich habe bisher nur so ein Keypad gebaut und programmiert. Also "if" ist das Zauberwort?

Nicht nur if

1 Like

Hallo cryshark

Mein Kochrezept:

Man nehme eine Tüte mit ereignisgesteuerten Timern für:

  • Entprellen der Taste
  • Vermessung der Zeitdauer eines Tastendruckes
  • Zeitüberschreitung bei der Bedienung
  • Einschaltdauer des Relais

alles Zusammenrühren und nochn bißl KI zur Auswertung des "Morsecodes" hinzufügen.

Der ereignisgesteuerte Timer läßt sich prima aus dem BlinkOutWithDelay Beispiel, aus dem IDE, ableiten.

Ich wünsche einen geschmeidigen Abend und viel Spass beim Programmieren in C++.

1 Like

Ich glaube, ich bin etwas überfordert. :slight_smile: Gibt es dazu Beispiele, die man als Lehrfaden benutzen kann?

Ja, Beispiele aus der von dir genannten Library.

1 Like

Wie ist den dein Wissensstand? Weist du wie digitalWrite und pinMode funktioniert?
Fang einmal damit an, ein Relais für 1,5 Sekunden einzuschalten und dann für 800ms aus. Mit dem Befehl delay().
Die nächste Aufgabe ist dann das delay zu entfernen und es mit millis und if zu machen.
Wenn du Anfänger bist, musst du die Aufgabe in ganz ganz ganz kleine Teile zerlegen.

Wenn ich oben schon wieder lese:

Man nehme eine Tüte mit ereignisgesteuerten Timern....

weiß ich, das jeder Anfänger zu 1000% überfordert ist.

Daher fang ganz klein an.

Du kannst auch welche aus der Dose nehmen. Aber immer auf den Stempel im Bodenblech schauen. :grinning:

@cryshark
also ich würde zunächst mit der OneButton Library anfangen und das Beispiel SimpleOneButton nachbauen und ausprobieren.

Funktioniert es?
Wenn nicht - berichte was du gebaut hast und was der Sketch nicht macht.

1 Like

Ich habe mal Bard gefragt:

Ardunio: Schalte ein Relais wiederholend für 1,5 Sekunden ein und für 800ms aus

Um ein Relais wiederholend für 1,5 Sekunden ein und für 800ms aus zu schalten, kannst du den folgenden Code verwenden:

// Definiere die Pins, die du verwendest
int relaisPin = 13;

// Setup-Funktion
void setup() {
  // Lege den RelaisPin als Ausgang fest
  pinMode(relaisPin, OUTPUT);
}

// Loop-Funktion
void loop() {
  // Schalte das Relais ein
  digitalWrite(relaisPin, HIGH);
  // Warte 1,5 Sekunden
  delay(1500);
  // Schalte das Relais aus
  digitalWrite(relaisPin, LOW);
  // Warte 800ms
  delay(800);
}

Verwende Code mit Vorsicht. Weitere Informationen
Dieser Code schaltet das Relais für 1,5 Sekunden ein und für 800ms aus. Die Zeitintervalle können durch Ändern der Werte der Variablen delay(1500) und delay(800) angepasst werden.

Um den Code zu verwenden, lade ihn in deine Arduino IDE und verbinde das Relais mit dem Pin 13 deiner Arduino-Platine. Dann kannst du den Code einfach ausführen und das Relais wird wiederholend ein- und ausgeschaltet.

Hier ist eine Erklärung des Codes:

Die setup()-Funktion wird einmal ausgeführt, wenn der Arduino gestartet wird. Hier legen wir den RelaisPin als Ausgang fest.
Die loop()-Funktion wird endlos wiederholt. Hier schalten wir das Relais für 1,5 Sekunden ein und für 800ms aus.
Wenn du mehr über Arduino lernen möchtest, kannst du dir online viele Tutorials und Anleitungen ansehen.

Und wie geht das mit den Befehl millis()?

Um ein Relais wiederholend für 1,5 Sekunden ein und für 800ms aus zu schalten, kannst du auch den Befehl millis() verwenden. Der Befehl millis() gibt die Anzahl der Millisekunden seit dem Start des Arduino-Sketches zurück.

Der folgende Code verwendet den Befehl millis(), um das Relais wiederholend für 1,5 Sekunden ein und für 800ms aus zu schalten:

// Definiere die Pins, die du verwendest
int relaisPin = 13;

// Setup-Funktion
void setup() {
  // Lege den RelaisPin als Ausgang fest
  pinMode(relaisPin, OUTPUT);
}

// Loop-Funktion
void loop() {
  // Speichere die aktuelle Zeit
  unsigned long currentMillis = millis();

  // Wenn die aktuelle Zeit seit dem letzten Einschalten des Relais 1,5 Sekunden beträgt, schalte es ein
  if (currentMillis - previousMillis >= 1500) {
    digitalWrite(relaisPin, HIGH);
    previousMillis = currentMillis;
  }

  // Wenn die aktuelle Zeit seit dem letzten Ausschalten des Relais 800ms beträgt, schalte es aus
  if (currentMillis - previousMillis >= 800) {
    digitalWrite(relaisPin, LOW);
  }
}

Verwende Code mit Vorsicht. Weitere Informationen
Dieser Code funktioniert ähnlich wie der erste Code, aber er verwendet den Befehl millis(), um die Zeit zu messen, die seit dem letzten Einschalten des Relais vergangen ist.

Hier ist eine Erklärung des Codes:

Die setup()-Funktion wird einmal ausgeführt, wenn der Arduino gestartet wird. Hier legen wir den RelaisPin als Ausgang fest.
Die loop()-Funktion wird endlos wiederholt. Hier speichern wir die aktuelle Zeit in der Variablen currentMillis. Dann prüfen wir, ob die aktuelle Zeit seit dem letzten Einschalten des Relais 1,5 Sekunden beträgt. Wenn ja, schalten wir das Relais ein. Wenn die aktuelle Zeit seit dem letzten Ausschalten des Relais 800ms beträgt, schalten wir das Relais aus.
Dieser Code ist etwas komplexer als der erste Code, aber er ist auch flexibler. Mit dem Befehl millis() können wir beliebige Zeitintervalle messen.

!!!! Achtung: Der 2. Code geht so nicht. Er enthält Fehler, zeigt aber in die richtige Richtung !!!

1 Like

Du kennst Dieses alte Video mit dem damals aktuellen Arduino Duemilanove?

Grüße Uwe

2 Likes

Danke für das Video. Das geht schon in die richtige Richtung. Nur das ich statt Klopfen einen einzigen Taster verwenden möchte. Die Lernfunktion ist natürlich der Hammer. :star_struck:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.