Posts by WillyR_aus_C

    Guten Abend,

    Also , naja. Also die letzten Messungen hast du mit der in Sperrrichtung eingebauten Z-Diode gemacht oder nicht ? Bitte solche Angaben immer mit anführen !
    Und es gab auch keine Masse-Verbindung zu der USB Platine !?
    Naja wenn die Werte sich so geändert haben sollten, dann hast du irgendwas schon gegrillt.
    Wenn du eine Schalterstellung findest, ohne diese Z-Diode wo es beim Münzwurf einen positiven Spannungsanstieg gibt, egal wie hoch der jetzt ist, aber halbwegs reproduzierbar. dann bleibt dir nur der aufwendige Weg.
    Einen Schwellwertschalter, irgendeinen OPV z.B. den MCP601. Den kannst du über den Vc Pin der USB Platine mit 5 Volt versorgen, die paar µA wird die Platine wohl abkönnen ;) Dann ein 100k Linear Trimmer und beschaltest den OPV als Comparator. Das heißt, der Ausgang geht hintenraus erst hoch wenn die Schaltsollspannung eingestellt über das Poti / Trimmer überschritten wird. Dazu einen 3k +- 10% Widerstand. Über diesen steuerst du einen N-Kanal-MOSFET 35V ca. 5 W Ptot oder größer, an und schaltest einen Relais an, dazu noch eine Freilaufdiode, das direkt mit von oder über die 12 V Vc des Münzprüfers betrieben wird. Das Relais ist ein Schließer. Also ersetzt dann dieses Relais den Taster.

    Über diesen OPV machst du zwei Sachen in einer Beschaltung, einmal die Schaltschwelle die als Münzwurf gewertet werden soll, und zudem eine Signalverstärkung, dass der Ausgang des Prüfers nur noch im µA Bereich belastet wird. Der OPV bringt hinten genug Strom raus um einen MOS durchzusteuern, damit dieser ein / dieses Relais direkt schalten kann. Das ganze auf einer kleinen Lochrasterplatine aufgebaut und du hast Ruhe.

    Guten Tag,

    Mit Platine ist wohl dieses UBS Ding gemeint ;) Und meine Vermutungen haben sich somit bestätigt, dass das ganze über einen internen PullUp funktioniert. Damit wissen wir, dass der Pegel vom am Eingang über diesen PullUP auf eine Spannung kleiner 1,8 V gezogen werden muss, damit diese Platine den Tastendruck erkennt.

    Das heißt jetzt auf Deutsch, wenn der Müntzer auf NC steht ( so lese ich das ) ist die Abgabespannung ohne Einwurf 0 Volt, und mit Münzwurf Kurzzeitig mal größer als 2,5 V ?

    Dann haben wir, wenn du endlich mal die Typenbezeichnung der Z-Diode noch nennen könntest, mehrer Möglichkeiten. Das hängt nun von der Z-Diode, und dem Material ab, was du zZ noch griffbereit hast. Wichtige wäre auf jeden Fall, dass du wenn du den Münzprüfer anschließt auch immer Masse des Prüfers mit der Masse der Platine verbindest.
    Wenn es eine 1,8 V Z-Diode ist, sollte die Schaltung so funktionieren wie auf der Anleitung zum Prüfer, jedoch dann mit der Masse - Masse-Verbindung zwischen beiden. Aber Vorsicht ! Erst den Typ der Z-Diode eindeutig bestimmen !
    Aber du kannst das prüfen. Wiederhole noch einmal die Spannungsmessung mit dieser Z-Diode, aber ohne Verbindung zu der USB Platine. Dann suchst du dir die Schalterstellung, bei welcher die Spannung zusammenbricht. Dann kommt Masse auf Masse, und der Schaltausgang COIN über die Z-Diode hinaus, wo dann Null Volt anliegen, mit ca. 120 Ohm auf den Schalter-Eingangspin. Damit müsste der Kurzschluss ausreichen, auch über den internen PullUp dieses Potential auf Null zu ziehen. Geht das nicht, bleibt dir nur der Weg über einen invertierenden OPV, eine 12 VRelais was die positive Schaltspannung von 2,5 Volt nutzt, aber über einen Transistorverstärker ( NPN ) , und eine Freilaufdiode, benötigt, oder einen Transistor-Inverter mit einem PNP Transistor. Jetzt oder dann wäre die Frage was aktuell deine Bastelkiste noch so hergibt ?

    Also bitte nochmal: Die Typenangebe dieser Diode ! Und was für Bauteile so grob mal zusammengefasst, was wir sonst noch so verwenden könnten. Wenn du sagst du hast ein einfaches 12 Volt Relais mit Umschalter irgendwo rumliegen, dann wäre das eine Option. Ansonsten nru auf dem elektronischen Weg.

    Guten Morgen,

    so wie ich das sehe werden im Taster-Betrieb an diese Tastatur-Emulator-Platine die Taster-Befehle auf Masse gezogen. Das heißt diese sind mit einem PullUp intern irgendwie vorgespannt.
    Das kannst du prüfen, wenn du zwischen dem EIngangs-Pin wo der Taster auf diese Platine kommt mal dein Messgerät dran hältst, und gegen einen der GND Pins misst. Da müsste eine Spannung anliegen. Wenn das der Fall ist, dann bestätigt sich meine Vermutung. Unterlagen zu der Platine findet man leider auch keine genauere Erläuterung als ein Schaltbild.

    Meine Frage was an dem Ausgang des Zählers passiert ist auch noch nicht beantwortet. Liegt an dem COIN Ausgang der jetzt nur mit Vc und GND verbunden ist eine Spannung an, wenn ja welche, wenn keine Münze eingeworfen wurde, und dann im Moment wenn eine gültige Münze erkennt wurde ? Und lasse dabei diese Z-Diode weg
    Was ist das für eine Z-Diode ?

    Das ist alles nur Gaga. Wenn der Zähler ohne Münzwurf keine Spannung rausbringt, und du diesen auf diese komische Platine hängst, dann sind 0 Volt halt 0V und das entspräche einem permanent gedrückten Taster. Und wenn du dann noch den Zählimpuls über die Z-Diode ebenfalls auf Null kurzschließt, passiert unter dem Strich für den Controller gar nichts.

    Also nimmst du jetzt mal einen 4,7 kOhm Widerstand und einen LED. Und klemmst diese ohne diese Z-Diode zwischen COIN Ausgang und GND des Zählers. UND ! ohne eine Verbindung zu dieser komischen Platine. Wenn die LED mal kurz aufleuchtet, wenn eine Münze eingeworfen wurde, dann musst du halt ein kleines Relais oder was anderes dazwischen schalten.

    Das schlimme ist, Entschuldigung, wenn ich das mal so in aller Deutlichkeit sage. Ihr liefert keine oder unvollständigen Informationen, gezielte Nachfragen werden gar nicht beantwortet, und dann in eurer Unwissenheit bekommt man irgendwas hingeworfen, anstatt mal einen Zettel in einen Stift in die Hand zu nehmen, und das auf zu skizzieren, was man erfragt hat. ist nicht, oder wird nicht gemacht. Woher sollen wir denn wissen, was ihr dort treibt ?

    Nachdem, was ich bis jetzt herausbekommen habe, bleibt dir nur ein Zwischenschritt über ein kleines 12 Volt-Relais, aber auch nicht direkt angeschlossen, sondern über einen Transistorverstärker, und einer Freilaufdiode ( keine Z-Diode ) welches die Tasterbetätigung zwischen den GND PIN, und dem Abfrage Pin auf dieser USB- Controller Platine emuliert. Aber ohne zu wissen was an diesem COIN Ausgang ohne diese Z-Diode passiert, ist das alles auch nur Spekulation.

    Guten Abend,

    kleiner ging das Bild der Anleitung wohl nicht ;)

    Erst einmal zur Z-Diode: Wenn man diese in Sperrrichtung zwischen einer Spannungsführenden Leitung und Masse ( GND ) einbaut passiert solange nicht, wie die Spannung kleiner ist als Spannung die auf dieser Z-Diode aufgedruckt ist. Die Spannung und damit der Strom kann diese Stelle ungehindert passieren. Steigt die Spannung über diesen Grenzwert schließt die Z-Diode beide Leiter kurz und der darüber fließende Strom wird von dieser Diode ausschließlich in Wärme verbraten. Deswegen eigentlich ein Vorwiderstand, damit der gesamte durch diesen Kurzschluss fließende Strom nicht von der Diode allein verbraten werden muss.
    Das ganze ergibt auch keinen richtigen Sinn. Wenn an diesem COIN Ausgang ohne das du etwas zusätzlich angeschlossen hast, außer dein Messgerät, oder Spannungsprüfer / Multimeter, bei jedem Schaltimpuls eine kurzes Signal von 12 Volt rauskommt, macht diese ganze Schaltung keinen Sinn.
    Sobald die Spannung den Nennwert der Z-Diode überschreitet, schließt die das ganze Kurz. Und das Ergebnis ist genau das was du feststellst - 0 ( in Worten Null ) Volt.
    Was ist das nun mit dem Taster ? Wie hast du diesen angeschlossen ? Wo ist der zu Testzwecken angeschlossen ? Geht der auf einen der GPIOs oder auch in dieses USB-Ding ? Welche Spannung liegt auf einer Seite des Schalter an, bzw. woher bekommt der Schalter seine Spannung ?

    Wenn es so wäre, dass der Eingang zum Zählen der COINs / Credits einen 5 Volt Impuls als Schaltimpuls braucht, dann geht dass nur über einen LS, oder noch einfacher über einen Spannungsteiler, der dann die entstehenden 5 Volt an dieses USB Ding weitergibt.

    Da keine Angaben dieser extrem kleinen und kaum lesbaren Anleitung zu entnehmen ist. mit wie viel Schaltlast dieser Ausgang belastet werden darf, gehen wir mal klein rein und sagen 2mA.
    Wie man einen Spannungsteiler von 12 Volt auf 5 Volt bei einem Strom von 2 mA ausrechnet solltest du über das Internet herausfinden können. Wie ein Spannungsteiler aufgebaut und anschlossen wird ebenfalls. Von mir aus kannst du die 5,1 Volt -Z-Diode nach dem Spannungsteiler drin lassen, damit dem Eingang an diesem USB Ding nichts passieren kann.
    Ich nehme an, das es eine 5,1 Volt Z-Diode ist, denn eine 5 Volt Z-Diode gibt es nicht.
    Hilfreich wäre auch mal eine Schaltskizze wie es sein soll, und auch die vollständige Typenbezeichnung der Z-Diode zu kennen.

    Guten Abend,

    eigentlich liegt die Antwort schon in deiner Beschreibung.
    Du schreibst

    Und die Zener Diode von Masse zu Coin signal.

    Schließe ich aber einen Button an den Pin an wo der münzprüfer dran sein sollte kann ich wunderbar per Tastendruck die Coins aufbuchen.

    Warum legst du das COIN Signal mit einer Z-Diode auf Masse, steht das so in der Anleitung ?
    Soweit ich informiert bin, zählt der Counter die Anzahl der eingeworfen Münzen, und das COIN Signal gibt die Credits frei. Da du aber keine Typenbezeichnung deines und dieses Münzzählers angibst, können meine Erfahrung, weil möglicher Weise abweichendes Modell nicht mit deinem Münzzähler übereinstimmen.
    Dann schließt man eine Signalleitung auch nicht mit einer Z-Diode kurz, die feuert es sonst irgendwann ohne Vorwiderstand durch, sondern man nimmt einen Levelshifter um die Signalpegel anzupassen. Damit kannst du theoretisch direkt via LS von 12 V auf das GPIO Pins ( 3,3 Volt ) des PIs gehen, oder auf das USB-Dingsdabum mit 5 Volt.
    Bei RetroPi ich nehme an, das da wirklich ein PI im Hintergrund werkelt ?
    Ein LS für einen Kanal lässt sich sehr leicht mit einen N-Chanel MOSFET und 2 Widerständen umsetzen. Alternativ einen Spannungsteiler, wenn der Signalfluss nur in eine Richtung benötigt wird. Das sind dann nur 2 Widerstände.

    Guten Abend johpi,

    ich habe echt keine Ahnung, was du auf deinem PI mit der Basisinstallation gemacht hast.
    Grundsätzlich und schon ab Buster in den Versionen von 2020/2021 ist u.a. das Paket "gpiozero" enthalten, welches eigentlich RPi.GPIO mitbringt. Bei dir in dem Listings finde ich weder "RPI" für RPi.GPIO" noch den Ordner "gpiozero".

    Bevor wir uns hier anfangen im Kreis zu drehen, oder irgendwelchen Spuck hinterher laufen.
    PIP bzw PIP3 ist nur eine Installationsplattform. Auch hier können Fehler auftreten.
    Also erst einmal Finger weg. Dann erst einmal das gesamte System auf den aktuellen Stand bringen.
    Bemerkenswert ist auch, dass auch "picamera" fehlt.

    Was ist das für eine Version des BS, wenn RasbianOS in welcher Version / Update Stand vorliegend, von welcher Quelle ?
    Komme jetzt aber nicht, du hast dir irgendwo ein altes NOOBS Image gezogen, und bastelst nun damit herum.
    Dann Zurück auf Anfang.
    Mit dem Imager einen Neuinstallation machen, oder mit einer anderen, zweiten µSD Card weiter machen, wenn du noch wichtige Daten auf dieser minimalistischen BS Version haben solltest.
    Alternativ zum Check mal dieses PI wenn mit Desktop Oberfläche an ein HDMI Gerät anschließen, die Python-IDE Thonny starten. oder noch installieren. Dort hast du im Menü Extras -verwaltete Plugins eine Auflistung welche Plugins, obwohl es Bibliotheken sind, du installiert hast, bzw du kannst die benötigten, oder fehlenden darüber nachinstallieren. Anschließend nochmal einen kompletten Durchlauf eines Systemupdates durchlaufen lassen.
    Und dann schauen wir mal was deine Listings sagen. Solange die genannten Ordner / Bibliotheken nicht auf dem PI sind, brauchst du keinen Meter mit PyCharm weiter machen. Wozu eigentlich überhaupt eine solche Fremdsoftware ?

    Guten Abend,

    erste Frage: ist SSH auf dem PI eingerichtet ? [raspi-config und SSH User eingerichtet ?]
    zweite Frage: wie soll das PI zum Ausführen auf die lokale Datei deines Laptops im Ordner /tmp/ zugreifen ?
    Die Meldung ist doch an für sich eindeutig :conf:

    /tmp/pycharm_project_782: No such file or directory

    Er kann diese Ordner nicht finden.

    Guten Tag Perlchamp,

    Es macht einen Unterschied.
    Hierbei kommt es darauf an wie man das Programm bzw die Abfrage im Detail als Programmcode schreibt.
    Ich hatte das Problem auch schon einmal. Ja, das Programm zwar läuft weiter.
    Ich will jetzt auch nichts falsches sagen. Wenn man diesen Zeitwert der millis() Abfrage nach der Abfrage der Startzeit mit += erweitert und somit die Endzeit ermittelt hat, dann hat auch der Abfragewert ( Abschaltzeitpunkt) schon diesen Wertüberlauf. Damit ist man wieder Konform zum aktuellen übergelaufenen millis() Wert. Das entspricht dann &.
    Irgendwo hatte ich damals einen Zuordnungsfehler in der IF Abfrage.

    Da müsste ich jetzt mal mein ganzes Programmarchiv durchwühlen. Aus dem Kopf bringe ich das auf die Schnelle jetzt auch nicht mehr zusammen.
    Es betrifft aber nur Programme oder Boards die unentwegt durchlaufen.

    Guten Tag Colonn,

    Haha :bravo2:

    jetzt geht es auch. Der Servo lässt den Arduino also für Millisekunden abstürzen und deswegen hatte ich das Problem. Code funktioniert jetzt. Werde das mal mit den zwei weiteren probieren ob es dann immernoch funktioniert.

    Noch ein Hinweis zu den millis():
    Irgendwann nach einigen Monaten läuft auch diese Variable mal über, das heißt der Zählwert beginnt wieder bei 0 ( Null).
    Nun weis ich nicht, ob dein Arduino im Dauerbetrieb und ständig unter Strom bleibt, und ob dieser Überlauf-Effekt bei dir auftreten könnte.
    Darum prüfe ggf ob der Startwert aus millis() ausgelesen Plus der Verweilzeit überhaupt erreicht werden kann. Nicht dass das Programm dann in eine Endlosschleife festhängt, ohne das die Abschaltbedingung erreicht werden kann.
    Wenn dieses Steuer-Arduino nur dann unter Spannung ist, wenn du in der Werkstatt / Garage arbeitest, dann betrachte diese Anmerkung als Gegenstandslos.

    Guten tag Perlchamp,

    ganz deiner Meinung. Aber wenn du möglichst wenig Speicher belegen/verbrauchen willst - und darum ging es - dann sollte dieser Code am wenigsten 'verbraten' ...

    Ist das eine allgemeine Feststellung oder eine Arduino IDE bezogene Feststellung, ich verkneife mir hier bewusst das Wort Behauptung zu benutzen ?

    Grundsätzlich so meine Feststellung, macht es bei der Boardauswahl für ein Arduino Board über diese IDE keinen Unterschied, ob man über const Variablentyp oder #define einen Wert festlegt, der vom Compiler als solches mit dem Inhalt dieses Bezeichners eingearbeitet und übersetzt wird. Das Ergebnis ist immer das Gleiche. Und solange dieses #define nicht gegen die Compiler-Direktiven verstößt, würde ich auch das Wort veraltet nicht gebrauchen. In der Arduino Referenz wird nur von nicht empfohlen gesprochen.
    Wenn man jedoch über die Boardverwaltung eine andere Quelle auswählt macht es jedoch einen Unterschied. Bei einigen ATTiny Typen oder anderen Boards führt die Verwendung von const zu einer größeren RAM Nutzung als wenn man klassisch auf #define setzt.
    Wenn sie, oder du von "verbraten" sprichst, dann die die Methode mit setup() und loop() einer der größten Ressourcen-Verschwendungen.
    Einfach int main(void) verwenden, und das fertige Programm wird um fast 1k kleiner.

    Guten Tag Gnom,

    Das Grundkonzept hier ist und bleibt eine Superloop

    Bevor du dich hier weiter mit irgendwelchen Spitzfindigkeiten über Andere aufregst, deine eigenen Behauptungen und Thesen aber nicht verifiziert hast, nur so viel tum Thema:
    Super-Loop, dass entstammt doch wohl auch nur deiner Vorstellungskraft und Aussageform.
    Unter Superloop oder Super-Loop findet man alles, auch Achterbahnen und sonstiges mit Google nur keinen Hinweis auf den ersten 3 Seiten zur Programmiersprache C/C++ !

    Und warum soll der Loop einfach Super sein ? Es ist eine Endlosschleife ohne Abbruchbedingung. Mehr nicht und nicht weniger.

    es grüßt euer
    Willy

    Guten Tag Gnom,

    Wenn der User unter Void()" nachgoogelt, wird er kaum schlau werden.

    Bevor du wieder irgendwelche Thesen aufstellst, solltest du deine Aussagen auch kontrollieren, und nicht nur etwas hinschreiben.

    Gibt man "void()" direkt in die Google-Suche ein, führt der erste Link zu Wikipedia.
    Wenn du diese Erklärung und Erläuterung für unverständlich hältst, dann ist es wohl nicht unser aller Problem.

    es grüßt euer
    Willy

    Guten Tag,

    Wie ist deine Ausgabe nach der OpenCV auf dem ersten Kamera-Pi programmiert ?
    Hier wäre der Programm-Code hilfreich.

    Normal sollte es ausreichen, wenn du dieses als Stream wegsendest. Auf dem zweiten Monitor-PI insoweit diese via PING getestet sich sehen und erkennen, sowie in dem gleichen Netzwerk sind, müsstest du mit VLC diesen Stream mit der Netzwerkadresse und Portnummer darstellen können.


    es grüßt euer
    Willy

    Guten Morgen Gnom,

    (Und auch wenn ich weiß, was du meinst... ein VOID() gibt es nicht. Bestenfalls eine Void-Funktion, aber auch das ist eigentlich nicht korrekt. Es müsste Funktion ohne Rückgabewert heißen. Allerdngs könnte er auch eine mit Rückgabewert verwenden, wenn ihm das zu rgendwas nützlich ist. Wenn man einfach "Funktion" sagt, findet er in Google wenigstens das, was man meint.)

    Void() ist im übertragenen Sinne eine Procedure. Wenn dieser als Block ausgelagerte Programmteil eine Rückgabe enthalten soll, gibt es bei Arduino eine abweichende Schreibweise zum typischen C++.

    Procedure ohne Rückgabe:
    void Aufrufname ([Variablentyp Übergabevariable]) {}:  wobei eine Übergabe nicht zwingend notwendig ist.

    Will man eine Rückgabe erreichen, muss zudem das Befehlswort return enthalten sein, und der Aufruf laut Arduino-Rferenz ist auch ohne void() möglich.

    C++
    int Aufrufname ([Variablentyp Übergabevariable]){
        //... bla bla bla Programmcode;
        return Rückgabewert;
    }

    Alternativ kann die Rückgabe , oder Wertübertrag auch über eine vor dem setup() stehende definierte Variable erfolgen.

    Hier kommt es ganz darauf an was man damit vor hat. Will man ein Variable direkt mit einem Rückgabewert beschreiben Variable = Aufruf_eines_funktionalen_Objektes();  muss zwingend return in dieser Funktion "Aufruf_eines_funktionalen_Objektes" enthalten sein.

    Da der Code des TO jeweils nur abweichende PORT Nummern enthält ist es ein Speicherplatz Frevel, wenn man diese Möglichkeit nicht für sich nutzt. Es würde eine Funktion mit Rückgabe und einem Übergabeparameter ausreichen, um alle Taster Events abzufragen. Dein Code enthält wiederkehrend gleiche Befehlsfolgen nur mit anderen Parametern. Das ist Speicherplatzverschwendung, und zudem viel zu aufwendig bei einer Änderung oder Anpassung.
    Der Basis loop() sollte nur das unbedingt notwendigste enthalten, und alles andere lagert man entsprechen hochdynamisch in andere Programmteile aus. Wobei man diese Funktionen auch nicht überfrachtet, sondern nur einen oder wenige Funktionsinhalt(e) darin platziert.

    Diese IDE hat zweifellos viele Vorteile, weil sich ein breites Spektrum an µC damit programmieren lassen, dennoch erzieht diese IDE auch zu einem unsauberen Programmierstil.

    Prinzipiell ist auch das setup() und das loop() gar nicht notwendig, zudem ein Speicherplatzfresser. Besonders wenn man auf andere µC umsteigt oder damit programmiert, kann diese Einsteiger-freundliche Methode zum Zünglein an der Waage werden, wenn der Flash-Speicherplatz und der Variablenspeicher RAM knapp werden.

    Da dem ATMega auf dem Arduino Board durch den Bootloader auch noch einen Timer für die Serielle USB basierende Schnittstelle genommen wurde, bleibe ich trotzdem bei meiner Aussage, das ganze Programm sauber geproggt, passt in einen 8 mal kleinern Tiny414, wobei der Tiny rein Interupt- und Timer-Watchdog-gesteuert, größtenteils schläft, und nur dann zum Leben erwacht, wenn er mal einen GPIO Port umschalten muss. Da muss nix in einem Super-LOOP laufen. Ja, einen loop() braucht man sonst würde das Programm nach einem Durchlauf in die Leertaktung verfallen, bis er am Stack Ende angekommen ist, und dann erst wieder von vorne beginnen. Falls man sich dazu auch mal die Hersteller-Datenblätter von Atmel / Microchip ATTINY / ATMEGA anschaut, für 80 % der Aufgaben, wo es nur um Event-bedingte Schaltfunktionen ohne großen Rechenaufwand geht, erzieht diese IDE den User zu etwas, was gar nicht notwendig wäre.

    es grüßt euer
    Willy

    Guten Morgen,

    Das war wohl eine schwere Geburt.
    Alles typische Fehler die wohl auch davon kommen, dass man sich nicht die Anleitungen durchliest.
    Servos betreibt man grundsätzlich mit einer eigenen Vc und gibt nur GND und das PWM ( Steuersignal) an den Servo weiter. Da hast du verdammt viel Glück gehabt, dass es dir auf dem Arduino Board nicht die Spannungsregler weggeraucht hat.

    Bezüglich der Schalter oder Taster-Abfrage noch den Hinweis, alle mechanischen Schalter prellen. Dass heißt, es dauert einige Millisekunden bis der Kontakt dauerhaft geschlossen ist. Daher sollte man egal nach oder mit welcher Methode du über digitalRead() einen solchen Eingang abfragst immer ein kurze Verweilzeit von ca.20 ms erfolgen, bevor man das Ergebnis als sicher gegeben auswertet. Gerade und insbesondere in staubigen Umgebungen sollte man bedenken, dass nicht jeder Schalter 100% Staubdicht ist, so das mit zunehmender Betriebszeit ( über Monate und Jahre betrachtet ) dieses Nachprellen sich zum schlechteren verändert.
    Das heißt vereinfacht, einfache billige Federkontakttaster, wie diese PIN-Taster unterliegen einer Alterung. Das heißt ihr Nachprellverhalten ändert sich stätig. Wer kennt das nicht, dass man mit zunehmenden Alter der Anlage immer kräftiger oder wiederholt auf einen solchen Auslöser drücken muss.

    Hier würde ich ähnlich wie es DeaD_EyE gemacht hat, diese Abfrage der Eingänge in ein void readInputs() auslagern, und dort noch eine Plausibilitätsprüfung anfügen.
    Aktuell verwendest du nur eine einzelne Abfrage, die durch die Erweiterung des Logikwertes ob schon eingeschaltet wurde nur einmal durchlaufen wird. Egal ob es eine der Prellungen war, oder ob durch Vibration oder Schmutz es zu dieser Kontaktschließung gekommen ist !?

    Dass bewerkstelligt man dahingehend, dass man beim ersten Erfassen eines HIGH- oder LOW- Signales, bei dir wohl HIGH (wobei immer noch keine Informationen vorliegen, und auch im Code nicht ersichtlich ist, wie du absicherst, dass der LOW Pegel wirklich auf LOW ist {Stichwort Beschaltung mit einem Pulldown Widerstand}), in eine While() eintrittst. Darin fortlaufend den Eingang abfragst und diese Wertfolge in einem Array nach dem Überlaufverfahren ( Größe des Array ) ablegst. Diese While() Schleife wird unter zwei Umständen verlassen. Einmal wenn alle Werte in diesem Array HIGH sind, dann ist es ein beabsichtigter Schaltvorgang. Alternativ brichst du mit break() nach dem 2 Durchlauf ab, dann war es eine unbeabsichtigte Fehlauslösung. Da dieses alles in Millisekunden passiert, ist die reale Verzögerung bis zur Eventauslösung nur Minimal und im 20-50 ms Bereich zu suchen.
    Diese Fehlauslösung kann man ggf auch Protokollieren, sprich ablegen im EEPROM, oder durch eine LED zur Anzeige bringen. Damit hast du einen relativ einfachen Zustandsindikator, der dir Auskunft über die "noch" Qualität deiner Taster, oder Schalter gibt.

    Ich will hier keines falls den Moralapostel spielen, nur wo Fremdimpuls-gesteuert mechanische Bewegungen, oder rotierende Anlagenteile in Bewegung gesetzt werden, sollte, besser muss man sicherstellen, dass diese "Ingangsetzung" egal von was auch wirklich vom Menschen / Bediener gewollt ist.

    Das nur als abschließenden Hinweis zur Betriebssicherheit einer solchen Anlage.

    Es grüßt euer

    Willy

    Edit Nachtrag: Es gibt innerhalb der Arduino IDE und den zur Verfügung stehenden Bibliotheken auch schon fertige Module, mit denen man die Gedrückt-Zeit eines Tasters vorbestimmen kann. Dass heißt, erst wenn an ein solcher PIN für die vorgegebene Zeit den gewünschten Pegel dauerhaft anliegt, gibt diese dann die Meldung zurück, dass der Taster, oder das Schaltelement ausreichend lange gedrückt wurde. Das hat allerdings auch den Nachteil, wenn durch äußere Einflüsse es zu gehäuft und unbeabsichtigt kurzzeitigen Kontaktschließungen kommt, dann hängt das Programm jeweils solange in der dieser Abfrage Routine fest, bis die Sollzeit erreicht ist. Hier sollte man dann einen gesunden Mittelweg aus Abfragezeit und den wirklichen Bedingungen finden. Ab wann ist eine menschliche betätigte Eingabe wirklich als solche eindeutig zu erkennen. Das kannst du allerdings nur vor Ort und bei dir relativ sicher bestimmen.

    Guten Tag,

    Alles nett... aber es erklärt nicht, warum sein Code nicht funktioniert, oder?

    Das hatte ich ausgeführt.
    Jedesmal wenn die Abfragebedingung zum Abschalten erfüllt ist, bleibt das Programm innerhalb dieser Abfrage Routine für 2 Sek hängen. Treffen nun alles drei Bedingungen innerhalb eines Durchlaufes aufeinander, dauert eine LOOP() Durchlauf Minimum 6 Sekunden.

    Wenn nun Tellerschleifer abgeschaltet werden soll, wartet das Programm für 2 Sek. Erfolgt nun die nächste Bedingung, dass in Folge dann der Sauger abgeschaltet werden soll, kommt es darauf an wie dieser PIN beschaltet ist ob als Pullup oder Pulldown, ggf trifft die nächste Abfrage auch gleich wieder zu, dann erfolgt die Abschaltung, und das Programm geht in die nächste Warteschleife. Und so kann sich ein Loop() Durchlauf auf bis zu 6 Sekunden aufaddieren.

    Ich verstehe leider auch den Sinn dieser Aufaddierung der VAR1 bis VAR3 nicht, wenn ein Zuschaltbefehl erfasst wurde. Man kann doch nur einmal etwas einschalten, da muss man doch nicht erfassen wie oft der Befehl zu zuschalten gegeben wurde. Zumal es auch keine Auswertung dafür gibt. Egal wie oft durch was auch immer sich der Inhalt dieser Variablen erhöht hat, zum Schluss, oder schlussendlich werden diese einfach wieder auf Null gesetzt.
    Normal reicht dafür ein Boolean. Wenn schon aktiv springe weiter, wenn noch nicht aktiv, setze diese Variable auf true, und schalte das betreffende Objekt ein.

    Das ist so ein typischer Arduino Programmierstil, alles wird in einem Loop() erschlagen. Die CPU keult am Anschlag, obwohl es nur um einige mA geht, statt einfach einen Interrupt Event auf steigenden Pegel an einem I/O Port zu verwenden. Dann könnte das Arduino schön vor sich hin dämmern, und nur zum Umschalten eines GPIO Ports mal aufwachen.

    Ohne die Lösung mit Millis(), oder einem eigenen Counter-Timer wird er das nicht unter Kontrolle bekommen. Millis() ist dahingehend einfach, da er bei einem originalen Arduino nur einen freien Timer zur Verfügung hat, mit welchem er leider nur einen Time Event steuern kann und nicht 3 verschiedene mit 3 möglicher Wiese auch unterschiedlichen Start und Laufzeiten. Für diese Aufgabe mit zeitlich getrennten laufenden Timern würde schon ein DIP14 ATTINY414 völlig ausreichen.

    es grüß euer
    Willy

    Guten Tag,

    und wo ist das Programm ?
    Wenn du schreibst, dass es im Prinzip schon funktioniert, muss es ja ein Stück Porgrammcode geben.
    Ich gehe auch nicht davon aus, dass du die Meßergebnisse dieser Sensoren direkt und ohne Zwischenvariable in den Darstellungscode des Displays geschrieben hast ?
    Deswegen versteh ich deine Frage grundsätzlich nicht.
    Für diese Sensoren gibt es mehr als einen vorgefertigten Abruf-Code. Normal übergibt man erst einmal einer x-beliebigen aussagekräftigen Variablen diesen den, oder die Meßwert(e) ggf auch in einer Liste, und dann erst schickt man diese zum Display.
    Kein Mensch weis, was du damit vor hast, und wie oft pro Zeiteinheit du diese Sensoren abrufst ?
    Ohne deinen schon lauffähigen Programmcode und eine genauere Beschreibung deiner Aussage

    Ich möchte diese beiden Temperaturwerte je einer Variablen zuordnen um mit den Werten

    weiter arbeiten zu können.

    zu kennen, treten wir auf der Stelle. Entschuldige Bitte, wenn du in einem rasanten Tempo innerhalb einer Endlosschleife diese Sensoren anfragst, wird das auch nichts mit einer Zwischenauswertung.

    Es grüßt euer
    Willy

    Guten Tag,

    @Gnom hier unterliegst du einem Irrtum. In C wohl über die Arduino IDE geproggt müssen alle Variablen definiert sein, egal wo, ob vor dem setup() oder innerhalb der loop(). Sonst würde schon beim Kompiliervorgang der Compiler drüber stolpern.

    @Colonn Da dein Code durch die fehlende Formatierung nur bedingt zu lesen ist, und auch der komplette Definitions- oder Kopfteil fehlt, kann ich nur so viel erkennen, dass der gesamte Programmlauf bei jeder IF() Abfrage die auch ein DELAY entfällt unterbrochen wird.

    Hast du wirklich vor, dass diese LOOP() Schleife ununterbrochen durchlaufen wird, musst du jede Schaltfunktion wie auch des Setzen eines Millis() Counters in einen getrennten VOID() ausglieder.
    Mit Millis() erfasst du die aktuelle UPTIME die du über einen weiteren Vergleich auswerten kannst. Dazu gibt es in den Beispiel-Sketchen ein schönes Beispiel "Blink without delay".
    Hieran kannst du dich orientieren, wie du in der Ablauffolge die einzelnen Schaltstellen, wieder mit Millis abfragst, und dann deren Rückschalt-Funktion auslöst.
    Dazu musst du für jede Schaltstelle eine Variable im RAM definieren, das geschieht mit volatile im Kopfteil. Diesen Variablen weist du in den Zuschaltfunktion über millies() die Startzeit zu, und in der Ablauffolge des LOOP() fragst du entsprechend ab, ob die Mindestlaufzeit schon erreicht wurde. Wieder mit einer IF() Abfrage und einem VOID()  stellst du den Ausgangszustand wieder her, und löschst den Inhalt dieser volatile Variable auf einen zB negativen Wert z.B. -1 damit du bei der Einschaltabfrage sicher sein kannst, dass diese noch nicht belegt und aktiv ist.
    Damit musst deine Bedingungsabfrage für das Einschalten um den Terminus if (Startzeit1 == -1) logisch UND verknüpfen. Oder wie du es schon ausgeführt hast eine weitere && Bedingung anhängen.

    es grüßt euer
    Willy