Nach Drücken von Taster 1 soll ein Relais abfallen. Wird dieser Taster 1 nicht innerhalb von 2 Sekunden gedrückt wird das Relais angezogen. Wird der Taster 1 dann dennoch gedrückt fällt das Relais ab.
Dieses soll zwischen 2 Tastern in einem zufälligen Zeitabstand wechseln.
Wahrscheinlich viele, wenn du uns deinen Ansatz in Form eines Sketches präsentierst. Möchtest du, dass dir jemand einen Sketch entwirft, solltest du eine Ausschreibung für einen Job starten.
Wenn Du das als Angriff siehst, dann stelle ich mal zur Debatte:
Ich habe Dir heute mehrfach ohne jegliche Information versucht gedanklich zu folgen.
Ich habe nachdem ich das TikTak aus dir rausgepopelt habe, etwas geliefert worauf Du nicht mal eine Reaktion gezeigt hast.
Du eröffnest jetzt eine NEUEN Thread obwohl ganz augenscheinlich ist, das es sich um das gleiche Projekt handelt.
Du beschreibst etwas, was technisch unmöglich ist und es soll sich der nächste jetzt damit auseinandersetzen, Dir aus der Nase zu ziehen, was Du vor hast.
Und glaube mir, ehe ich jemanden angreife, muss schon eine Bombe platzen.
Taster1 wird gedrückt, daraufhin wird das Relais NICHT angezogen, wird der Taster1 nicht innerhalb von 2 Sekunden gedrückt wird das Relais angezogen. Wird der Taster1 dann doch gedrückt fällt das Relais wieder ab.
Nach einer zufälligen Zeit wechselt die Schaltung auf Taster 2.
Wird Taster2 nun gedrückt, wird das Relais NICHT angezogen. Wird der Taster 2 nicht innerhalb von 2 Sekunden gedrückt wird das Relais angezogen. Wird der Taster 2 dann doch gedrückt fällt das Relais wieder ab.
Nach einer zufälligen Zeit wechselt die Schaltung auf Taster 1 zurück.
Und nein es ist nicht das gleiche Projekt.
Mein Ansatz sieht aber wie folgt aus:
if
digitalRead (Button1 = HIGH); //Taster1 wird gedrückt
digitalWrite (Relais = LOW); //Relais zieht NICHT an
else
delay(500); //Verzögerung von X Zeit
digitalWrite (Relais = HIGH); //Relais zieht an
Nur wie mache ich das mit der randNumber und eben der Verzögerung mit nicht 'delay'. Weil delay hält ja das Programm an, das aber weiter laufen soll.
Ich hoffe ich konnte mein Anliegen nun etwas konkretisieren und entschuldige mich das ich gerade mal 30 Stunden Arduino Erfahrung habe und so etwas 'kompliziertes' machen möchte.
Das ist technisch nicht möglich! Da fehlt irgendwas.
Den Rest las ich mal absichtlich aussen vor.
Du hast das vor 12 Stunden nicht verstanden und vergessen da zu fragen, was das macht.
Das ist kein Grund, seine Anforderung nicht beschreiben zu können und auf gegebene Hilfe mit Ignoranz zu reagieren.
Hinweis: Bau einen PAP Ich kenne ein ganz einfaches und ohne Schnickschnack sicher unter Windows zu bedienendes Tool
PS: Wie man code postet habe ich Dir auch erklärt.
Ok,
das ist mein Code volkommen verwurstelt - Ich habe hier eine Aufgabe für Dich. Hier gibt es ein pdf zum download. Einmal von von bis hinten durchlesen. Nur lesen. Dann werden Dir ganz bestimmt einige Dinge klar. Der Autor ist selbst Arduino-User. Da ist sehr viel in wirklich einfacher Sprache geschrieben.
Du musst einige grundlegende Sachen nur erstmal mitnehmen. Nicht auswendig lernen. Nur wissen, das es da steht und nachschlagen.
Nach dem das Programm gestartet wurde muss man 'sofort' den Taster gedrückt halten. Dann geht LED 1 mit einer Verzögerung von 2,5 sec. an. Hält man den Taster nicht gedrückt, geht LED2 nach 2,5 sec. an. Drückt man jetzt auf den Taster geht auch LED1 mit an, aber LED2 wird nicht wieder gelöscht was aber geschehen soll. Lässt man hingegen den Taster wieder los geht LED1 aus und LED2 wieder an.
Das ganze soll quasi in einem zufällig gesteuerten Abstand den man einstellen kann so wechseln das man anstelle von Taster1 einen Taster2 drücken muss. Passiert dies nicht soll das gleiche passieren.
Ich mag mich hier vielleicht unklar ausdrücken, aber den Ansatz habe ich:
Hallo tuffen
Poste ein Timingdiagramm um alle Abhängigkeiten zu erkennen.
Ich wünsche einen geschmeidigen Tag und viel Spass beim Programmieren in C++.
Beim programmieren muss man sich sehr präzise ausdrücken.
Du stehst vor der Wahl durch immer neue jeweils zu unpräzise Beschreibungen Zeit zu verbrauchen und dann immer noch keine Lösung zu haben
oder
Zeit für eine ausführliche und präzise Beschreibung zu verbrauchen.
Bei einer präzisen Beschreibung ist gaaanz wichtig ganz sauber auseinander zu halten was ist das gewollte Programmverhalten und was ist das beobachtete verhalten.
Wenn du gewolltes Programmverhalten und beobachtetes Programmverhalten in einem Satz zusammenmischst wie in deinen obigen Beschreibungen geschehen dann versteht man es nicht.
Also in gaaaaanz kleinen Schritten beschreiben was das gewünschte Programmverhalten sein soll. In dieser Beschreibung das beobachtete (falsche) Verhalten gaaanz weglassen.
Programm startet
Laufzeit des Programms 0,0 Sekunden Zustand von
Relais:
LED1:
LED2:
Taster1:
Taster2:
Laufzeit des Programms 2 Sekunden Zustand von
Relais:
LED1:
LED2:
Taster1:
Taster2:
Laufzeit des Programms 2,5 Sekunden Zustand von
Relais:
LED1:
LED2:
Taster1:
Taster2:
Laufzeit des Programms 3 Sekunden Zustand von
Relais:
LED1:
LED2:
Taster1:
Taster2:
usw.
Trage den Zustand von jedem einzelnen Bauteil ein "eingeschaltet" "ausgeschaltet"
Beim Taster "gedrückt" "nicht gedrückt"
Es ist schon klar dass es dann verschiedene Abläufe gibt
Taster zu früh / genau richtig / zu spät gedrückt
Das musst du dann in einem zweiten, dritten Ablauf beschreiben.
Die Variante die schneller geht als Text ist ein grafisches Timing-Diagramm.
Das ist sicherlich nicht wahr.
Es ist eher eine der vielen Durchhalteparolen, für Dokuleseverweigerer.
Befehle:
Nein, in C++ gibt es leider keine Befehle.
Es gibt tausend Dinge, aber keine Befehle.
Initialisierung von Variablen, Konstanten und Instanzen:
Hier muss man 3 Dinge ganz klar auseinander halten:
Deklaration
Definition
Initialisierung
Auch wenn es manchmal in einer Zeile auftaucht, sind es doch 3 völlig unterschiedliche Dinge.
Einer der Vorteile, wenn man Fachpublikationen wie z.B. ein C++ Gundlagenbuch liest ist, dass man sich mit den richtigen Begriffen vertraut macht. Denn erst wenn ALLE die gleichen Begriffe verwenden und unter den Begriffen das gleiche verstehen, ist eine erfolgreiche Kommunikation möglich.
Die Beschreibungen, was das Programm tun soll, habe ich jetzt mindestens 5 mal gelesen, und nicht verstanden.
Liegt es an mir?
Meine Erfahrung sagt:
Malen von Diagrammen:
Programmlaufplan
Datenflussdiagramm
Zeitdiagramm
Zustandsdiagramm
Beziehungsdiagramm (UML)
Bringt Klarheit ins Denken.
Erst wenn die Klarheit gegeben ist, kann man es erfolgreich in Software gießen.
Hallo,
ich hab das schon verstanden, finde die Beschreibung eigentlich nicht so schlecht. Allerdings sehe ich ein Problem. Woher weiß der Bediener welchen Taster er eigentlich drücken soll.?
Es handelt sich doch eigentlich um eine Einschaltverzögerung die mit einem Taster neu gestartet werden kann (reset der Zeit). Wenn die Zeit dann > 2s wird zieht das Relais an, das geht doch super einfach mit millis(). Zusätzlich gibt es den Wechsel von Taster 1 auf Taster 2 der nach einer zufälligen Zeit sein soll.
Also BlinkWithoutDelay anschauen und verstehen. Für die Abfrage der Taster benötigst Du noch eine Flankenerkennung, damit der Bediener nicht ständig den Taster gedrückt halten kann. Das mit dem Entprellen des Tasters kannst Du erst mal vergessen, es ist doch erst mal völlig egal ob der Reset für die Zeit mit der ersten Flanke oder mit einen geprellten Flanke erfolgt.
Fang mal mit der Zeitverzögerung an. Wenn das klappt baust Du den Blinker dazu und lässt Ihn erst mal einfach parallel dazu mit einer LED laufend blinken. Damit hast Du dann erst mal zwei Funktionen unabhängig voneinander (nebenläufig). Dann baust Du den Blinker so um das die Zeiten zufällig in einem bestimmen Bereich verwendet werden. Ich weiß nicht was Dir da so vorschwebt irgedwas zwischen 2 und 10s ? Dann als letzten Schritt nimmst Du die Umschaltung der beiden Taster mit dazu, abhängig davon ob die BlinkLED an oder aus ist fragst Du die eine oder andere Flanke der Taster ab.
WENN Taster1 losgelassen wird (0) DANN wiederholt sich Schritt 2
nach einem zufällig gesteuerten Zeitraum (randNumber?) wird das ganze so umgeschaltet das nun der Taster2 bedient werden muss. Das ganze also dann so aussehe:
Relais = NO
Taster 1 = 0
Taster 2 = 1
LED 1 = 0
LED 2 = 0
LED 3 = 1
WENN NACH 2 SEKUNDEN Taster 2 nicht gedrückt wird DANN
Relais = NC
Taster1 = 0
Taster2 = 0
LED 1 = 0
LED 2 = 1
LED 3 = 1