Morsedecoder – Sketch (#03)
Sketch
Hvis man ikke selv ønsker at skrive sketchen, er der mange muligheder på nettet. En af dem, som tiltaler mig mest, er skrevet af Budd Churchwood, WB7FHC. Der er flere grunde til det. For det første har han en god løsning på selve konverteringen fra tegn til bogstav, idet søgningen foregå via et binært træ og ikke som mange andre gennem tabelopslag. Ret elegant og hurtigt!
1 2 3 4 5 6 7 |
///////////////////////////////////////////////////////////////////////////////// // Now here is the 'Secret Sauce' // The Morse Code is embedded into the binary version of the numbers from 2 - 63 // The place a letter appears here matches myNum that we parsed out of the code // #'s are miscopied characters char mySet[] ="##TEMNAIOGKDWRUS##QZYCXBJP#L#FVH09#8###7#####/-61#######2###3#45"; char lcdGuy = ' '; // We will store the actual character decoded here |
For det andet er hans sketch indrettet på en måde, at den selv tilpasser sig den aktuelle hastighed:
1 2 3 4 5 6 7 8 9 10 11 12 |
// If it is a dit we add 1. If it is a dah we do nothing! if (downTime < dit) { myNum++; // add one because it is a dit } else { // The next three lines handle the automatic speed adjustment: averageDah = (downTime+averageDah) / 2; // running average of dahs dit = averageDah / 3; // normal dit would be this dit = dit * 2; // double it to get the threshold between dits and dahs } } |
Systemet har en default hastighed, som jeg har sat til speed 20. Det beregner længden af DIT og DAH, og lægger lidt tid til længden af DIT. Hvis der er signal, som varer i mindre tid end længden af det udvidede DIT, lægger den én til optællingen. Ellers bruger den signal-tiden til at genberegne et gennemsnitligt DAH med tilhørende DIT. På denne måde retter systemet hele tid ind ved at sammenligne og beregne gennemsnit.
Koden virker bedst, hvis den starter med at lytte til CW med mange DAHs. Og sommetider ender det i noget volapyk. Budd’s løsning er i sådanne tilfælde, at trykke på reset-knappen. Her kunne man nemt ændre koden, så et tryk på Option S, den ekstra kontakt til A2, ville resette alle værdier til default. Det ville spare noget tid.
Jeg ændrer lidt i hans kode hist og her. Blandt andet laver jeg en Options.h-fil, hvor man kan sætte forskellige parametre. Når jeg er færdig med det, kommer den til download her på mit websted i denne POST. Indtil da kan du forsøge dig med at Google WB7FHC og morsedecoder. Så finder du nok hans originale kode. Bemærk at den findes i flere versioner.
PCB〈〈 Foregående POST i serien