Mal eine freche Nachfrage ;)

  • Wie immer liebe Grüße in die Welt aus DD von Antje,


    Nachdem wir uns nun auch schon ein Experimentierset mit einem 2 Zeiligen Punktmatrix Display dazugekauft haben, haben wr auch damit schon herum probiert.

    Jetzt mal eine Frage zum Programmlauf, damit das Hauptprogramm selber bei einer 'Input' Abfrage nicht zum stehen kommt.
    Es geht nicht um die Darstellung auf dem Display selber, dass funktioniert soweit alles.


    Code
    From OLEDDisplay import LEDDisplay
    import time
    
    Display = LEDDisplay
    Bildzeile1 = 'Hallo !'
    Display[1].print(BildZeile1) # Darstellung auf der oberen Displayzeile
    while True
        Bildzeile2 =time.strftime('%H:%M:%S') 
        Display[2].print(Bildzeile2) # Darstellung auf der unteren Displayzeile
        time.spleep(1)

    Weiterhin möchte ich noch erwähnen, dass bei der Verwendung des Befehls Display[Zeiilennummer].printr(Textzeile) die Zeile als immer wiederkehrender Lauftext angezeigt wird. Jetzt wollten wir den Text in der ersten Zeile um den via input  eingegebenen Namen erweitern. Z.B. 'Hallo, Antje !'.
    Das klappt soweit auch schon, nur bleibt in diesem Fall in der zweiten Zeile die Anzeige der aktuellen Uhrzeit stehen.
    Somit müsste man den Input-Befehl in einen Subprozess auslagern, damit die Uhrzeit weiter läuft.

    Kann mir das mal jemand an diesem Beispiel so erklären, dass ich das auch verstehe ? Oder würdet ihr lieber Aktuallisierung der Uhrzeit in einen Subprozess auslagern, und wie geht das ?
    Wie müsste man es machen, wenn man immer wieder ein neue Eingabe starten möchte, so dass man immer wieder einen neuen Namen eingeben kann, wenn der vorherige bereits einmal in der ersten Zeile angezeigt wurde ?

    Ich danke euch im voraus.

    Liebe Grüße
    Antje

  • Hallo,


    wenn du/ihr den Code mit der input-Funktion schon habt und mit diesem nicht weiter kommt, dann zeig uns bitte den aktuellen, vollständigen Code.

    Dann kann man da ansetzen wo ich du/ihr aufgehört habt und es wird nicht eine ganz andere Baustelle angefangen.


    Gewöhne dir am besten gleich an, das man in Python alle Namen klein_mit_unterstrich schreibt. Ausnahmen sind Konstanten, die schreibt man GANZ_GROSS und Klassen in CamelCaase-Schreibweise.


    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • Pi.Antje.DD Wenn Du Quelltext zeigst, dann bitte echten und nicht irgendetwas ausgedachtes. Da ist kein gültiges Python und selbst wenn man die offensichtlichen Syntaxfehler beheben würde, sieht der Code immer noch komisch bis falsch aus. Beispielsweise das `Display` einfach nur der Wert von `LEDDisplay` zugewiesen wird, statt ein Objekt zu erstellen, oder dass die erste Zeile den Index 1 und nicht 0 hat.

    Who is General Failure and why is he reading my hard disk?

  • Hallo und liebe Grüße aus DD von Antje,


    Danke an Dennis89 für deinen Hinweis. Auch wenn der aktuelle Code noch nicht an die von dir genannten Vorgaben vollständig angepasst ist, stelle ich ihn trotzdem mal hier rein.



    Hier ist nun das Problem, was auch für mich verständlich ist, dass die Ausgabe der aktuellen Zeit solange stoppt, bis man einen neuen Namen eingegeben hat.

    Deswegen hatte ich auch die Frage gestellt, wie würdet ihr es machen ? Die ständig aktuelle Zeitausgabe in einen Subprozess stecken, oder die Abfrage via input in einen eigenen Subprozess packen, und die Zeitausgabe im Hauptprogrammteil weiter laufen lassen ?

    Leider ist mein Fachenglisch nicht so gut, dass ich mir asu den vielen Readdocs selber herleiten kann, wie man so etwas programmieren sollte. Meine früheren Kenntnisse aus meiner Studienzeit mit C++ lassen sie hier nicht, bis kaum anwenden :saint:
    Und es ist auch zu lange her, denn ich bin oder war nach meinem Studium nie wirklich als Programmierer aktiv.

    Dennis89 nur zum Verständnis oder zur Erläuterung:
    Ich weiss, dass man in anderen Programmiersprachen einen paralell laufenden Subprozess starten kann, über den eine Abfrage gestartet wird, und das es auch möglich ist, diesen Subprozess vom Hauptprogramm auch wieder zu beenden, wenn diese Abfrage auf Grund der Programmstruktur nicht mehr benötigt wird, also der Subprozess gekillt wird, ohne das man laufende Prozessleichen hinterläßt.
    Python ist für mich, besser uns eine vollkommen neue und andere Programmiersprache, und wir freuen uns jedesmal, wenn es uns geliegt ein kleines Stück voran zu kommen.

    Das mit den Threads habe ich auch noch nicht vollständig verstanden, obwohl ich schon in einigen Forenbeiträgen nachgelesen habe. Aber mir wird nicht schlüssig, wie es ist, oder sich verhält, wenn der Subprozess zwar gestartet ist, aber weil keine Eingabe erfolgt, dieser auch noch keine Ergebnis zurückgeliefert hat. Ich möchte hier auch nicht meine, oder all unseren Irrweg posten, die immer einen laufenden Subprozess übrig ließen, den man anhand der CPU Last sehen konnte. Ich habe es soweit wohlmöglich auch falsch verstanden, weil ich immer noch auf der Suche nach einem wirklich gescheiten Handbuch auf Deutsch bin, dass der über Thread aus dem Modul threading gestartete Subprozess erst beendet ist, wenn dieser auch wirklich in seinem Programmlauf zum Abschluss kommt.

    Ich erwarte hier auch keinen vollständigen Python Lehrgang. :*
    PS: Mein Hintergrundgedanke war der, dass man zwar in Thonny mit dem Klick auf den STOPP Button alles klillen kann, dass jedoch für meine Begriffe keine saubere Löösung darstellt gestartete Subprozesse die noch laufen zu beenden.

    Ich würde meine Programme, auch wenn es nur experimentelle Spilereien sind, immer sauber beenden wollen, so dass ich diese auch sauber und Rückstandsfrei enden, wenn ich das Programm im Bash mit python3 programmname.py starte.

    Jetzt nervt mein Sohn schon wieder, weil er für die Schule ein Schulexperiment mit dem PI steuern will.

    Ich danke allen, ohne das ich euch zu etwas verpflichten will, wenn ihr mir hier etwas weiterhelfen könntet.

    Liebe Grüße aus DD von der Antje

    PS/EDIT
    Seit heute liegt schon das nächste Teil bei uns, ein PICO PI, da, was dazu genutzt werden soll, aus der Aufgabe mit einer auf Kork schwimmenden Magnetnadel in einer kleinen Wasserschüssel einen E-Motor zu machen, damit diese Nadel sich mit den drei vorhanden Spulen beginnt konstant zu drehen.

  • Hast du mal einen Link zu der importierten Bibliothek 'OLEDDisplay'? Ich kann die nicht finden.

    Eventuell kann ich dir dann versuchen weiter zu helfen.


    Bevor du dir Gedanken über Threads machst, solltest du meiner Meinung nach erst noch mals bei den Grundlagen bleiben und diese vertiefen. Nach welcher Anleitung ist der Code entstanden? Hast du auch ein Link zu dem Display?


    Versuche dieses Tutorial durchzuarbeiten ist zwar nicht auf deutsch, aber DeepL hilft da recht gut.


    In Zeile 7 fehlt ein Doppelpunkt

    In Zeile 11 verwendet man f-Strings und keine '+' um Strings zu erstellen, die Zeile würde so aussehen: neu_zeile = f'{bild_zeile1} {name_string} !'

    Zeile 12-15: Worin liegt der Sinn dieser 'if'-Abfrage? Egal ob die Bedingung erfüllt wird oder nicht, beides mal wird die gleiche Codezeile ausgeführt.



    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • Liebe abendliche Grüße aus DD von Antje,

    So nun überfordert ihr mich schon wieder :*

    Das Paket mit dem Display durfte sich mein Sohn bestellen. Dafür musste ich 112 € berappen. Aber das ist nicht die Grundlage. Ich weiss es nicht, wie das Paket mit OLEDDisplay in das PI kekommen ist.

    Entschuldigung Dennis89:love:
    Ja die Fehler sind mir nun auch aufgefallen, weil du mich unmittelbar darauf gestoßen hast.
    Das sind wohl offensichtlich Fehler bei meinem Versuch, mit dem PI und dann zum PC diese Programmzeilen via D&D hier einzufügen.

    Zeile 11 werde ich mir merken ! Danke :*

    In der IF Abfrage besteht der Unterschied, ob mit print oder printr der Unterschied, ob eine längere Zeile zum Lauftext wird oder nicht.
    Print heist oder bedeutet , dass die Zeile dargestellt wird. Aber wenn der Text länger als diese 0-15 Zeichen = 16 ist, bleibt die Anzeige stehen und zeigt nur noch die 15 letzten Zeichen an.
    Wird der Befehl printr benutzt, ist die übergebene Länge egal, und wird als ständig wiederkehrende Laufschrift ausgegeben.

    Das habe ich wohl richtig dargestellt ?

    Entschuldige falls ich hier auch scon wieder Fehler gemacht habe ;(

    Liebe Grüße aus DD

    Antje
    PS Ich Frage Sohnemann, woher die Datei hat die diese 'OLEDDisplay' hat


  • Sorry, aber Doppelpunkte verschwinden beim kopieren nicht einfach und Zeile 4 macht so keinen Sinn und das danach per Index auf dieses Objekt zugegriffen wird, macht Zeile 4 auch sehr unwahrscheinlich. Und dann sind da noch die Indexwerte 1 und 2 statt 0 und 1. Und das man dieses Modul über eine Googlesuche nicht findet ist auch komisch.


    Was ist das denn für ein Display?

    Who is General Failure and why is he reading my hard disk?

  • Hallo __blackjack__

    Ohne das ich jetzt Streit anfangen möchte, auch wenn man nicht alles markiert, dann kann es auch bei Cop& Paste zu Fehlern kommen, die ich voll auf meine Kappe nehme :*

    Wenn du mir erkkären würdest, wie man auf oder mit einem PI einen Bildschirmprint macht, würde ich dir gerne den ausgeführten Quellcode als Bildschirmprint beiheften.

    Was das für ein Display ist, fragtest du als nächstes. Keine Ahnung, es stammt aus einem SET, welches sich mein Sohn bestellen durfte, und welches auch er installiert hat. Leider habe ich nur am Wochenende Kontrolle darüber, was er an dem PI herumspielt. Homeschooling und ich gehe Arbeiten, da gibt es nunmal lücken. Er meinte nur, das er sich was aus dem Internet herausgesucht hat, was auch immer. Leider so muss ich sagen, sind alle Bestandteile dieses Experimentiersets in eine Sortierbox gewandert, wennd eise nichtangeschlossen sind. Und die Verpackung ist leider schon in der Tonne verschwunden.
    Würde es dir helfen, wenn ich dir einer Nummern auf dem Display hier einstelle ? Oder wie kann man, oder wo findet man diese Biblioteken auf dem PI ?

    Ich habe wirklich keine Ahnung, denn ich habe das PI mit einer vorinstallierten System geschenkt bekommen, und kenne mich mit dem System nicht wirklich aus.

    Meinen Kumpel will ich damit nicht nerven :P

    Aber das Display liegt jetzt schon wieder in der Sortierbox, und nun ist Sohnemann mit anderen Dingen damit beschäftigt.

    Damit möchte ich jetzt nicht weiter machen damit. Das Thema hat sich wohl von alleine erledigt, auch wenn mein Wissensdurst damit nicht gestillt ist.

    Ich danke allen

    Liebe Grüße aus DD

    Antje

  • Wenn du mir erkkären würdest, wie man auf oder mit einem PI einen Bildschirmprint macht, würde ich dir gerne den ausgeführten Quellcode als Bildschirmprint beiheften.

    Ich nehme für Screenshots scrot.

    scrot -d 5 -c -u nimmt z.B. ein fokusiertes Fenster nach Ablauf von 5 Sekunden auf, in denen du Zeit hast, das relevante Fenster anzuklicken.

  • Man kann auch einfach die Print (Druck) Taste drücken, dann landet das Bild im /home Verzeichnis des Benutzers. Ich habe die lxde-pi-rc.xml Datei wie folgt geändert/erweitert:

    Mit Strg + Druck kann ich dann ein Fenster, oder Ausschnitt wählen.

  • Hallo, liebe Grüße und letzter Nachtrag,

    Egal was ich hierzu bisher gefragt hatte, vergesst weitere Antworten. Warum oder weshalb mein PI nun nur noch eine buntes Rechteck, und dann einen blinkenden Cursorstrich anzeigt, konnte ich nicht ermitteln. Ich habe nun wieder bei meinem Kumpel angefragt, damit das Teil mal wieder startet. Was mein Sohn getrieben hat, dass der blinkende Cursor-Strich das letzte Lebenszeichen ist, konnte ich nicht ermitteln. Es sieht wohl so aus, dass wir wieder bei NULL anfangen.

    Schöne Grüße und an die Herren hier, morgen einen schönen Feiertag, ohne Regenwetter

    Antje