Een Vosje heeft natuurlijk een (herkennigs) geluidje nodig en daar dient character '*' voor; het vosnummer in piepjes (dit's). Maar bij meer (hulp) vosjes was behoefte aan een extra herkenning, vandaar een extra 'dah' (case 13), waarmee totaal 14 (2x7) units zijn te herkennen. [ '.' t/m '.......' en '.-' t/m '.......-' ]
// 1=char, 2=loop, 3=upper, 4=find, 5=morse, 6=spatie, // 7=dit/dah, 8=room, 9=toon, 10=timer, 11=pause, // 12=done, 13=extra dah // s=step, p=pointer, c=char, t=teken, w=wacht, N=vosNr void loop() { mils = millis(); if (room) room = next - mils; // tijd tot Sync (step 8) if (rest) rest = wait - mils; // pause (step 11) if (aan ) { // vos actief switch (s) { case 1 : s++; if (c = txt[p++]) s = 3; break; case 2 : p = 0; w = 7; s = 10; break; case 3 : s++; n = sizeof(mtab); c = toupper(c); break; case 4 : s++; while (n--) if (c == mtab[n].Chr) break; break; case 5 : t = mtab[n].Pat; s = (t) ? 6 : 1; break; case 6 : s++; if (c == ' ') s = 10; w = 6; break; case 7 : s++; w = (t & 1) ? 3 : 1; t >>= 1; break; case 8 : if (room > (w * dot) && !cast) s++; break; case 9 : s++; tone(cwePin, hz, (w++ * dot); break; case 10 : s++; wait = mils + (w * dot); break; case 11 : if (rest) break; s++; if (w == 3) s = 1; break; case 12 : s = (t) ? 7 : 1; if (t == 1) s = 13; break; case 13 : s = (c == '*' && N > 7) ? 7 : 10; w = 3; break; default : s = 1; } } ... }
Met een beetje fantasie zijn vanuit de commentaren de gebruikte variabelen wel te herleiden. Bij waarden onder de 255 zijn bytes gebruikt (enkele letter), (unsigned) longs bij millis en soms een int. De morseteken lijst is gelijk aan de morse generator van het beacon project.
Omdat het Vosje een vorm van wifi gebruikt en de vos-zender de ontvangst kan storen, wordt in case 8 gekeken of de resterende tijd (room en cast) totaan het sync moment voldoende is om nog een toon uit te zenden. Indien die tijd te kort is wordt dit uitgesteld en rekt daarmee de pause tussen de dit's en dah's iets op. In het ergste geval kan als voorbeeld de letter 'A' (dit dah) neigen naar een 'E' (dit) gevolgd door een 'T' (dah).
Met rest (afgeleidevan w) wordt de duur van de tonen en pauses verzorgd.
De periode dat het vosje actief is wordt bepaald met aan.
Heb je vragen of opmerkingen? Stuur me een berichtje en je krijgt alle gewenste informatie!