Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- \ DECISION-TREE-IDEA.TXT as of 2025 March 31th
- : ALL ; \ EASY TO FORGET ;-)
- 27 value MORSEkeyPIN \ Bit value=8 Index finger (used as TOUCH Morse key "contact")
- \ Using a TOUCH PIN as morse-key input.
- \ Can be changed to a normal digital 0/1 input! See tips below.
- \ OBS: TOUCH support has to be added in USERWORDS.H
- \ and USERWORDS.H activated in .INO file. Here minimum content in USERWORDS.H :
- \ First remove this: "<REMOVE>" before adding to USERWORDS.H
- \ otherwise wuou will get at file not found warning :-)
- \ // Touch support added by Jan Langevad 2025-03-11
- \ #<REMOVE>include "esp32-hal-touch.h"
- \ #define USER_WORDS \
- \ Y(touchRead, n0 = touchRead(n0))
- 30 value LowThreshold \ TOUCH adjustment
- 68 value HighThreshold \ ----"-------
- 100 value UnitTime \ UnitTime(mS) = (1200/WPM) default "bit-time" until adjusted
- 12 value WPM \ WPM = (1200/UnitTime(mS)
- 0 value DownTime \ Key went down at MS-TICKS, timestamp
- 0 value UpTime \ Key went up at MS-TICKS, timestamp
- 0 value @¤ \ POSSIBLY NEXT CHAR TO PRINT
- 0 value @DOT \ Execute address IF WE RECEIVE A DOT
- 0 value @DASH \ Execute address IF WE RECEIVE A DASH
- 0 value Code.?
- \ Special Prosign values (Any random value above 255/a CHAR/byte could be used :-)
- \ See "Definition" of PROSIGNS: https://www.eucw.org/op/en/prosigns.html
- 301 value [KN]
- 302 value [AS]
- 303 value [BT]
- 304 value [AR]
- 305 value [SK]
- 306 value [SN]
- 307 value [KA]
- 308 value [SOS]
- \ TIMING/LENGTH INFORMATION FOR CORRECT/FORMAL MORSE:
- \ Dit length = 1 "Morse unit" / BitTime / UnitTime
- \ Dah length = 3 DITs
- \ Dit/Dah seperation 1 DIT time
- \ Char separation 3 DITs time
- \ Word separation 7 DITs time
- : WPM! ( n --- ) 1200 swap / is UnitTime ;
- : WPM? UnitTime 1200 swap / . ;
- INTERRUPTS \ vocabulary needed for setting PULLUP etc..
- : InitPINs
- \ 32 input pinmode \ default a boot
- \ 32 gpio_pullup_en ( PIN --- FLG )
- \ drop
- \ 27 input pinmode \ *** Use digital I/O rather than TOUCH ***
- \ 27 gpio_pullup_en
- \ 27 digitalread \ <----- use, see below ***
- 15 output pinmode \ used by Buzzer
- 4 output pinmode \ used by local clear low-power LED
- ;
- InitPINs \ <<<<<<<<<<<<<<<<<<<<<
- FORTH
- : Buzz-on high 15 pin ;
- : Buzz-off low 15 pin ;
- : LED-on high 4 pin ;
- : LED-off low 4 pin ;
- : 50%+ ( n --- n+50% ) 3 * 2 / ;
- : EndOfMorseCode? MS-TICKS UpTime -
- UnitTime 50%+ ( > UnitTime+50% / 1,5* / 50%+ )
- >
- ;
- : KeyDown? ( --- flg ) \ used by normal Morse-keyer
- MORSEkeyPIN touchread \ ANY INPUT PIN COULD BE USED
- LowThreshold < \ threshold has to be evaluated/adjusted
- ;
- \ : KeyDown? MORSEkeyPIN digitalread 0= ; ( --- flg ) \ Digital I/O version
- : KeyUp? MORSEkeyPIN touchread
- HighThreshold > \ threshold has to be evaluated/adjusted
- ;
- \ : KeyUp? MORSEkeyPIN digitalread ; ( --- flg ) \ Digital I/O version
- : Await-Key-Going-Up \ OBS: OR operator Keyboard entry (LOOP)
- begin 5 MS \ ???????? KILROY come back :-)
- KeyUp? \ await Key going up aganin
- Key? \ or operator keyboard entry seen?
- or
- until
- MS-TICKS is UpTime \ <<<<<<<< keep track of Key up time
- ;
- : case? ( n1 n2 -- n1 ff | tf ) \ from PoorMansCase.TXT by Klaus Schleisiek :-)
- over = dup IF nip THEN
- ;
- : .Prosign ( --- ) \ "Definition": https://www.eucw.org/op/en/prosigns.html
- @¤
- [KN] case? if ." [KN]" exit then
- [AS] case? if ." [AS]" exit then
- [BT] case? if ." [BT]" exit then
- [AR] case? if ." [AR]" exit then
- [SK] case? if ." [SK]" exit then
- [SN] case? if ." [SN]" exit then
- [KA] case? if ." [KA]" exit then
- [SOS] case? if ." [SOS]" exit then
- DROP ." [undocumented prosign]"
- ;
- DEFER [ResetExpectedChar] \ <<<<<<<<<<<<<<<<<<<<<<<<<<<<
- : Await-SpaceTime-or-Keydown
- begin MS-TICKS UpTime - \
- UnitTime 3 * > \ *********** KILROY IMPROVE TIMING!
- if \ SPACE -1 \ Make space char after a WORD PAUSE
- @¤ 256 < \ A NORMAL CHARACTER?
- IF @¤ EMIT \ <<<<<<<<<< PRINT THE MORSE SIGN!
- ELSE .Prosign
- THEN
- [ResetExpectedChar] \ ******************
- -1
- else 0
- then
- KeyDown?
- OR
- until
- ;
- \ ************** Let the tree grow here ******************************:
- : UpdateBranches ( char XT. XT- --- )
- IS @DASH \ NEXT BRANCH SPLIT IF A DASH/Dah/- COMES IN NEXT
- IS @DOT \ NEXT BRANCH SPLIT IF A DOT/Dit/. COMES IN NEXT
- IS @¤ \ CHAR TO PRINT IF SIGN "TIMES-OUT" = IS COMPLETED
- ;
- : @] [CHAR] ¤ IS @¤ ; \ ILLEGAL TREE BRANCH/SIGN RECEIVED (or an error in the tree ;-)
- \ *** At tree-top here ***:
- \ PRINT-OUT . - <PTR TO BRANCHES MORSECODE
- \ ------------------------------------------------------------
- \ SPECIAL signs:
- : @SOS [SOS] ['] @] ['] @] UpdateBranches ; ( ...---... ) \ **Prosign**
- : @3/\\ [CHAR] ¤ ['] @SOS ['] @] UpdateBranches ; ( ...---.. )
- : @3/\ [CHAR] ¤ ['] @3/\\ ['] @] UpdateBranches ; ( ...---. )
- : @3/ [CHAR] ¤ ['] @3/\ ['] @] UpdateBranches ; ( ...--- )
- : @. [CHAR] . ['] @] ['] @] UpdateBranches ; ( .-.-.- )
- : @, [CHAR] , ['] @] ['] @] UpdateBranches ; ( --..-- )
- : @? [CHAR] ? ['] @] ['] @] UpdateBranches ; ( ..--.. )
- : @: [CHAR] : ['] @] ['] @] UpdateBranches ; ( ---... )
- : @; [CHAR] ; ['] @] ['] @] UpdateBranches ; ( -.-.-. )
- : @- [CHAR] - ['] @] ['] @] UpdateBranches ; ( -....- )
- : @/ [CHAR] / ['] @] ['] @] UpdateBranches ; ( -..-. )
- : @() [CHAR] ( ['] @] ['] @] UpdateBranches ; ( -.--.- )
- : @" [CHAR] " ['] @] ['] @] UpdateBranches ; ( .-..-. )
- : @' [CHAR] ' ['] @] ['] @] UpdateBranches ; ( .---. )
- : @_ [CHAR] _ ['] @] ['] @] UpdateBranches ; ( ..--.- )
- : @@ [CHAR] @ ['] @] ['] @] UpdateBranches ; ( .--.-. ) \ NEWER SIGN :-)
- \ NORMAL CHARACTERS (INCLUDING THE 3 Danish: Æ Ø Å )
- : @Å [CHAR] Å ['] @@ ['] @] UpdateBranches ; ( .--.- ) \ Denmark
- : @3 [CHAR] 3 ['] @] ['] @3/ UpdateBranches ; ( ...-- )
- : @4 [CHAR] 4 ['] @] ['] @] UpdateBranches ; ( ....- )
- : @5 [CHAR] 5 ['] @] ['] @] UpdateBranches ; ( ..... )
- : @2 [CHAR] 2 ['] @] ['] @] UpdateBranches ; ( ..--- )
- : @U-. [CHAR] ¤ ['] @? ['] @_ UpdateBranches ; ( ..--. )
- : @Æ. [CHAR] ¤ ['] @] ['] @. UpdateBranches ; ( .-.-. )
- : @1 [CHAR] 1 ['] @] ['] @] UpdateBranches ; ( .---- )
- : @L- [CHAR] L ['] @" ['] @] UpdateBranches ; ( .-..- )
- : @0 [CHAR] 0 ['] @] ['] @] UpdateBranches ; ( ----- )
- : @9 [CHAR] 9 ['] @] ['] @] UpdateBranches ; ( ----. )
- : @Z- [CHAR] ¤ ['] @] ['] @, UpdateBranches ; ( --..- )
- : @8 [CHAR] 8 ['] @: ['] @] UpdateBranches ; ( ---.. )
- : @7 [CHAR] 7 ['] @] ['] @] UpdateBranches ; ( --... )
- : @KN [KN] ['] @] ['] @() UpdateBranches ; ( -.--. ) \ **Prosign**
- : @KA [KA] ['] @; ['] @] UpdateBranches ; ( -.-.- ) \ **Prosign**
- : @6 [CHAR] 6 ['] @] ['] @- UpdateBranches ; ( -.... )
- : @AS [AS] ['] @; ['] @] UpdateBranches ; ( -...- ) \ **Prosign** Or: "="
- : @SK [SK] ['] @; ['] @] UpdateBranches ; ( ...-.- ) \ **Prosign**
- : @AR [AR] ['] @; ['] @. UpdateBranches ; ( .-.-. ) \ **Prosign** Or: "+"
- : @BT [BT] ['] @; ['] @] UpdateBranches ; ( .-... ) \ **Prosign**
- : @V\ [SN] ['] @] ['] @SK UpdateBranches ; ( ...-. ) \ **Prosign**
- : @Ø [CHAR] Ø ['] @8 ['] @] UpdateBranches ; ( ---. ) \ Denmark
- : @O- [CHAR] ¤ ['] @9 ['] @0 UpdateBranches ; ( ---- )
- : @Q [CHAR] Q ['] @] ['] @] UpdateBranches ; ( --.- )
- : @Z [CHAR] Z ['] @7 ['] @Z- UpdateBranches ; ( --.. )
- : @H [CHAR] H ['] @5 ['] @4 UpdateBranches ; ( .... )
- : @V [CHAR] V ['] @V\ ['] @3 UpdateBranches ; ( ...- )
- : @U- [CHAR] ¤ ['] @U-. ['] @2 UpdateBranches ; ( ..-- ) \ U.-
- : @F [CHAR] F ['] @] ['] @] UpdateBranches ; ( ..-. ) \ BETTER?
- : @B [CHAR] B ['] @6 ['] @BT UpdateBranches ; ( -... )
- : @X [CHAR] X ['] @/ ['] @] UpdateBranches ; ( -..- )
- : @Y [CHAR] Y ['] @KN ['] @] UpdateBranches ; ( -.-- )
- : @C [CHAR] C ['] @] ['] @KA UpdateBranches ; ( -.-. )
- : @J [CHAR] J ['] @' ['] @1 UpdateBranches ; ( .--- )
- : @P [CHAR] P ['] @] ['] @Å UpdateBranches ; ( .--. )
- : @L [CHAR] L ['] @AS ['] @L- UpdateBranches ; ( .-.. )
- : @Æ [CHAR] Æ ['] @AR ['] @] UpdateBranches ; ( .-.- ) \ Denmark
- : @D [CHAR] D ['] @B ['] @X UpdateBranches ; ( -.. )
- : @K [CHAR] K ['] @C ['] @Y UpdateBranches ; ( -.- )
- : @W [CHAR] W ['] @P ['] @J UpdateBranches ; ( .-- )
- : @R [CHAR] R ['] @L ['] @Æ UpdateBranches ; ( .-. )
- : @O [CHAR] O ['] @Ø ['] @O- UpdateBranches ; ( --- )
- : @G [CHAR] G ['] @Z ['] @Q UpdateBranches ; ( --. )
- : @U [CHAR] U ['] @F ['] @U- UpdateBranches ; ( ..- )
- : @S [CHAR] S ['] @H ['] @V UpdateBranches ; ( ... )
- : @I [CHAR] I ['] @S ['] @U UpdateBranches ; ( .. )
- : @A [CHAR] A ['] @R ['] @W UpdateBranches ; ( .- )
- : @M [CHAR] M ['] @G ['] @O UpdateBranches ; ( -- )
- : @N [CHAR] N ['] @D ['] @K UpdateBranches ; ( -. )
- : @T [CHAR] T ['] @N ['] @M UpdateBranches ; ( - )
- : @E [CHAR] E ['] @I ['] @A UpdateBranches ; ( . )
- \ ******************** At the tree root *********************************;
- 0 value @GoBACK
- \ Expectations at start of program, and after any sign has been processed:
- : ResetExpectedChar \ go back to root of Morse decision tree:
- [CHAR] ¤ IS @¤ \ EXPECTED CHAR - UNTIL FURTHER. ¤=Unknown or Illegal morsesign
- ['] @E IS @DOT \ E IS "EXPECTED" IF WE GET A DOT/dit as first = GoLEFT
- ['] @T IS @DASH \ T IS "EXPECTED" IF WE GET A DASH/dah as first = GoRIGHT
- 0 is @GoBACK \ Go back in tree, not used in this Morse program, just an idea :-)
- ;
- ' ResetExpectedChar is [ResetExpectedChar] \ >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- \ *** "Climb the tree" ***
- : Handle-DAH Code.? if [char] - emit then \ only if hardcopy print wanted [ ] fix
- @DASH EXECUTE \ <<<<<<<<<<<<<<<<<<<< change expectations
- ;
- : Handle-DIT Code.? if [char] . emit then \ only if hardcopy print wanted [ ] fix
- @DOT EXECUTE \ <<<<<<<<<<<<<<<<<<<< change expectations
- ;
- : Handle-DIT-or-DAH ( = "Tree climbing" :-)
- UpTime DownTime -
- UnitTime 50%+ > \ *********** KILROY IMPROVE TIMING! ???
- if Handle-DAH \ Climb the tree - GoRIGHT ( - )
- else Handle-DIT \ Climb the tree - GoLEFT ( . )
- then
- UnitTime MS \ ????
- ;
- : InitVALUES 0 is DownTime
- 0 is UpTime
- ResetExpectedChar
- ;
- : MORSE-READER \ Using Decision Trees version! ******* Make it a TASK !/? ***********
- InitPINs
- InitVALUES
- cr ." Stop Morse-Reader by entering any character on keyboard"
- cr ." '¤' indicates an invalid Morsesign has been received"
- cr ." Following sign might be wrong too"
- cr
- BEGIN 5 MS \ ???????? KILROY come back :-)
- KeyDown?
- if MS-ticks is DownTime
- Buzz-on LED-On
- Await-Key-Going-Up \ <<<<<<<<<< sets UpTime
- Buzz-Off LED-Off
- \ ***************** \
- Handle-DIT-or-DAH \ <<<<<<<<<<< does the "Tree Climbing" :-)
- \ ***************** \
- Await-SpaceTime-or-Keydown
- then
- UpTime
- IF MS-TICKS UpTime - ( --- UPTIME-DURATION )
- UNITTIME 6 * \ => inter-sign delay? \ KILROY come back :-)
- >
- IF SPACE
- 0 IS UpTime
- THEN
- THEN
- Key? \ stop program?
- UNTIL
- Key? if Key drop then
- CR ." MORSE-READER stopped" CR
- ;
- : MR MORSE-READER ; \ alias
- 1 2 3 \ put on stack for debugging help TEMPOR.
- \ EOF
- \ FORGET ALL
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement