Geocaching & GPS location based games

Thema anzeigen - Reaktivlicht nur mit LED - Morsecode mit Pausen -


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 22 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste


Autor Nachricht
BeitragVerfasst: Do 3. Mär 2011, 12:33 
Offline
Geocacher

Registriert: Do 3. Mär 2011, 12:10
Beiträge: 17
Hallo zusammen,

habe schon die Suche benutzt, vieles gelesen und wenig verstanden.... Ich habe mir Reaktivlichter zusammengebaut, bei denen die LED zugleich die Lichtmessung vornimmt.

Programmiert gemäß dem Kochbuch. Funktioniert auch alles wunderbar, aber bezüglich des Morsens hätte ich gerne kleine Pausen zwischen den Zeichen/Buchstaben

z.b. ABC = "*_ _ ***_*_*"

Dies wird aber hintereinander geblinkt, hätte gerne zwischen den Buchstaben kurze Pausen, also "*_ pause _*** pause _*_*", damit man die einzelnen Buchstaben besser erkennen kann.

Mir fehlen total die Kenntnisse im Programmieren :-( wo muss ich ansetzen?

Vielen Dank für Eure Hilfe

62 Morsen:
63 Morse$ = "--***--***" 'String aus 10 Zeichen * = kurz - = lang
64 For A = 1 To 10 '10 Zeichen auslesen und auswerten
65 S$ = Mid(morse$ , A , 1) 'Teilstring auslesen
66 If S$ = "*" Then 'wenn kurz Blinken
67 Portb.3 = 1 'LED AN
68 Waitms 30 'kurz warten
69 Portb.3 = 0 'LED AUS
70 Waitms 1000 'lang warten
71 Else 'sonst lang blinken
72 Portb.3 = 1 'LED AN
73 Waitms 300 'lange warten
74 Portb.3 = 0 'LED AUS
75 Waitms 1000 'lang warten
76 End If
77 Next A
78 Return


Nach oben
 Profil  
 
BeitragVerfasst: Do 3. Mär 2011, 16:06 
Offline
Geomaster

Registriert: Fr 25. Jun 2010, 13:13
Beiträge: 606
Schnittlauchmann hat geschrieben:
[...]
hätte gerne zwischen den Buchstaben kurze Pausen, also "*_ pause _*** pause _*_*", damit man die einzelnen Buchstaben besser erkennen kann.

Mir fehlen total die Kenntnisse im Programmieren :-( wo muss ich ansetzen?


Mir war schon vorher klar, daß Baskom allergrottigeste Schrottsoftware ist, aber diesen unstrukturierte Spaghetticode kann ein Anfänger auch nicht verstehen.

Hier das ganze mal bisschen strukturiert, dann verstehst Du vielleicht, wo man was einbauen muss:

Code:
Morsen:
    Morse$ = "--***--***" 'String aus 10 Zeichen * = kurz - = lang
    For A = 1 To 10 '10 Zeichen auslesen und auswerten
        S$ = Mid(morse$ , A , 1) 'Teilstring auslesen
        If S$ = "*"
        Then 'wenn kurz Blinken
            Portb.3 = 1 'LED AN
            Waitms 30 'kurz warten
            Portb.3 = 0 'LED AUS
            Waitms 1000 'lang warten
        Else 'sonst lang blinken
            Portb.3 = 1 'LED AN
            Waitms 300 'lange warten
            Portb.3 = 0 'LED AUS
            Waitms 1000 'lang warten
        End If
    Next A
Return

Die Routine wandert durch den String "Morse$" und testet jedes Zeichen ab. Wenn es ein "*" ist, wird die LED 30ms lang eingeschaltet und dann 1000ms ausgeschaltet. Das soll dann ein Punkt sein. Bei jedem andern Zeichen wird die LED 300ms lang eingeschaltet und dann 1000ms lang ausgeschaltet. Danach springt die Schleife sofort zum nächsten Zeichen, und da fehlt Deine Pause.

Also: Vor das "Next A" und hinter das "End If" eine Zeile "Waitms 1000" oder so einfügen, das ist dann die Pause zwischen den Zeichen.

Wenn Du Dich da eh schon verkünstelst, kannst Du gleich richtigen Morsecode draus machen:

* Ein Strich ist dreimal so lange wie ein Punkt.
* Die Pausen innerhalb eines Zeichens ist so lang wie ein Punkt.
* Die Pause am Ende eines Zeichens ist so lange wie drei Punkte
* Die Pause zwischen zwei Worten ist sieben Punkte lang

Einfach die "Waitms" anpassen, z.B. Punkt 100ms und Strich 300. Die Pause nach dem Zeichen auch 300ms.

Gruß MaJa


Nach oben
 Profil  
 
BeitragVerfasst: Do 3. Mär 2011, 16:51 
Offline
Geocacher

Registriert: Do 3. Mär 2011, 12:10
Beiträge: 17
Hallo Maja,

vielen Dank! Ich glaube ich habe es kapiert um mir 100% sicher zu sein, kurz noch eine Frage

Morse$ = "--***--***"

Verstehe ich das dann richtig dass mit der "Then" und "Else" Abfrage jeder einzelne _ oder * abefragt wird und es dann wieder von vorne anfängt, bis die Reihe "Morse$" zu ende ist?

Wenn ja, mach ich nen Luftsprung :-)


Nach oben
 Profil  
 
BeitragVerfasst: Do 3. Mär 2011, 17:42 
Offline
Geomaster

Registriert: Fr 25. Jun 2010, 13:13
Beiträge: 606
Schnittlauchmann hat geschrieben:
Morse$ = "--***--***"

Verstehe ich das dann richtig dass mit der "Then" und "Else" Abfrage jeder einzelne _ oder * abefragt wird und es dann wieder von vorne anfängt, bis die Reihe "Morse$" zu ende ist?


Yep. Ist aber bisschen doof programmiert, weil man auch die Länge des Strings "Morse$" bestimmen und die Schleife über diese Länge rennen lassen könnte. Dadurch könnte man den String länger oder kürzer machen, ohne den Rest des Programms anfassen zu müssen. Kann sein, daß Bascom das aus Platzgründen nicht kann.

Martin


Nach oben
 Profil  
 
BeitragVerfasst: Do 3. Mär 2011, 20:29 
Offline
Geocacher

Registriert: Do 3. Mär 2011, 12:10
Beiträge: 17
Hallo Martin,

vielen Dank auch Dir.

Allerdings wollte ich jetzt gerade loslegen mit dem Programmieren und da ist mir jetzt noch aufgefallen, dass ja nach jedem Zeichen jetzt eine Pause ist.

Allerdings brauch ich ja erst nach (siehe Beispiel ABC) *_ pause _*** pause _*_* :/

:hilfe:

Also müsste ich noch ein Zeichen für Pause definieren und es in den String einbauen?


Nach oben
 Profil  
 
BeitragVerfasst: Do 3. Mär 2011, 20:57 
Offline
Geocacher
Benutzeravatar

Registriert: Di 28. Sep 2010, 21:39
Beiträge: 243
Wohnort: 56812
jepp, richtig interpretiert. es müßte ein extra Zeichen integreiert werden das die Pause definiert. Wäre dann aber eine 2te IF Bedingung und ich bin mir ncit ganz sicher ob das mit Bascom klappt; muss das mal austesten.

Nebenbei wie viele Zeichen willst du denn insgesamt morsen?
Je nach Anzahl wäre es u.U. einfacher die einzeln mit An aus zu programmieren.


Nach oben
 Profil  
 
BeitragVerfasst: Do 3. Mär 2011, 21:57 
Offline
Geomaster

Registriert: Fr 25. Jun 2010, 13:13
Beiträge: 606
Schnittlauchmann hat geschrieben:
Allerdings wollte ich jetzt gerade loslegen mit dem Programmieren und da ist mir jetzt noch aufgefallen, dass ja nach jedem Zeichen jetzt eine Pause ist.

Allerdings brauch ich ja erst nach (siehe Beispiel ABC) *_ pause _*** pause _*_* :/

:hilfe:

Also müsste ich noch ein Zeichen für Pause definieren und es in den String einbauen?


Ja. Habe eben gesehen, daß Bascom das Switch-Statement kann.

Code:
SELECT CASE Variable
  CASE wert1:
  CASE wert2:
  CASE ELSE
END SELECT


In Deinem Fall statt des ganze IF S$... END IF etwas in der Art

Code:
SELECT CASE S$
  CASE "*":
     [Der Code, der hinter dem IF steht]
  CASE "_":
     [Code, der jetzt hinter ELSE steht]
  CASE ELSE
     [ Pause abwarten]
END SELECT


In Deinem String definierst Du irgendwas anderes (z.B. !) als Pause.
MaJa/Martin


Nach oben
 Profil  
 
BeitragVerfasst: Do 3. Mär 2011, 22:42 
Offline
Geocacher

Registriert: Do 3. Mär 2011, 12:10
Beiträge: 17
Vielen Dank!!!!

Das hat mir wirklich sehr geholfen.

Werde mich morgen gleich an die Arbeit machen, der Nachtcache kann kommen :-)

Gruß :^^:


Nach oben
 Profil  
 
BeitragVerfasst: Fr 4. Mär 2011, 20:37 
Offline
Geocacher

Registriert: Do 3. Mär 2011, 12:10
Beiträge: 17
Abschließend:

Es hat wunderbar geklappt, ich habe meine Pausen dort, wo ich sie haben will!

:gott:

Danke


Nach oben
 Profil  
 
BeitragVerfasst: Sa 5. Mär 2011, 13:42 
Offline
Geomaster
Benutzeravatar

Registriert: Do 24. Sep 2009, 15:55
Beiträge: 690
Wohnort: LDK
Um Platz in RAM und Flash zu sparen ermpfehle ich dringend, Morsezeichen in Bytes und nicht in Strings abzulegen. Ein 8bittiges Byte drängt sich geradezu auf für 5 Symbole und 3 Längenbits, ich glaube, die Idee hab ich sogar hier gesehen und dann auch in meiner Implementierung im Microchip-Assembler übernommen. Falls jemand noch eine Codetabelle guttenbergen will:
Code:
; +--------------------------------------------------------+
; |     Vordefinierte Zeichen zur Morse-Ausgabe auf PC7    |
; +--------------------------------------------------------+

; Definition:
; B7..B3= Auszugebendes Zeichen, linksbündig, links rausschiebend, 0=kurz, 1=lang
; B2..B0= Anzahl genutzer Symbole im Zeichen

