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.
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 *****";
// 0=char, 1=spatie, 2upper, 3=find, 4=morse,
// 5=dit/dah, 6=tone, 7=tijd, 8=pause, 9=loop
// dit=1+1, dah=3+1, pause=+1+1=3, space=+4=7
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 && t > 1) ? 3 : 1; t >>= 1;
case 6 : if (t) tone(cwePin, freq, w * Dot); w++;
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!