Alarm-Timerzeit mit Taster erhöhen/senken

Ne.
Es ist wegen der Verwendung anders.
bouncetime gibt die Zeit an, in der es bounced.
Also es kann innerhalb von xx ms einen neuen Trigger geben.

Wenn ich vermeiden will, das ich in dieser Zeit rein laufe und einen Trigger auslöse, muss ich mehr als bouncetime vergleichen.

Alternativ wäre auch bouncetime um 1 höher zu setzen - dann kannst auch auf == vergleichen. Macht aber die Logik komplett kaputt.

Das ist zudem vollkommen unabhängig von alledem, was da noch rundrum läuft.

OK.

...Leute was ist das, ihr sprecht in Rätzeln :roll_eyes:
gibt es irgendwo eine Literatur, wo man solche Dinge und auch die Funktion nachlesen kann?

Gerne auch als PDF und wenn möglich in meiner Mutterspache...(DE) Schule ist schon sehr lange her... :wink:

wenn ich nun diese Befehle in meinem Code verwendet habe, würde ich auch gerne verstehen was damit gemacht wird, um es ggf. auch später an anderer Stelle einsetzen zu können.
Man soll ja nie ausgelernt haben...! :rofl:

Überraschender Weise ja! Von @combie vorgeschlagen "Der C++ Programmierer" von Prof. Dr. Ulrich Breymann, ISBN 978-3-446-44884-1 für die 5. Auflage von Hanser, es gibt aktuellere. Bibliotheken haben sowas zum leihen, um mal zu probieren, ob einem der Stil gefällt, denn für unter das Kopfkissen zu legen sind es zu viele Seiten!

Ich verwende online cplusplus.

"bounced und bouncetime" beschreiben die Zeiten zum Entprellen von mechanischen Tastern.

Ach schön...

Na dann mein StandardLesePDFzurGutenNacht:
https://www.arduinoforum.de/code-referenz
Dort gibt es ein pdf von einem User geschrieben - das Ding ist wirklich verständlich.

Runterladen.
Lesen. Nicht auswendig lernen!
Wenn Du weisst, das Du da drin findest, was Du suchst, reicht es...

Und nein, las Dich nicht durch unseren, doch sehr von Deinem Problem abschweifenden, Austausch ablenken.

...sehr nett und danke für die Literatur-Tipps :smiley:

Nun habe ich "Anfänger" doch noch feststellen müssen, dass mein "alarmIn" nicht als Masse ankommt sondern als High-Level (+3,3V)... was natürlich nun für mich erstmal wieder ein Problem darstellt. Werde auch in der Literatur zu forschen gehen.

  pinMode(alarmIn, INPUT_PULLUP); // Setzt den Pin des alarmIn als Eingang mit Pullup-Widerstand
  pinMode(switchUpPin, INPUT_PULLUP); // Setzt den Pin des switchUp als Eingang mit Pullup-Widerstand
  pinMode(switchDownPin, INPUT_PULLUP); // Setzt den Pin des switchDown als Eingang mit Pullup-Widerstand
  pinMode(ledOut, OUTPUT); // Setzt den Pin des Led-Relais als Ausgang

Klar ist für mich, dass ich vermutlich den alarmIn anders definieren muss???

und ggf. dann in der Funktion "timer" sicherlich auch etwas anpassen muss...

...ihr seht ja schon, dass ich das eine oder andere schon versucht habe; unter anderem ein High-Level Relay verwende und nicht ein Low-Level... das ist aber insoweit ok und läuft auch schon.
Nur der "alarmIn" will auf die +3,3V einfach nicht reagieren...
Könnt ihr mir da noch eine Tipp geben???

Danke schon mal

Gruß Max

