Skip to content

Instantly share code, notes, and snippets.

@Lukelectro
Created November 13, 2018 14:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Lukelectro/72d86fdb4a763fbaa69a40cd200887ae to your computer and use it in GitHub Desktop.
Save Lukelectro/72d86fdb4a763fbaa69a40cd200887ae to your computer and use it in GitHub Desktop.
#include <ctype.h>
const int sp = 0; // speaker pin
char tekst[] = "pas wijze lynx bezag vroom het fikse aquaduct 1234567890"; // test tekst
const int mlen = 80; // morse length
void setup() {
// put your setup code here, to run once:
pinMode(sp,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
const uint8_t morseLetters[] = {
/* Morse codes van A t/m Z */
0x42,0x84,0xA4,0x83,0x01,0x24,0xC3,0x04,0x02,0x74,0xA3,0x44,0xC2,
0x82,0xE3,0x64,0xD4,0x43,0x03,0x81,0x23,0x14,0x63,0x94,0xB4,0xC4
};
const uint8_t morseCijfers[] = {
/* Morse codes van 0 t/m 9 */
0xFD,0x7D,0x3D,0x1D,0x0D,0x05,0x85,0xC5,0xE5,0xF5
};
unsigned int i = 0;
//tekst-naar-morse:
uint8_t morse[mlen];
while(tekst[i] != 0 && i<(mlen-1)){
if(isalpha(tekst[i]))
{
tekst[i]= toupper(tekst[i]);
morse[i]= morseLetters[tekst[i]-'A'];
}
else
{
if(isdigit(tekst[i]))
{
morse[i]=morseCijfers[tekst[i]-'0'];
}
else morse[i] = 0; // voor een spatie
}
i++;
}
morse[i]=0xFF; // laatste teken
// morse-naar-piepjes:
while (morse[i] != 0xFF){ // zolang het niet het laaste teken is
unsigned int bittel, aPnS;
if (morse[i] == 0)
{ // indien we met een spatie te maken hebben.
for(bittel=0;bittel<8;bittel++) delay(100); // 8 punten wachten
}
else
{
aPnS = (morse[i] & 0x07); // aantal Punten en Strepen zit in de laatste 3 bits
for(bittel=7;bittel>(7-aPnS);bittel--){ // bit voor bit aflopen
if ( ((morse[i])&(1<<bittel)) != 0 ) tone(sp,1000,300); else tone(sp,1000,100);
//Een 1 is een streep.
// een streep is 3x zo lang als een punt, en een punt heb ik op 100ms gekozen.
delay(100); // tussen punt of streep 1 punt wachten.
}
}
i++;
delay(300); // tussen tekens 3 punten wachten
}
// tussen repeat van de hele tekst ook even wachten, zeg 2 seconden:
delay(2000);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment