Jan-Langevad

MORSE-DECISION-TREE-IDEA.TXT

Mar 29th, 2025 (edited)
309
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. @¤
  115. [KN] case? if ." [KN]" exit then
  116. [AS] case? if ." [AS]" exit then
  117. [BT] case? if ." [BT]" exit then
  118. [AR] case? if ." [AR]" exit then
  119. [SK] case? if ." [SK]" exit then
  120. [SN] case? if ." [SN]" exit then
  121. [KA] case? if ." [KA]" exit then
  122. [SOS] case? if ." [SOS]" exit then
  123.  
  124. DROP ." [undocumented prosign]"
  125. ;
  126.  
  127. DEFER [ResetExpectedChar] \ <<<<<<<<<<<<<<<<<<<<<<<<<<<<
  128.  
  129. : Await-SpaceTime-or-Keydown
  130.  
  131. begin MS-TICKS UpTime - \
  132. UnitTime 3 * > \ *********** KILROY IMPROVE TIMING!
  133. if \ SPACE -1 \ Make space char after a WORD PAUSE
  134.  
  135. @¤ 256 < \ A NORMAL CHARACTER?
  136. IF @¤ EMIT \ <<<<<<<<<< PRINT THE MORSE SIGN!
  137. ELSE .Prosign
  138. THEN
  139.  
  140. [ResetExpectedChar] \ ******************
  141.  
  142. -1
  143. else 0
  144. then
  145. KeyDown?
  146. OR
  147. until
  148. ;
  149.  
  150. \ ************** Let the tree grow here ******************************:
  151.  
  152. : UpdateBranches ( char XT. XT- --- )
  153. IS @DASH \ NEXT BRANCH SPLIT IF A DASH/Dah/- COMES IN NEXT
  154. IS @DOT \ NEXT BRANCH SPLIT IF A DOT/Dit/. COMES IN NEXT
  155. IS @¤ \ CHAR TO PRINT IF SIGN "TIMES-OUT" = IS COMPLETED
  156. ;
  157.  
  158. : @] [CHAR] ¤ IS @¤ ; \ ILLEGAL TREE BRANCH/SIGN RECEIVED (or an error in the tree ;-)
  159.  
  160. \ *** At tree-top here ***:
  161. \ PRINT-OUT . - <PTR TO BRANCHES MORSECODE
  162. \ ------------------------------------------------------------
  163. \ SPECIAL signs:
  164. : @SOS [SOS] ['] @] ['] @] UpdateBranches ; ( ...---... ) \ **Prosign**
  165. : @3/\\ [CHAR] ¤ ['] @SOS ['] @] UpdateBranches ; ( ...---.. )
  166. : @3/\ [CHAR] ¤ ['] @3/\\ ['] @] UpdateBranches ; ( ...---. )
  167. : @3/ [CHAR] ¤ ['] @3/\ ['] @] UpdateBranches ; ( ...--- )
  168.  
  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 ; ( ..--.- )
  180. : @@ [CHAR] @ ['] @] ['] @] UpdateBranches ; ( .--.-. ) \ NEWER SIGN :-)
  181.  
  182. \ NORMAL CHARACTERS (INCLUDING THE 3 Danish: Æ Ø Å )
  183. : @Å [CHAR] Å ['] @@ ['] @] UpdateBranches ; ( .--.- ) \ Denmark
  184. : @3 [CHAR] 3 ['] @] ['] @3/ UpdateBranches ; ( ...-- )
  185. : @4 [CHAR] 4 ['] @] ['] @] UpdateBranches ; ( ....- )
  186. : @5 [CHAR] 5 ['] @] ['] @] UpdateBranches ; ( ..... )
  187. : @2 [CHAR] 2 ['] @] ['] @] UpdateBranches ; ( ..--- )
  188. : @U-. [CHAR] ¤ ['] @? ['] @_ UpdateBranches ; ( ..--. )
  189. : @Æ. [CHAR] ¤ ['] @] ['] @. UpdateBranches ; ( .-.-. )
  190. : @1 [CHAR] 1 ['] @] ['] @] UpdateBranches ; ( .---- )
  191. : @L- [CHAR] L ['] @" ['] @] UpdateBranches ; ( .-..- )
  192. : @0 [CHAR] 0 ['] @] ['] @] UpdateBranches ; ( ----- )
  193. : @9 [CHAR] 9 ['] @] ['] @] UpdateBranches ; ( ----. )
  194. : @Z- [CHAR] ¤ ['] @] ['] @, UpdateBranches ; ( --..- )
  195. : @8 [CHAR] 8 ['] @: ['] @] UpdateBranches ; ( ---.. )
  196. : @7 [CHAR] 7 ['] @] ['] @] UpdateBranches ; ( --... )
  197. : @KN [KN] ['] @] ['] @() UpdateBranches ; ( -.--. ) \ **Prosign**
  198. : @KA [KA] ['] @; ['] @] UpdateBranches ; ( -.-.- ) \ **Prosign**
  199. : @6 [CHAR] 6 ['] @] ['] @- UpdateBranches ; ( -.... )
  200. : @AS [AS] ['] @; ['] @] UpdateBranches ; ( -...- ) \ **Prosign** Or: "="
  201. : @SK [SK] ['] @; ['] @] UpdateBranches ; ( ...-.- ) \ **Prosign**
  202. : @AR [AR] ['] @; ['] @. UpdateBranches ; ( .-.-. ) \ **Prosign** Or: "+"
  203. : @BT [BT] ['] @; ['] @] UpdateBranches ; ( .-... ) \ **Prosign**
  204. : @V\ [SN] ['] @] ['] @SK UpdateBranches ; ( ...-. ) \ **Prosign**
  205.  
  206. : @Ø [CHAR] Ø ['] @8 ['] @] UpdateBranches ; ( ---. ) \ Denmark
  207. : @O- [CHAR] ¤ ['] @9 ['] @0 UpdateBranches ; ( ---- )
  208. : @Q [CHAR] Q ['] @] ['] @] UpdateBranches ; ( --.- )
  209. : @Z [CHAR] Z ['] @7 ['] @Z- UpdateBranches ; ( --.. )
  210. : @H [CHAR] H ['] @5 ['] @4 UpdateBranches ; ( .... )
  211. : @V [CHAR] V ['] @V\ ['] @3 UpdateBranches ; ( ...- )
  212. : @U- [CHAR] ¤ ['] @U-. ['] @2 UpdateBranches ; ( ..-- ) \ U.-
  213. : @F [CHAR] F ['] @] ['] @] UpdateBranches ; ( ..-. ) \ BETTER?
  214. : @B [CHAR] B ['] @6 ['] @BT UpdateBranches ; ( -... )
  215. : @X [CHAR] X ['] @/ ['] @] UpdateBranches ; ( -..- )
  216. : @Y [CHAR] Y ['] @KN ['] @] UpdateBranches ; ( -.-- )
  217. : @C [CHAR] C ['] @] ['] @KA UpdateBranches ; ( -.-. )
  218. : @J [CHAR] J ['] @' ['] @1 UpdateBranches ; ( .--- )
  219. : @P [CHAR] P ['] @] ['] @Å UpdateBranches ; ( .--. )
  220. : @L [CHAR] L ['] @AS ['] @L- UpdateBranches ; ( .-.. )
  221. : @Æ [CHAR] Æ ['] @AR ['] @] UpdateBranches ; ( .-.- ) \ Denmark
  222.  
  223. : @D [CHAR] D ['] @B ['] @X UpdateBranches ; ( -.. )
  224. : @K [CHAR] K ['] @C ['] @Y UpdateBranches ; ( -.- )
  225. : @W [CHAR] W ['] @P ['] @J UpdateBranches ; ( .-- )
  226. : @R [CHAR] R ['] @L ['] @Æ UpdateBranches ; ( .-. )
  227. : @O [CHAR] O ['] @Ø ['] @O- UpdateBranches ; ( --- )
  228. : @G [CHAR] G ['] @Z ['] @Q UpdateBranches ; ( --. )
  229. : @U [CHAR] U ['] @F ['] @U- UpdateBranches ; ( ..- )
  230. : @S [CHAR] S ['] @H ['] @V UpdateBranches ; ( ... )
  231.  
  232. : @I [CHAR] I ['] @S ['] @U UpdateBranches ; ( .. )
  233. : @A [CHAR] A ['] @R ['] @W UpdateBranches ; ( .- )
  234. : @M [CHAR] M ['] @G ['] @O UpdateBranches ; ( -- )
  235. : @N [CHAR] N ['] @D ['] @K UpdateBranches ; ( -. )
  236.  
  237. : @T [CHAR] T ['] @N ['] @M UpdateBranches ; ( - )
  238. : @E [CHAR] E ['] @I ['] @A UpdateBranches ; ( . )
  239. \ ******************** At the tree root *********************************;
  240.  
  241.  
  242. 0 value @GoBACK
  243.  
  244. \ Expectations at start of program, and after any sign has been processed:
  245. : ResetExpectedChar \ go back to root of Morse decision tree:
  246.  
  247. [CHAR] ¤ IS @¤ \ EXPECTED CHAR - UNTIL FURTHER. ¤=Unknown or Illegal morsesign
  248. ['] @E IS @DOT \ E IS "EXPECTED" IF WE GET A DOT/dit as first = GoLEFT
  249. ['] @T IS @DASH \ T IS "EXPECTED" IF WE GET A DASH/dah as first = GoRIGHT
  250.  
  251. 0 is @GoBACK \ Go back in tree, not used in this Morse program, just an idea :-)
  252. ;
  253. ' ResetExpectedChar is [ResetExpectedChar] \ >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  254.  
  255. \ *** "Climb the tree" ***
  256. : Handle-DAH Code.? if [char] - emit then \ only if hardcopy print wanted [ ] fix
  257. @DASH EXECUTE \ <<<<<<<<<<<<<<<<<<<< change expectations
  258. ;
  259.  
  260. : Handle-DIT Code.? if [char] . emit then \ only if hardcopy print wanted [ ] fix
  261. @DOT EXECUTE \ <<<<<<<<<<<<<<<<<<<< change expectations
  262. ;
  263.  
  264. : Handle-DIT-or-DAH ( = "Tree climbing" :-)
  265.  
  266. UpTime DownTime -
  267. UnitTime 50%+ > \ *********** KILROY IMPROVE TIMING! ???
  268. if Handle-DAH \ Climb the tree - GoRIGHT ( - )
  269. else Handle-DIT \ Climb the tree - GoLEFT ( . )
  270. then
  271. UnitTime MS \ ????
  272. ;
  273.  
  274. : InitVALUES 0 is DownTime
  275. 0 is UpTime
  276.  
  277. ResetExpectedChar
  278. ;
  279.  
  280. : MORSE-READER \ Using Decision Trees version! ******* Make it a TASK !/? ***********
  281.  
  282. InitPINs
  283. InitVALUES
  284.  
  285. cr ." Stop Morse-Reader by entering any character on keyboard"
  286. cr ." '¤' indicates an invalid Morsesign has been received"
  287. cr ." Following sign might be wrong too"
  288. cr
  289.  
  290. BEGIN 5 MS \ ???????? KILROY come back :-)
  291.  
  292. KeyDown?
  293. if MS-ticks is DownTime
  294. Buzz-on LED-On
  295.  
  296. Await-Key-Going-Up \ <<<<<<<<<< sets UpTime
  297.  
  298. Buzz-Off LED-Off
  299.  
  300. \ ***************** \
  301. Handle-DIT-or-DAH \ <<<<<<<<<<< does the "Tree Climbing" :-)
  302. \ ***************** \
  303.  
  304. Await-SpaceTime-or-Keydown
  305. then
  306.  
  307. UpTime
  308. IF MS-TICKS UpTime - ( --- UPTIME-DURATION )
  309. UNITTIME 6 * \ => inter-sign delay? \ KILROY come back :-)
  310. >
  311. IF SPACE
  312. 0 IS UpTime
  313. THEN
  314. THEN
  315.  
  316. Key? \ stop program?
  317.  
  318. UNTIL
  319.  
  320. Key? if Key drop then
  321. CR ." MORSE-READER stopped" CR
  322. ;
  323. : MR MORSE-READER ; \ alias
  324.  
  325. 1 2 3 \ put on stack for debugging help TEMPOR.
  326.  
  327. \ EOF
  328.  
  329. \ FORGET ALL
  330.  
  331.  
  332.  
  333.  
Advertisement
Add Comment
Please, Sign In to add comment