void timer() {
  static uint32_t previousMillis = 0;
  if (digitalRead(alarmIn) == LOW) // mit Taster gegen GND
  //if (digitalRead(alarmIn) == HIGH) // tatsächlicher AlarmIn (+3,3V=)
  {
    digitalWrite(ledOut, HIGH);   //LOW-Level Trigger
    //digitalWrite(ledOut, LOW);  //HIGH-Level Trigger 
    previousMillis = millis();
  }
  
  if (millis() - previousMillis >= settTime * 1000UL && digitalRead(ledOut) == HIGH)
  {
    digitalWrite(ledOut, LOW);    //LOW-Level Trigger
    //digitalWrite(ledOut, HIGH); //HIGH-Level Trigger 
  }
  
  if (digitalRead(ledOut) && (settTime - ((millis() - previousMillis) / 1000) != runTime)) 
  {
    runTime = settTime - ((millis() - previousMillis) / 1000);
    Serial.print("(millis() - previousMillis) / 1000: "); Serial.print((millis() - previousMillis) / 1000);
    Serial.print("\trunTime: "); Serial.println(runTime);
  }

 
  if (digitalRead(ledOut) == LOW) {
  display.showNumberDec(settTime, false);    // Darstellung der eingestellten setTime in Sekunden
  }
  
  if (digitalRead(ledOut) == HIGH) {
  display.showNumberDec(runTime, false);    // Darstellung der runTime (AblaufZeit) nach alarmIn, in Sekunden
  }

Ja.
Vor allem musst Du jetzt noch Hardwareseitig nachrüsten.

Wenn Du einen HIGH-Pegel bekommst, musst Du auch dafür sorgen, das bei fehlendem Pegel wieder LOW erzeugt wird.

Also brauchst einen Widerstand zwischen dem PIN und GND.
Irgendwas zwischen 2 und 10K - ist eigentlich unkritisch. Wenn der Sender sich auch so verhält....

Und dann den Code umstellen, das Du nicht auf LOW am INPUT-Pin sondern auf HIGH prüfst.

Das dürfte diese Zeile werden:

if (digitalRead(alarmIn) == HIGH) // tatsächlicher AlarmIn (+3,3V=)

Der Rest bleibt wie es ist!!!

...ok, hatte auch schon an etwas in der Richtung gedacht ... Bauteil...
Beim Widerstandswert bin ich mir allerdings unsicher, da der "Sender" ein IPC-Kamera Modul ist. Laut Hersteller (CN) kommt das Signal direkt von der CPU und ist Last empfindlich. Ich würde da gerne noch eine Schutz vorschalten, dass der CPU nichts passieren kann...

Fang mit 10k an. Bei 3.3V sollte nach dem guten alten Ohm dann lediglich 1/3 mA fließen.

...wie wahr, das gute alte "Ohmsche Gesetz" :wink:
Klar, da hätte ich auch selbst drauf kommen können... ein 1/3 mA dürfte nicht zu viel für den Ausgang sein. Werde aber trotzdem versuchen die Kollegen (CN) zu befragen, so dass nicht der erste Versuch gleich den Totalschaden hervor ruft.

Vom Prinzip her aber klar...
Danke für die schnelle Hilfe.

Grüße Max

Wenn da ein HIGH-Signal rauskommt, dann auch LOW und das hast Du bereits mit einem ca. 50 kΩ PullUp-Widerstand belastet. Da sollte die CPU auch einen 47 kΩ PullDown-Widerstand aushalten.

Natürlich nicht pinMode(alarmIn, INPUT); vergessen.

...ne, falsch verstanden!
Das IPC-Modul war noch nicht angeschlossen...
Vorsicht ist hier immer die bessere Variante... bevor Rauch aufsteigt... :grinning_face_with_smiling_eyes:

werde natürlich den pinMode(alarmIn, INPUT); verwenden...

Nachdem aber heute Morgen aktuell mir die 50mA bestätigt wurden, denke ich dass 10k und somit 0,33mA schon ok sind!

Ah ok!

Das ruft nach einem Optokoppler! Die LEDs vom Optokoppler brauchen ca. 10 mA und Du hast eine galvanische Trennung.

...sehr gute Idee. Das ist die perfekte Sicherung für beide Seiten.
Gibt es sowas schon fertig als Arduino-Modul, so würde ich mir die restliche Beschaltung sparen! :wink:

...so etwas hätte ich gerade zuhause!

Youmile 5PACK-Erweiterungsplatine TLP281 4-Kanal 4-CH-Optokoppler-IC-Modul Für die hohe und niedrige Optokoppler-Isolation der Arduino-Erweiterungsplatine: Amazon.de: Gewerbe, Industrie & Wissenschaft

...ist zwar 4-Kanal, aber was solls...

oder ist ein PC817 ohne weitere Beschaltung ausreichend?

https://www.amazon.de/dp/B01GNKF40Q
Ach hast ja sogar was...
Na dann...

...genau den 2-Kanal hab ich gesucht... PERFEKT!!! :wink: