L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo zusammen,
    die folgenden Zeilen kann man zwar nicht als Projekt definieren (bitte Thema ggf. verschieben), aber es gab im Forum immer mal wieder eine "Hausaufgabe" bzw. ein kleines (Schul)Projekt, das man mit dem Pi machen sollte ...

    Dies hier ist eine einfache Morse-Station ('nackt' ohne irgendwelche Gehäuse und Schnickschnack, etc.), bestehend aus einem Skript und einer simplen Schaltung auf dem Steckbrett.

    Schaltung:
    [x] 2 Jumperkabel (m-f)
    [x] LED
    [x] Steckbrett
    [x] 270 Ohm Widerstand

    Anordnung:
    GPIO1 => Jumperkabel => widerstand => Anode => Kathode => Jumperkabel => GPIO10

    Skript:

    Spoiler anzeigen

    so long
    Perlchamp

    --- wer lesen kann, ist klar im Vorteil ---

    --- man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug ---

    --- der Fortschritt der Menschheit ist das Werk der Unzufriedenen ---

    --- Freude entsteht aus Mangel an Information ---

    --- Scheiße ist, wenn der Furz etwas wiegt ---

    Einmal editiert, zuletzt von Perlchamp (26. Mai 2014 um 22:03)

  • Code
    ...   .   ....   .-.      --.   ..-   -
    
    
    ..-.   .-.   .-   --.   -     ...   ..   -.-.   ....     -.   ..-   .-.     .--   .   .-.     .   ...     -...   .   ....   .   .-.   .-.   ...   -.-.   ....   -


    :thumbs1:

    Gruß, mmi

  • Hallo zusammen,
    ich bin Anfänger, High-Low sagt mir jetzt mal nichts(kommt aber noch). Sleep ist nötig, um die Leuchtzeiten (Länge) und Pausen zu regulieren, aber wem sage ich das...
    Mich interessiert eher, ob mein Code gut geschrieben ist, oder ob man da einiges besser machen kann (ohne Funktionserweiterung), damit ich mir keine "falschen" Dinge aneigne. Es kann jeder mit dem Code machen, was er will ... und daß das Ganze ausbaufähig ist, ist klar, sollte auch so sein ...

    so long
    Perlchamp

    --- wer lesen kann, ist klar im Vorteil ---

    --- man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug ---

    --- der Fortschritt der Menschheit ist das Werk der Unzufriedenen ---

    --- Freude entsteht aus Mangel an Information ---

    --- Scheiße ist, wenn der Furz etwas wiegt ---


  • Morsen ohne Sound ist doch langweilig ...

    Anstelle von sleep einen GPIO High und Low schalten, einen Transistor und einen Lautsprecher dran,
    und schon wirkt das viel besser :D

    Das geht aber viel einfacher:

    Einen Buzzer (WICHTIG: mit eingebauter Elektronik) direkt an einen GPIO anschliessen. So ein Buzzer braucht nur wenige mA und funktioniert bereits ab 3V laut genug.

    Zum Beispiel sowas:
    http://www.ebay.de/itm/5x-Piezo-Summer-12V-2-20V-Buzzer-Piepser-Pieper-Signalgeber-3V-5V-6V-9V-15V-/121283070141?pt=LH_DefaultDomain_77&hash=item1c3d08c8bd

    Unabhängig vom Morsen auch für andere Anwendungen als einfacher akustischer Alarm brauchbar. Habe grundsätzlich an jedem meiner Pi's einen.

    Gruß, mmi


    ich bin Anfänger ...
    ... Mich interessiert eher, ob mein Code gut geschrieben ist ...


    Auf jeden Fall hast Du das notwendige feeling für die Logik. Kleinigkeiten kann man überall kritisieren, aber im Wesentlichen finde ich Deinen Code, insbesondere für einen "Anfänger", prima! :thumbs1:


  • Mich interessiert eher, ob mein Code gut geschrieben ist, oder ob man da einiges besser machen kann (ohne Funktionserweiterung), damit ich mir keine "falschen" Dinge aneigne. Es kann jeder mit dem Code machen, was er will ... und daß das Ganze ausbaufähig ist, ist klar, sollte auch so sein ...

    Ich muss gestehen, dass ich sowohl RPi, als auch Python Neuling bin, aber grundsätzlich bissl was zu programmieren sagen kann (Hauptberuflich in Delphi für Windows).
    Es gibt das schöne Paradigma "DRY instead of WET" (Dont Repeat Yourself instead of Write Everything Twice) und dein Code beinhaltet direkt eine Stelle, welche man gut trocken legen kann:

    Code
    GPIO.output(10, False)
    sleep(dit oder dat)
    GPIO.output(10, True)
    sleep(dit)


    Dies kann man perfekt in eine Methode auslagern, welche die Wartezeit im ersten sleep einfach als Parameter übergeben bekommt.

    Insgesamt ist das natürlich bissl Korinthenkackerei, wo man immer etwas over engineering kann. Bei den meisten (simplen) Skripten lohnen sich solche Paradigmen überhaupt nicht umzusetzen, aber sobald man mal richtig programmieren will, würde ich jedem ans Herz legen sowas umzusetzen, ansonsten tritt das einem bei der Fehlersuche oder Wartung zurück in den Hintern.
    Du hast ja nach Verbesserungen gefragt, gerade für Lernzwecke.

  • Hm ich erinner hierbei nur mal an mein Fun-Script welches ich vor Jahrzehnten für die OK LED des RaspberryPI's geschrieben hatte - dann könnte man sich auch die Geschichte mit nem Steckbrett usw schenken :D

    Das müsste man nur ein kleines bisschen anpassen um auch andere Sachen als die IP zu "morsen": IP über RaspberryPI's OK led blinkend anzeigen

  • Du fragst nach Feedback zu Deinem kleinen Morseprogramm - hier ist meiner :) .

    1) Konstanten am Anfang definiert - sehr gut
    2) Sprechende Variablennamen verwendet - sehr gut
    3) Das if/then/else mit den ganzen Morsezeichen würde ich etwas anders schreiben. Dabei erschlägst Du auch das was mezen beschrieben hat: Dieselbe Funktionalität in Funktionen auslagern. Vor allen Dingen auch den Fall bearbeiten, falls etwas nicht erwartetes gelesen wird.
    Beispielsnipet:


    4)

    Code
    for buchstabe in text:
            if buchstabe in morseCode:
                morseText += morseCode[buchstabe] + '/'


    Ich wuerde einen else Zweig einbauen. Entweder ist das ein Fehler der gelogged werden sollte oder irgendwie anders behandelt werden sollte.
    5)

    Code
    print("Ende")
    
    else:
        print("Ende")


    Ich wuerde den print nur einmal vornehmen z.B.

    Code
    print("Ende")


    6)

    Code
    text = text.lower()
        text = text.replace("\n", " ")
        text = text.replace("ch", "C")
        text = text.replace("/", "S")
        text = text.replace("-", "M")


    Das ist sehr leserlich (nicht alles in einer Zeile). Das kann man beliebig kompliziert machen (Siehe z.B. hier aber das wuerde ich nur angehen wenn es dringende Gruende dafuer gibt (z.B. Performance Probleme))
    7)

    Code
    except:
        print("die Datei", PFAD, "konnte nicht geöffnet werden.")


    Bei diesem Programm ist das sicherlich Overkill - aber wenn Du ein groesseres Programmpaket hast wuerde ich immer gefangene Exceptions irgendwo loggen.

  • Hallo zusammen,
    zuerst einmal Danke für die zahlreichen Antworten !

    meigrafd:
    mit bash habe ich es nicht so, da auch Linuxanfänger. Ich möchte erst einmal in Python einigermaßen zurechtkommen. By the way; ich kann auch die IP-Adresse morsen, müßte man halt vorher auslesen (ich habe eine statische Adressvergabe :) ) ...
    ich könnte das Ganze auch in einem TK-Fenster ausgeben und dabei jeweils die Hintergrundfarbe ändern, also ohne LED. Aber ohne Bastelei würde das der Philosophie des Pi auch nicht entsprechen ...

    framp:
    hinter deinem Code blicke ich noch nicht so durch, da ja alle Funktionen im Grunde "nur" print-Anweisungen sind ...
    Meine Debug-Funktion ist im Grunde gar keine (if buchstabe in morsecode ...), hier aber ausreichend, denn wenn Zeichen nicht im Morsealphabeth vorhanden sind, kann man sie auch nicht morsen; diese werden dann einfach ignoriert und nichts notiert (das Morsealphabet ist eben nun mal begrenzt :) ) ...
    du stehst auf Tabellen, oder ?
    aber die exceptions zu loggen ist gut, muß ich mir merken ...

    mezen:
    da mach ich mich mal dran ... doppelt schreiben ist Mist - das schreibe ich mir mal auf die Fahne !

    @mmi:
    sicherlich ist es PLUS Ton auch eine (gute) Erweiterung. Spätestens nach dem 4. Wort würde ich es persönlich abstellen, da es mich nerven würde (ist eben mein Problem - geräuschempfindlich) ...
    hast du deinen Morsetext einmal übersetzt - sind Fehler drin (u.a. ch) ;)

    Ich werde mich dann mal nächste Woche wieder dransetzen ...

    Vielen Dank nochmals

    so long
    Perlchamp

    --- wer lesen kann, ist klar im Vorteil ---

    --- man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug ---

    --- der Fortschritt der Menschheit ist das Werk der Unzufriedenen ---

    --- Freude entsteht aus Mangel an Information ---

    --- Scheiße ist, wenn der Furz etwas wiegt ---


  • sicherlich ist es PLUS Ton auch eine (gute) Erweiterung. Spätestens nach dem 4. Wort würde ich es persönlich abstellen, da es mich nerven würde (ist eben mein Problem - geräuschempfindlich) ...


    Schaust Du Dir das Blinken an? *räusper*
    Ich lasse mir ja nicht ganze Textdateien in die Ohren piepsen. Wenn ich beispielsweise an den Beginn einer TV-Sendung erinnert werden möchte, kommt kurz vor Beginn z.B. "tv tv tv wdr". Den eigentlich hässlichen Piepston hört man recht weit und durchdringend, dafür finde ich es ideal. Und noch ein Vorteil: Es versteht nicht jeder. ;)

    Zitat von Perlchamp


    hast du deinen Morsetext einmal übersetzt - sind Fehler drin (u.a. ch) ;)


    Ja klar weiß ich, was ich alter "CWist" gegeben habe. Für "ch" z.B. "-.-./...." - was ist daran falsch? Ich kann keinen Fehler entdecken.

    Gruß, mmi

  • Hallo zusammen,
    hier der neue Code:

    Spoiler anzeigen

    @alle:
    bitte 'Klugscheisser-Modus' an
    ein kleines Problemchen habe ich noch, aber das werde ich auch noch versuchen zu lösen (dabei handelt es sich um ein paar Morseregeln, die ich noch einbauen muß - guckt ihr HIER)

    @mmi:
    C = ---- , siehe :

    Code
    text = text.replace("ch", "C")


    deswegen u.a. auch :

    Code
    text = text.lower()
    Zitat

    Schaust Du Dir das Blinken an? *räusper*


    => es gibt Leute, die sich stundenlang auf YouTube eine rennende Katze anschauen ;) - ich gehöre definitiv nicht zu dieser Gilde. Nein ich schaue mir das Blinken nicht ständig an, da ich den Code sowieso nicht in dieser Geschwindigkeit kontrollieren könnte. Aber für Marine-Anwärter wäre das Proggi schon etwas
    - zum Üben und Lernen ...
    === EDIT 2 ===

    Zitat


    Wenn Du es so professionell betrachtest: Gut wäre noch, wenn in Deinem Programm die Geschwindigkeit in "Zeichen/Minute" angegeben werden könnte. Aufgrund der unterschiedlichen zeitlichen Längen der Zeichen schwierig, aber ich denke, dafür gibt es irgendeine Regel. Denn in den Prüfungen wird man z.B. "60 Zeichen / Min. Geben und Hören" verlangen.


    => ist doch geregelt (Quelle Wikipedia - Link oben):

    Zitat


    Der Code verwendet drei Symbole, die Punkt ( · ), Strich (−) und Pause ( ) genannt werden, gesprochen als dit, dah (oder doh) und „Schweigen“. Die Länge eines Dit bestimmt die Geschwindigkeit, mit der gesendet werden kann, und ist die grundlegende Zeiteinheit.[...]Genauer gilt Folgendes:
    Ein Dah ist dreimal so lang wie ein Dit.
    Die Pause zwischen zwei gesendeten Symbolen ist ein Dit lang.
    Zwischen Buchstaben in einem Wort wird eine Pause von der Länge eines Dah (oder drei Dits) eingeschoben.
    Die Länge der Pause zwischen Wörtern entspricht sieben Dits.


    dazu im Code:

    Code
    dit  = 0.2       #hier kann die Morsegeschwindigkeit eingestellt werden
    dah  = dit * 3
    kurz = dit * 2
    lang = dit * 6


    => da nach einem Zeichen immer eine Pause folgt(dit), haben 'kurz' 2dits und 'lang' 6dits anstelle von 3 bzw. 7 dits
    === edit2 ende ===

    === EDIT 3 ===

    Zitat


    [...]falsch ist deswegen meine lange Version aber nicht.


    => hmm... doch
    === edit3 ende ===

    ... und vielen Dank im Voraus

    === EDIT ===
    ein Bug im Forum-Editor ? ('Alles markieren' im Code-Abschnitt) => lag am midori
    === edit ende ===

    so long
    Perlchamp

    --- wer lesen kann, ist klar im Vorteil ---

    --- man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug ---

    --- der Fortschritt der Menschheit ist das Werk der Unzufriedenen ---

    --- Freude entsteht aus Mangel an Information ---

    --- Scheiße ist, wenn der Furz etwas wiegt ---

    Einmal editiert, zuletzt von Perlchamp (26. Mai 2014 um 22:05)

  • Code
    text = text.replace("ch", "C")


    OK - das sind für die Berufsfunker die besonderen Kürzel - falsch ist deswegen meine lange Version aber nicht.

    Wenn Du es so professionell betrachtest: Gut wäre noch, wenn in Deinem Programm die Geschwindigkeit in "Zeichen/Minute" angegeben werden könnte. Aufgrund der unterschiedlichen zeitlichen Längen der Zeichen schwierig, aber ich denke, dafür gibt es irgendeine Regel. Denn in den Prüfungen wird man z.B. "60 Zeichen / Min. Geben und Hören" verlangen. ;)

    Gruß, mmi

  • framp:
    hinter deinem Code blicke ich noch nicht so durch, da ja alle Funktionen im Grunde "nur" print-Anweisungen sind ...

    Ist nur als Beispielcode gedacht. Da kommt dann der fuer die jeweiligen Morsezeichen spezielle Code rein. Z.B. könntest Du ja die Vokale in einer anderen Frequenz piepen lassen als die Konsonanten.

    Zitat

    ...du stehst auf Tabellen, oder ?

    Tabellen, richtig strukturiert, sind leichter zu lesen als if/elif/elif/... Code. Hat natuerlich auch damit zu tun, dass es in Python kein switch Statement gibt.

    Zitat

    aber die exceptions zu loggen ist gut, muß ich mir merken ...

    Auch else Zweige, die nicht auftreten sollten. Das hilft spaeter sehr, wenn Benutzer des Scripts Fehler oder Abstuerze melden.

  • Hallo zusammen,
    @alle:
    1.
    Danke nochmals für eure Vor-/Ratschläge - super !
    Bitte weiterhin den "Klugscheisser-Modus" anlassen.
    2.
    Ich habe die Antworten auf eure Posts in meinem letzten Post reingequetscht (05:18)
    3.
    dies ist der aktuelle Code:

    so long
    Perlchamp

    --- wer lesen kann, ist klar im Vorteil ---

    --- man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug ---

    --- der Fortschritt der Menschheit ist das Werk der Unzufriedenen ---

    --- Freude entsteht aus Mangel an Information ---

    --- Scheiße ist, wenn der Furz etwas wiegt ---

    Einmal editiert, zuletzt von Perlchamp (27. Mai 2014 um 04:00)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!