De dit's en dah's staan per teken binair als 0 en 1 in een morse 'byte' en worden daar bit voor bit 'uitgeschoven'. Een extra 1 geeft het einde van het morse teken aan en de timing voor de pause tussen de morse tekens.
De pauses tussen de tekens zijn iets (100mS = 1 unit) langer dan standaard, maar komt zo de 'leesbaarheid' ten goede voor ongeoefende jagers...
Een Vosje heeft natuurlijk een (herkennigs) geluidje nodig en daar dient character '*' voor; het vosnummer in piepjes (dit's).
struct morsetab {
char Chr;
byte Pat;
} mtab[] = {
{'*', 0x80}, // .......
{'A', 0x06}, // .-
. . . .
{'Z', 0x13}, // --..
}
char Text[25] = "***** demo *****";
mtab[0].Pat = 1 << vosNr; // 1 t/m 7
// 0=char, 1=spatie, 2=upper, 3=find, 4=morse,
// 5=dit/dah, 6=toon, 7=tijd, 8=pause, 9=loop
// dit=1+1, dah=3+1, pause=+3=4, space=+4=8
switch (s) {
case 0 : c = Text[p++]; if(!c) { p = 0; break; }
case 1 : if (c == 32) { w = 4; s = 7; break; }
case 2 : n = sizeof(mtab); c = toupper(c);
case 3 : while (n--) if (c == mtab[n].Chr) break;
case 4 : t = mtab[n].Pat; if (!t) { s = 0; break; }
case 5 : w = (t & 1) ? 3 : 1; t >>= 1;
case 6 : if (t) tone(cwePin, freq, w++ * Dot);
case 7 : wtyd = millis() + w * Dot; s = 8;
case 8 : if (millis() < wtyd) break;
case 9 : s = (t) ? 5 : 0;
}
Heb je vragen of opmerkingen? Stuur me een berichtje en je krijgt alle gewenste informatie!