Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
FAQ zum Einsteigerkurs uC-Programmierung
(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")
Zitieren
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
Zitieren
(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")
Zitieren
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 Wink

Edit: Zu langsam, Bernhard hat wohl von seinem Schiff das Nebelhorn ausgeborgt und das hupt immer bei einem Eintrag hier im Thread Wink
Gruß,
Uli
Zitieren
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")
Zitieren
(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
Zitieren
Ah ja, die fehlenden geschweiften Klammern haben mich verwirrt, muss man wissen.

Gruß Frank
sicheres Auftreten bei völliger Ahnungslosigkeit
Zitieren
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
Zitieren
(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")
Zitieren
(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")
Zitieren
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
Zitieren
(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")
Zitieren
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")
Zitieren
Hallo die Runde,
ich denke, die Tastenabfrage muss an der Stelle kommen, welches vom Programm am häufigsten durchlaufen wird oder?

Sven
Zitieren
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. KopfWand
Gruß,
Ivan
Zitieren
@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
Zitieren
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
Zitieren
Ich habe auch die Bernhards Programm aufgeladen damit wir mit den gleichen arbeiten.
Gruß,
Ivan
Zitieren
(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")
Zitieren
(12.01.2020, 21:32)navi schrieb: Also es scheint auch er soll vor der erste Aufgabe für den Fußgängerampel sein. KopfWand

???? 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")
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Einsteigerkurs Microcontrollerprogrammierung Bernhard45 13 9.925 23.05.2020, 23:55
Letzter Beitrag: Bernhard45

Gehe zu: