Advertisement
Jan-Langevad

MORSE-DECISION-TREE-IDEA.TXT

Mar 29th, 2025 (edited)
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.68 KB | None | 0 0
  1. \ DECISION-TREE-IDEA.TXT as of 2025 March 31th
  2.  
  3. : ALL ; \ EASY TO FORGET ;-)
  4.  
  5. 27 value MORSEkeyPIN \ Bit value=8 Index finger (used as TOUCH Morse key "contact")
  6.  
  7. \ Using a TOUCH PIN as morse-key input.
  8. \ Can be changed to a normal digital 0/1 input! See tips below.
  9. \ OBS: TOUCH support has to be added in USERWORDS.H
  10. \ and USERWORDS.H activated in .INO file. Here minimum content in USERWORDS.H :
  11. \ First remove this: "<REMOVE>" before adding to USERWORDS.H
  12. \ otherwise wuou will get at file not found warning :-)
  13.  
  14. \ // Touch support added by Jan Langevad 2025-03-11
  15. \ #<REMOVE>include "esp32-hal-touch.h"
  16. \ #define USER_WORDS \
  17. \ Y(touchRead, n0 = touchRead(n0))
  18.  
  19.  
  20. 30 value LowThreshold \ TOUCH adjustment
  21. 68 value HighThreshold \ ----"-------
  22.  
  23. 100 value UnitTime \ UnitTime(mS) = (1200/WPM) default "bit-time" until adjusted
  24. 12 value WPM \ WPM = (1200/UnitTime(mS)
  25. 0 value DownTime \ Key went down at MS-TICKS, timestamp
  26. 0 value UpTime \ Key went up at MS-TICKS, timestamp
  27. 0 value @¤ \ POSSIBLY NEXT CHAR TO PRINT
  28. 0 value @DOT \ Execute address IF WE RECEIVE A DOT
  29. 0 value @DASH \ Execute address IF WE RECEIVE A DASH
  30. 0 value Code.?
  31.  
  32. \ Special Prosign values (Any random value above 255/a CHAR/byte could be used :-)
  33. \ See "Definition" of PROSIGNS: https://www.eucw.org/op/en/prosigns.html
  34. 301 value [KN]
  35. 302 value [AS]
  36. 303 value [BT]
  37. 304 value [AR]
  38. 305 value [SK]
  39. 306 value [SN]
  40. 307 value [KA]
  41. 308 value [SOS]
  42.  
  43. \ TIMING/LENGTH INFORMATION FOR CORRECT/FORMAL MORSE:
  44. \ Dit length = 1 "Morse unit" / BitTime / UnitTime
  45. \ Dah length = 3 DITs
  46. \ Dit/Dah seperation 1 DIT time
  47. \ Char separation 3 DITs time
  48. \ Word separation 7 DITs time
  49.  
  50. : WPM! ( n --- ) 1200 swap / is UnitTime ;
  51. : WPM? UnitTime 1200 swap / . ;
  52.  
  53. INTERRUPTS \ vocabulary needed for setting PULLUP etc..
  54.  
  55. : InitPINs
  56. \ 32 input pinmode \ default a boot
  57.  
  58. \ 32 gpio_pullup_en ( PIN --- FLG )
  59. \ drop
  60.  
  61. \ 27 input pinmode \ *** Use digital I/O rather than TOUCH ***
  62. \ 27 gpio_pullup_en
  63. \ 27 digitalread \ <----- use, see below ***
  64.  
  65. 15 output pinmode \ used by Buzzer
  66. 4 output pinmode \ used by local clear low-power LED
  67. ;
  68. InitPINs \ <<<<<<<<<<<<<<<<<<<<<
  69.  
  70. FORTH
  71.  
  72. : Buzz-on high 15 pin ;
  73. : Buzz-off low 15 pin ;
  74.  
  75. : LED-on high 4 pin ;
  76. : LED-off low 4 pin ;
  77.  
  78. : 50%+ ( n --- n+50% ) 3 * 2 / ;
  79.  
  80. : EndOfMorseCode? MS-TICKS UpTime -
  81. UnitTime 50%+ ( > UnitTime+50% / 1,5* / 50%+ )
  82. >
  83. ;
  84.  
  85. : KeyDown? ( --- flg ) \ used by normal Morse-keyer
  86. MORSEkeyPIN touchread \ ANY INPUT PIN COULD BE USED
  87. LowThreshold < \ threshold has to be evaluated/adjusted
  88. ;
  89. \ : KeyDown? MORSEkeyPIN digitalread 0= ; ( --- flg ) \ Digital I/O version
  90.  
  91. : KeyUp? MORSEkeyPIN touchread
  92. HighThreshold > \ threshold has to be evaluated/adjusted
  93. ;
  94. \ : KeyUp? MORSEkeyPIN digitalread ; ( --- flg ) \ Digital I/O version
  95.  
  96.  
  97. : Await-Key-Going-Up \ OBS: OR operator Keyboard entry (LOOP)
  98.  
  99. begin 5 MS \ ???????? KILROY come back :-)
  100. KeyUp? \ await Key going up aganin
  101. Key? \ or operator keyboard entry seen?
  102. or
  103. until
  104.  
  105. MS-TICKS is UpTime \ <<<<<<<< keep track of Key up time
  106. ;
  107.  
  108. : case? ( n1 n2 -- n1 ff | tf ) \ from PoorMansCase.TXT by Klaus Schleisiek :-)
  109. over = dup IF nip THEN
  110. ;
  111.  
  112. : .Prosign ( --- ) \ "Definition": https://www.eucw.org/op/en/prosigns.html
  113.  
  114. [KN] case? if ." [KN]" exit then
  115. [AS] case? if ." [AS]" exit then
  116. [BT] case? if ." [BT]" exit then
  117. [AR] case? if ." [AR]" exit then
  118. [SK] case? if ." [SK]" exit then
  119. [SN] case? if ." [SN]" exit then
  120. [KA] case? if ." [KA]" exit then
  121. [SOS] case? if ." [SOS]" exit then
  122.  
  123. DROP ." [undocumented prosign]"
  124. ;
  125.  
  126. DEFER [ResetExpectedChar] \ <<<<<<<<<<<<<<<<<<<<<<<<<<<<
  127.  
  128. : Await-SpaceTime-or-Keydown
  129.  
  130. begin MS-TICKS UpTime - \
  131. UnitTime 3 * > \ *********** KILROY IMPROVE TIMING!
  132. if \ SPACE -1 \ Make space char after a WORD PAUSE
  133.  
  134. @¤ 256 < \ A NORMAL CHARACTER?
  135. IF @¤ EMIT \ <<<<<<<<<< PRINT THE MORSE SIGN!
  136. ELSE .Prosign
  137. THEN
  138.  
  139. [ResetExpectedChar] \ ******************
  140.  
  141. -1
  142. else 0
  143. then
  144. KeyDown?
  145. OR
  146. until
  147. ;
  148.  
  149. \ ************** Let the tree grow here ******************************:
  150.  
  151. : UpdateBranches ( char XT. XT- --- )
  152. IS @DASH \ NEXT BRANCH SPLIT IF A DASH/Dah/- COMES IN NEXT
  153. IS @DOT \ NEXT BRANCH SPLIT IF A DOT/Dit/. COMES IN NEXT
  154. IS @¤ \ CHAR TO PRINT IF SIGN "TIMES-OUT" = IS COMPLETED
  155. ;
  156.  
  157. : @] [CHAR] ¤ IS @¤ ; \ ILLEGAL TREE BRANCH/SIGN RECEIVED (or an error in the tree ;-)
  158.  
  159. \ *** At tree-top here ***:
  160. \ PRINT-OUT . - <PTR TO BRANCHES MORSECODE
  161. \ ------------------------------------------------------------
  162. \ SPECIAL signs:
  163. : @SOS [SOS] ['] @] ['] @] UpdateBranches ; ( ...---... ) \ **Prosign**
  164. : @3/\\ [CHAR] ¤ ['] @SOS ['] @] UpdateBranches ; ( ...---.. )
  165. : @3/\ [CHAR] ¤ ['] @3/\\ ['] @] UpdateBranches ; ( ...---. )
  166. : @3/ [CHAR] ¤ ['] @3/\ ['] @] UpdateBranches ; ( ...--- )
  167.  
  168. : @. [CHAR] . ['] @] ['] @] UpdateBranches ; ( .-.-.- )
  169. : @, [CHAR] , ['] @] ['] @] UpdateBranches ; ( --..-- )
  170. : @? [CHAR] ? ['] @] ['] @] UpdateBranches ; ( ..--.. )
  171. : @: [CHAR] : ['] @] ['] @] UpdateBranches ; ( ---... )
  172. : @; [CHAR] ; ['] @] ['] @] UpdateBranches ; ( -.-.-. )
  173. : @- [CHAR] - ['] @] ['] @] UpdateBranches ; ( -....- )
  174. : @/ [CHAR] / ['] @] ['] @] UpdateBranches ; ( -..-. )
  175. : @() [CHAR] ( ['] @] ['] @] UpdateBranches ; ( -.--.- )
  176. : @" [CHAR] " ['] @] ['] @] UpdateBranches ; ( .-..-. )
  177. : @' [CHAR] ' ['] @] ['] @] UpdateBranches ; ( .---. )
  178. : @_ [CHAR] _ ['] @] ['] @] UpdateBranches ; ( ..--.- )
  179. : @@ [CHAR] @ ['] @] ['] @] UpdateBranches ; ( .--.-. ) \ NEWER SIGN :-)
  180.  
  181. \ NORMAL CHARACTERS (INCLUDING THE 3 Danish: Æ Ø Å )
  182. : @Å [CHAR] Å ['] @@ ['] @] UpdateBranches ; ( .--.- ) \ Denmark
  183. : @3 [CHAR] 3 ['] @] ['] @3/ UpdateBranches ; ( ...-- )
  184. : @4 [CHAR] 4 ['] @] ['] @] UpdateBranches ; ( ....- )
  185. : @5 [CHAR] 5 ['] @] ['] @] UpdateBranches ; ( ..... )
  186. : @2 [CHAR] 2 ['] @] ['] @] UpdateBranches ; ( ..--- )
  187. : @U-. [CHAR] ¤ ['] @? ['] @_ UpdateBranches ; ( ..--. )
  188. : @Æ. [CHAR] ¤ ['] @] ['] @. UpdateBranches ; ( .-.-. )
  189. : @1 [CHAR] 1 ['] @] ['] @] UpdateBranches ; ( .---- )
  190. : @L- [CHAR] L ['] @" ['] @] UpdateBranches ; ( .-..- )
  191. : @0 [CHAR] 0 ['] @] ['] @] UpdateBranches ; ( ----- )
  192. : @9 [CHAR] 9 ['] @] ['] @] UpdateBranches ; ( ----. )
  193. : @Z- [CHAR] ¤ ['] @] ['] @, UpdateBranches ; ( --..- )
  194. : @8 [CHAR] 8 ['] @: ['] @] UpdateBranches ; ( ---.. )
  195. : @7 [CHAR] 7 ['] @] ['] @] UpdateBranches ; ( --... )
  196. : @KN [KN] ['] @] ['] @() UpdateBranches ; ( -.--. ) \ **Prosign**
  197. : @KA [KA] ['] @; ['] @] UpdateBranches ; ( -.-.- ) \ **Prosign**
  198. : @6 [CHAR] 6 ['] @] ['] @- UpdateBranches ; ( -.... )
  199. : @AS [AS] ['] @; ['] @] UpdateBranches ; ( -...- ) \ **Prosign** Or: "="
  200. : @SK [SK] ['] @; ['] @] UpdateBranches ; ( ...-.- ) \ **Prosign**
  201. : @AR [AR] ['] @; ['] @. UpdateBranches ; ( .-.-. ) \ **Prosign** Or: "+"
  202. : @BT [BT] ['] @; ['] @] UpdateBranches ; ( .-... ) \ **Prosign**
  203. : @V\ [SN] ['] @] ['] @SK UpdateBranches ; ( ...-. ) \ **Prosign**
  204.  
  205. : @Ø [CHAR] Ø ['] @8 ['] @] UpdateBranches ; ( ---. ) \ Denmark
  206. : @O- [CHAR] ¤ ['] @9 ['] @0 UpdateBranches ; ( ---- )
  207. : @Q [CHAR] Q ['] @] ['] @] UpdateBranches ; ( --.- )
  208. : @Z [CHAR] Z ['] @7 ['] @Z- UpdateBranches ; ( --.. )
  209. : @H [CHAR] H ['] @5 ['] @4 UpdateBranches ; ( .... )
  210. : @V [CHAR] V ['] @V\ ['] @3 UpdateBranches ; ( ...- )
  211. : @U- [CHAR] ¤ ['] @U-. ['] @2 UpdateBranches ; ( ..-- ) \ U.-
  212. : @F [CHAR] F ['] @] ['] @] UpdateBranches ; ( ..-. ) \ BETTER?
  213. : @B [CHAR] B ['] @6 ['] @BT UpdateBranches ; ( -... )
  214. : @X [CHAR] X ['] @/ ['] @] UpdateBranches ; ( -..- )
  215. : @Y [CHAR] Y ['] @KN ['] @] UpdateBranches ; ( -.-- )
  216. : @C [CHAR] C ['] @] ['] @KA UpdateBranches ; ( -.-. )
  217. : @J [CHAR] J ['] @' ['] @1 UpdateBranches ; ( .--- )
  218. : @P [CHAR] P ['] @] ['] @Å UpdateBranches ; ( .--. )
  219. : @L [CHAR] L ['] @AS ['] @L- UpdateBranches ; ( .-.. )
  220. : @Æ [CHAR] Æ ['] @AR ['] @] UpdateBranches ; ( .-.- ) \ Denmark
  221.  
  222. : @D [CHAR] D ['] @B ['] @X UpdateBranches ; ( -.. )
  223. : @K [CHAR] K ['] @C ['] @Y UpdateBranches ; ( -.- )
  224. : @W [CHAR] W ['] @P ['] @J UpdateBranches ; ( .-- )
  225. : @R [CHAR] R ['] @L ['] @Æ UpdateBranches ; ( .-. )
  226. : @O [CHAR] O ['] @Ø ['] @O- UpdateBranches ; ( --- )
  227. : @G [CHAR] G ['] @Z ['] @Q UpdateBranches ; ( --. )
  228. : @U [CHAR] U ['] @F ['] @U- UpdateBranches ; ( ..- )
  229. : @S [CHAR] S ['] @H ['] @V UpdateBranches ; ( ... )
  230.  
  231. : @I [CHAR] I ['] @S ['] @U UpdateBranches ; ( .. )
  232. : @A [CHAR] A ['] @R ['] @W UpdateBranches ; ( .- )
  233. : @M [CHAR] M ['] @G ['] @O UpdateBranches ; ( -- )
  234. : @N [CHAR] N ['] @D ['] @K UpdateBranches ; ( -. )
  235.  
  236. : @T [CHAR] T ['] @N ['] @M UpdateBranches ; ( - )
  237. : @E [CHAR] E ['] @I ['] @A UpdateBranches ; ( . )
  238. \ ******************** At the tree root *********************************;
  239.  
  240.  
  241. 0 value @GoBACK
  242.  
  243. \ Expectations at start of program, and after any sign has been processed:
  244. : ResetExpectedChar \ go back to root of Morse decision tree:
  245.  
  246. [CHAR] ¤ IS @¤ \ EXPECTED CHAR - UNTIL FURTHER. ¤=Unknown or Illegal morsesign
  247. ['] @E IS @DOT \ E IS "EXPECTED" IF WE GET A DOT/dit as first = GoLEFT
  248. ['] @T IS @DASH \ T IS "EXPECTED" IF WE GET A DASH/dah as first = GoRIGHT
  249.  
  250. 0 is @GoBACK \ Go back in tree, not used in this Morse program, just an idea :-)
  251. ;
  252. ' ResetExpectedChar is [ResetExpectedChar] \ >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  253.  
  254. \ *** "Climb the tree" ***
  255. : Handle-DAH Code.? if [char] - emit then \ only if hardcopy print wanted [ ] fix
  256. @DASH EXECUTE \ <<<<<<<<<<<<<<<<<<<< change expectations
  257. ;
  258.  
  259. : Handle-DIT Code.? if [char] . emit then \ only if hardcopy print wanted [ ] fix
  260. @DOT EXECUTE \ <<<<<<<<<<<<<<<<<<<< change expectations
  261. ;
  262.  
  263. : Handle-DIT-or-DAH ( = "Tree climbing" :-)
  264.  
  265. UpTime DownTime -
  266. UnitTime 50%+ > \ *********** KILROY IMPROVE TIMING! ???
  267. if Handle-DAH \ Climb the tree - GoRIGHT ( - )
  268. else Handle-DIT \ Climb the tree - GoLEFT ( . )
  269. then
  270. UnitTime MS \ ????
  271. ;
  272.  
  273. : InitVALUES 0 is DownTime
  274. 0 is UpTime
  275.  
  276. ResetExpectedChar
  277. ;
  278.  
  279. : MORSE-READER \ Using Decision Trees version! ******* Make it a TASK !/? ***********
  280.  
  281. InitPINs
  282. InitVALUES
  283.  
  284. cr ." Stop Morse-Reader by entering any character on keyboard"
  285. cr ." '¤' indicates an invalid Morsesign has been received"
  286. cr ." Following sign might be wrong too"
  287. cr
  288.  
  289. BEGIN 5 MS \ ???????? KILROY come back :-)
  290.  
  291. KeyDown?
  292. if MS-ticks is DownTime
  293. Buzz-on LED-On
  294.  
  295. Await-Key-Going-Up \ <<<<<<<<<< sets UpTime
  296.  
  297. Buzz-Off LED-Off
  298.  
  299. \ ***************** \
  300. Handle-DIT-or-DAH \ <<<<<<<<<<< does the "Tree Climbing" :-)
  301. \ ***************** \
  302.  
  303. Await-SpaceTime-or-Keydown
  304. then
  305.  
  306. UpTime
  307. IF MS-TICKS UpTime - ( --- UPTIME-DURATION )
  308. UNITTIME 6 * \ => inter-sign delay? \ KILROY come back :-)
  309. >
  310. IF SPACE
  311. 0 IS UpTime
  312. THEN
  313. THEN
  314.  
  315. Key? \ stop program?
  316.  
  317. UNTIL
  318.  
  319. Key? if Key drop then
  320. CR ." MORSE-READER stopped" CR
  321. ;
  322. : MR MORSE-READER ; \ alias
  323.  
  324. 1 2 3 \ put on stack for debugging help TEMPOR.
  325.  
  326. \ EOF
  327.  
  328. \ FORGET ALL
  329.  
  330.  
  331.  
  332.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement