Beiträge: 3.725
Themen: 235
Registriert seit: Dec 2015
(10.01.2020, 21:04)Larry67 schrieb: also,
zuerst einmal kamen irgendwie Fehlermeldungen bei der Einrichtung der Felder dann beim Auslesen, aber ich denke die Einstreuungen meines Handys haben da mächtig Ärger gemacht.
Also das Handy könnte schon eine Einwirkung auf den Controller haben, nur muss das Telefon dann auch gesendet haben. Ein normales Mobiltelefon was nur so in eine Zelle eingebucht ist, hält eigentlich die Klappe bzw. die Sendeeinheit still. Nur hin- und wieder gibt es so etwas wie ein Handshake, zudem war dein Programm oben ja in der Hinsicht fehlerhaft, da über die Grenzen eines Feldes hinaus gearbeitet wurde.
Beim nächsten mal, stelle einfach die komplette Fehlermeldung hier rein! Also aus dem Konsolenfenster der Arduino IDE über die Zwischenablage kopieren - Strg+C / Strg+V
Hast Du Arrays (eindimensional/mehrdimensional) jetzt verstanden? Gleiche Frage auch an die anderen Teilnehmer!
(10.01.2020, 21:04)Larry67 schrieb: Jetzt geht es. Ich denke es fehlt einfach Übung mehr nicht.
Übung macht den Meister!
(10.01.2020, 21:04)Larry67 schrieb: Kann ja auch nicht bei jedem Fehler um Hilfe rufen. Erst einmal nachdenken, nachlesen, wieder nachdenken und dann klappts meißt.
Doch Du kannst hier nachfragen und um Hilfe rufen!
Es hilft ja nicht weiter den Fehler durch irgendetwas zu ersetzen, was man aber vielleicht gar nicht verstanden hat
Gruß Bernhard
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung.
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Beiträge: 1.115
Themen: 94
Registriert seit: Sep 2013
Ich habe mal eine Grundsatzfrage zum if Befehl in deinem Beispiel zur Tastenabfrage. Warum zählt der Zähler nur ein Mal, egal wie lange die Taste gedrückt wird.
Hinter der ersten if Abfrage steht keine Anweisung die bei HIGH ausgeführt werden soll. Die beiden if Abfragen sind auch nicht miteinander verschachtelt.
Code: void loop() {
if (digitalRead(TASTER_PIN) == HIGH)
if (digitalRead(TASTER_PIN) == LOW) {
delay(10);
if (digitalRead(TASTER_PIN) == LOW)
iZaehler++;
Serial.println(iZaehler);
}
}
sicheres Auftreten bei völliger Ahnungslosigkeit
Beiträge: 3.725
Themen: 235
Registriert seit: Dec 2015
11.01.2020, 03:18
(Dieser Beitrag wurde zuletzt bearbeitet: 11.01.2020, 03:38 von Bernhard45.)
(11.01.2020, 01:24)Tubefan schrieb: Ich habe mal eine Grundsatzfrage zum if Befehl in deinem Beispiel zur Tastenabfrage. Warum zählt der Zähler nur ein Mal, egal wie lange die Taste gedrückt wird.
Genau das soll das Programm ja tun!
Durch die ersten beiden IF-Abfragen wird die fallende Flanke im Signal detektiert. Wurde die erste fallende Flanke (Taster gegen Masse) gefunden, dann sperrt der Controller einfach für 10ms um die nachfolgenden Flankenwechsel durch das Prellen einfach zu "verschlafen". Danach wird nochmal geschaut ob der Taster immer noch gedrückt ist und wenn das der Fall ist, wird iZaehler um 1 erhöht.
Kurz also so:
1. Auf Flankenwechsel H->L suchen (machen die beiden IF-Anweisungen)
2. das eventuelle Prellen des Taster verpennen
3. nochmal prüfen ob Taster gedrückt ist, wenn ja: Tastendruck zählt, wenn nein, dann wieder zu 1,
Wenn Du den Taster lange drückst (länger als mindestens 10ms + ein paar Zyklen für die Abfrage), dann kommt es nicht mehr zum Flankenwechsel bei 1. von H->L. Solange Du drückst bleibt das Signal ja auf Low, es muss erst wieder auf High gehen, damit ein H->L Zustand eintreten kann.
(11.01.2020, 01:24)Tubefan schrieb: Hinter der ersten if Abfrage steht keine Anweisung die bei HIGH ausgeführt werden soll.
Die beiden if Abfragen sind auch nicht miteinander verschachtelt.
Doch die beiden if- sind miteinander verschachtelt, die Anweisung hinter der ersten if-Abfrage lautet: if (digitalRead(TASTER_PIN) == LOW) { ….. } .
Der ganze Anweisungsblock hinter der 2. if--Bedingung wird durch die geschweiften Klammern dann für dem Compiler wie eine Anweisung betrachtet!
Und wenn man hinter if nur eine Anweisung ausführt, müssen auch keine extra Klammer gesetzt werden, man kann sie aber setzen.
Das hier:
Code: void loop() {
if (digitalRead(TASTER_PIN) == HIGH)
if (digitalRead(TASTER_PIN) == LOW) {
delay(10); // warte ab bis sich der Taster beruhigt hat
// ist der Taster immer noch gedrückt?
if (digitalRead(TASTER_PIN) == LOW) {
iZaehler++;
Serial.println(iZaehler);
}
}
}
ist logisch gleich wie:
Code: void loop() {
if (digitalRead(TASTER_PIN) == HIGH) {
if (digitalRead(TASTER_PIN) == LOW) {
delay(10); // warte ab bis sich der Taster beruhigt hat
// ist der Taster immer noch gedrückt?
if (digitalRead(TASTER_PIN) == LOW) {
iZaehler++;
Serial.println(iZaehler);
}
}
}
}
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung.
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Beiträge: 8.158
Themen: 143
Registriert seit: Sep 2013
11.01.2020, 03:28
(Dieser Beitrag wurde zuletzt bearbeitet: 11.01.2020, 03:30 von Uli.)
Ich rate mal ohne zu wissen, worum es geht: Tastendruck zieht den Pin auf "low"?
Also macht die Schleife nix, so lange der Taster nicht gedrückt ist. Wird der Taster länger als "delay10" (keine Ahnung wie lang das ist, weil Aufgabe nicht gelesen - 10ms? 10s?) gedrückt, wird der Zähler 1 erhöht und ausgegeben. Wenn Du den Taster dabei 1h gedrückt hältst kommt die Schleife nie über das "if high" (=false) hinaus, darum passiert nix. Erst nach dem loslassen wird der pin wieder high und die Schleife kann weitermachen.
Wenn ich jetzt gerade noch Lust hätte, die Aufgabe zu lesen, wäre ich wesentlich zuversichtlicher mit meiner Antwort
Edit: Zu langsam, Bernhard hat wohl von seinem Schiff das Nebelhorn ausgeborgt und das hupt immer bei einem Eintrag hier im Thread
Gruß,
Uli
Beiträge: 3.725
Themen: 235
Registriert seit: Dec 2015
Wunderbar erfasst was der Code macht Uli!
Bei der delay-Funktion sind es Millisekunden, hier also 10ms die der Controller auf nichts mehr von Außen reagiert! Wenn man weiter im Lektionstext liest, wird eine Alternative mit millis gezeigt, die den Controller nicht blockiert! Und genau das ist auch wichtig für die Hausaufgabe in der 3. Lektion! Einen "Echtzeitbetrieb" würde man nämlich mit den bisher gelernten delay nicht erreichen!
Ich denke die Hausaufgabe ist eine tolle Knobelaufgabe! Ein paar Kursteilnehmer sind schon auf dem richtigen Weg zur Lösung.
Ich bin gespannt wer sich auch an die Zusatzaufgaben traut. Die sind wie so eine kleine "Zwischenprüfung". Die Zusatzaufgaben kann man komplett mit dem Wissenstand aus den 3 Lektionen bewältigen!
Gruß Bernhard
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung.
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Beiträge: 8.158
Themen: 143
Registriert seit: Sep 2013
(11.01.2020, 03:50)Bernhard45 schrieb: Ich bin gespannt wer sich auch an die Zusatzaufgaben...
Ich hab schonmal meinen Arduino an den Laptop geklemmt UND mit allem zum Laufen gebracht. Ab Montag kann ich dann ja mal in Lektion1 reinschauen, Wochenende bin ich "gebucht" und werd mich auskurieren. Wenns nicht mehr zu durchschauen gibt, als ein paar geschachtelte Bedingungen... Aber so einfach wirds wohl nicht.
Gruß,
Uli
Beiträge: 1.115
Themen: 94
Registriert seit: Sep 2013
Ah ja, die fehlenden geschweiften Klammern haben mich verwirrt, muss man wissen.
Gruß Frank
sicheres Auftreten bei völliger Ahnungslosigkeit
Beiträge: 6.273
Themen: 325
Registriert seit: Oct 2014
11.01.2020, 22:21
(Dieser Beitrag wurde zuletzt bearbeitet: 11.01.2020, 22:22 von navi.)
Uli, es ist keine Aufgabe für neben bei. Die erste und zweite Lektion vielleicht ginge es, jetzt kommt es zu Auswirkung des Inputs auf Outputs, das ist für unerfahrenen Köpfe wie meinen eine unlösbare Aufgabe. Wo soll ich den verdamten Schalter reinplazieren?
Gruß,
Ivan
Beiträge: 3.725
Themen: 235
Registriert seit: Dec 2015
(11.01.2020, 22:21)navi schrieb: Wo soll ich den verdamten Schalter reinplazieren?
Softwaretechnisch oder Hardwaretechnisch?
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung.
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Beiträge: 3.725
Themen: 235
Registriert seit: Dec 2015
(11.01.2020, 22:26)Bernhard45 schrieb: (11.01.2020, 22:21)navi schrieb: Wo soll ich den verdamten Schalter reinplazieren?
Softwaretechnisch oder Hardwaretechnisch?
Ohne Antwort kann ich Dir nicht helfen!
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung.
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Beiträge: 6.273
Themen: 325
Registriert seit: Oct 2014
12.01.2020, 19:00
(Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2020, 19:03 von navi.)
Hallo, Bernhard,
Ich vermute, der Schalter kann nur zwischen GND des Controlers und gemeinsame Masse der Dioden geschaltet werden,.
Danach bin ich taub. Es muss ein“ If//wenn “kommen...
Gruß,
Ivan
Beiträge: 3.725
Themen: 235
Registriert seit: Dec 2015
12.01.2020, 20:30
(Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2020, 20:34 von Bernhard45.)
(12.01.2020, 19:00)navi schrieb: Ich vermute, der Schalter kann nur zwischen GND des Controlers und gemeinsame Masse der Dioden geschaltet werden,.
Hallo Ivan,
der Taster (Schalter) hat zwischen den Dioden gar nichts zu suchen! Was sollte er dort machen??? Die LEDs an und ausschalten????
Der Taster muss an einen eigenen Digital I/O Pin des Controllers!
Der Controller muss diesen Taster durch das Programm kennen und Ihn zyklisch abfragen und somit auf Anforderung des Grünsignals für die Fussgängerampel reagieren!
Kennst Du so eine Drückerampel für Fussgänger?
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung.
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Beiträge: 3.725
Themen: 235
Registriert seit: Dec 2015
12.01.2020, 20:41
(Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2020, 20:42 von Bernhard45.)
Hier nochmal der Wortlaut der Hausaufgabe 3:
Ändere die Ampelanlage aus der Lektion 2 so ab, dass die Fußgängerampel nur noch dann
auf grün schaltet, wenn eine Anforderung per Taster erfolgt. Die Anforderung für ein
Grünsignal der Fußgängerampel muss von der Anlage im Regelbetrieb in jedem
Schaltzustand und dauerhaft auch während eines Schaltzustandes angenommen und über
die serielle Schnittstelle protokolliert werden. (Echtzeitbetrieb)
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung.
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Beiträge: 202
Themen: 6
Registriert seit: Jul 2019
Hallo die Runde,
ich denke, die Tastenabfrage muss an der Stelle kommen, welches vom Programm am häufigsten durchlaufen wird oder?
Sven
Beiträge: 6.273
Themen: 325
Registriert seit: Oct 2014
Also, erstmal eins ist Fakt, dort wo ich erst vorgeschlagen habe, war es dumm - dann schaltet man mechanisch alle Lichter aus.
Also, der soll an einem als I/O definierte Pin - hardwaremäßig irrelevant. Dann ist der Platz im Programm gefragt interrupt und- Fußgängerampel an. Also es scheint auch er soll vor der erste Aufgabe für den Fußgängerampel sein.
Gruß,
Ivan
Beiträge: 189
Themen: 9
Registriert seit: Jul 2016
@Sven genauso sehe ich das auch, und im Programm ist das dann die Stelle mit delay() was ja ersetzt werden soll
@navi Nein, kein Interrupt soweit sind wir hier noch nicht, nur eine häufige Abfrage des Schalters.
Alfred
Beiträge: 202
Themen: 6
Registriert seit: Jul 2019
ja genau delay muss ersetzt werden, weil in den delay-Phasen ja der Arduino schläft und nicht mitbekommt, wenn der Schalter gedrückt wird.
Ich überlege, ob ich da mein Programm ändere oder Bernhards .
Sein s ist vielleicht besser geeignet zum Umbau weil er beim Entwerfen den Taster schon im Hinterkopf hatte.
Hmmmmm....
Sven
Beiträge: 6.273
Themen: 325
Registriert seit: Oct 2014
Ich habe auch die Bernhards Programm aufgeladen damit wir mit den gleichen arbeiten.
Gruß,
Ivan
Beiträge: 3.725
Themen: 235
Registriert seit: Dec 2015
12.01.2020, 22:29
(Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2020, 23:01 von Bernhard45.)
(12.01.2020, 21:46)AlfredG schrieb: @Sven genauso sehe ich das auch, und im Programm ist das dann die Stelle mit delay() was ja ersetzt werden soll
@navi Nein, kein Interrupt soweit sind wir hier noch nicht, nur eine häufige Abfrage des Schalters.
Alfred
Aufgabe richtig erfasst und guter Lösungsweg!
Mit einem Interrupt wäre die Sache natürlich sehr einfach lösbar, auch mit einer Scheduler-Bibliothek. Aber wir wollen das erstmal ohne solche (Fremd)Hilfen, rein "zu Fuss" - also selbst implementiert -erledigen.
Der Grund: Nicht immer und überall hat man den Luxus der "Arduino-Welt" und man muss mit weit weniger Befehlen und Funktionen auskommen. Hat man erstmal das Prinzip dahinter verstanden (auch darum geht es hier), hat man auf anderen Plattformen (oder Sprachen) schnell selbst eine Lösung entwickelt!
(12.01.2020, 22:05)Larry67 schrieb: Ich überlege, ob ich da mein Programm ändere oder Bernhards .
Sein s ist vielleicht besser geeignet zum Umbau weil er beim Entwerfen den Taster schon im Hinterkopf hatte.
Hmmmmm....
Meine Lösung ist nicht besser als viele Lösungen der Kursteilnehmer! Im Prinzip laufen doch alle unsere Lösungen nach dem gleichen Prinzip ab! Wenn Ihr jetzt das blöde delay ersetzt durch eine "eigene" Version, die es ermöglicht auch Tasteraktionen zwischen den Schaltzyklen zu erkennen (Nachweis des Tastendrucks durch Protokoll auf serieller Schnittstelle), dann ist die Aufgabe doch gelöst.
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung.
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Beiträge: 3.725
Themen: 235
Registriert seit: Dec 2015
12.01.2020, 22:30
(Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2020, 22:31 von Bernhard45.)
(12.01.2020, 21:32)navi schrieb: Also es scheint auch er soll vor der erste Aufgabe für den Fußgängerampel sein.
???? Hääää ????
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung.
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
|