MOR_A   = b'01000010' ; .-      2 Symbole
MOR_B   = b'10000100' ; -...    4 Symbole
MOR_C   = b'10100100' ; -.-.    4 Symbole
MOR_D   = b'10000011' ; -..     3 Symbole
MOR_E   = b'00000001' ; .       1 Symbol
MOR_F   = b'00100100' ; ..-.    4 Symbole
MOR_G   = b'11000011' ; --.     3 Symbole
MOR_H   = b'00000100' ; ....    4 Symbole
MOR_I   = b'00000010' ; ..      2 Symbole
MOR_J   = b'01110100' ; .---    4 Symbole
MOR_K   = b'10100011' ; -.-     3 Symbole
MOR_L   = b'01000100' ; .-..    4 Symbole
MOR_M   = b'11000010' ; --      2 Symbole
MOR_N   = b'10000010' ; -.      2 Symbole
MOR_O   = b'11100011' ; ---     3 Symbole
MOR_P   = b'01100100' ; .--.    4 Symbole
MOR_Q   = b'11010100' ; --.-    4 Symbole
MOR_R   = b'01000011' ; .-.     3 Symbole
MOR_S   = b'00000011' ; ...     3 Symbole
MOR_T   = b'10000001' ; -       1 Symbol
MOR_U   = b'00100011' ; ..-     3 Symbole
MOR_V   = b'00010100' ; ...-    4 Symbole
MOR_W   = b'01100011' ; .--     3 Symbole
MOR_X   = b'10010100' ; -..-    4 Symbole
MOR_Y   = b'10110100' ; -.--    4 Symbole
MOR_Z   = b'11000100' ; --..    4 Symbole

MOR_0   = b'11111101' ; -----   5 Symbole (Ziffer Null)
MOR_1   = b'01111101' ; .----   5 Symbole
MOR_2   = b'00111101' ; ..---   5 Symbole
MOR_3   = b'00011101' ; ...--   5 Symbole
MOR_4   = b'00001101' ; ....-   5 Symbole
MOR_5   = b'00000101' ; .....   5 Symbole
MOR_6   = b'10000101' ; -....   5 Symbole
MOR_7   = b'11000101' ; --...   5 Symbole
MOR_8   = b'11100101' ; ---..   5 Symbole
MOR_9   = b'11110101' ; ----.   5 Symbole

; Morse-"Sonderzeichen"

MOR_KA   = b'10101101' ; -.-.-   5 Symbole ("Spruchanfang")
MOR_AR   = b'01010101' ; .-.-.   5 Symbole ("Spruchende")
MOR_BT   = b'10001101' ; -...-   5 Symbole ("Pause")
MOR_VE   = b'00010101' ; ...-.   5 Symbole ("Verstanden")

MOR_gleich = b'10001101' ; -...- 5 Symbole ("[mathematisch] ist gleich")
MOR_plus   = b'01010101' ; .-.-. 5 Symbole ("[mathematisch] plus")
MOR_slash  = b'10010101' ; -..-. 5 Symbole ("Schrägstrich")

; einzige lebensnotwendige Ausnahme mit mehr als 5 Symbolen
; und daher hardcodiert als "alles, was 7 Symbole hat" in der Sw:

MOR_leer   = b'00000111' ; 7 Symbole gar nichts ("Leerzeichen zwischen Worten")


chrysophylax.

_________________
Bekennender Warmduscher und DNF-Logger. Nebenbei-Spielprojekt: Geocaching Magnetbake / Reaktivlicht im Eigenbau.
Bild Bild


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 22 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Impressum