/* * CWBeacon * Repeating CW beacon for the Arduino Uno * * Version: October 20, 2023 * This code has been released under the * GNU GENERAL PUBLIC LICENSE version 2: http://www.gnu.org/ * * The message table was created with the command: cw2hex -c * see: http://www.solorb.com/software/ * for the cw2hex C source code. * * Send a repeating morse code signal out PortB (Digital 8-11) * Bit 0: Morse Code keying signal * Bit 1: FSCW modulation signal (Frequency Shifting CW) * Bit 2: Transmit Enable signal * Bit 3: End of Message signal * * Message encoded by cw2hex V1.3.4: * ~^ >>>>> DE CALLSIGN/B /FSCW GRIDSQUARE^<>>>>> DE CALLSIGN/B GRIDSQUARE~< */ #define DTIME 98 /* approximately 12 WPM */ int msg_step = 0; byte msgtable[767] = { 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x07, 0x07, 0x07, 0x04, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x07, 0x07, 0x04, 0x05, 0x04, 0x07, 0x07, 0x07, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x07, 0x07, 0x07, 0x04, 0x04, 0x04, 0x05, 0x04, 0x07, 0x07, 0x07, 0x04, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x07, 0x07, 0x07, 0x04, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x07, 0x07, 0x07, 0x04, 0x07, 0x07, 0x07, 0x04, 0x05, 0x04, 0x04, 0x04, 0x07, 0x07, 0x07, 0x04, 0x05, 0x04, 0x04, 0x04, 0x07, 0x07, 0x07, 0x04, 0x05, 0x04, 0x05, 0x04, 0x07, 0x07, 0x07, 0x04, 0x05, 0x04, 0x04, 0x04, 0x07, 0x07, 0x07, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x07, 0x07, 0x04, 0x05, 0x04, 0x05, 0x04, 0x07, 0x07, 0x07, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x05, 0x04, 0x07, 0x07, 0x07, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x07, 0x07, 0x07, 0x04, 0x05, 0x04, 0x07, 0x07, 0x07, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x07, 0x07, 0x07, 0x04, 0x07, 0x07, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x07, 0x07, 0x04, 0x07, 0x07, 0x07, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x07, 0x07, 0x07, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x07, 0x07, 0x07, 0x04, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x07, 0x07, 0x07, 0x04, 0x07, 0x07, 0x07, 0x04, 0x05, 0x04, 0x07, 0x07, 0x07, 0x04, 0x04, 0x04, 0x05, 0x04, 0x05, 0x04, 0x07, 0x07, 0x07, 0x04, 0x04, 0x04, 0x05, 0x04, 0x07, 0x07, 0x07, 0x04, 0x04, 0x04, 0x05, 0x04, 0x07, 0x07, 0x07, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x04, 0x05, 0x04, 0x05, 0x05, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x04, 0x05, 0x05, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x05, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x04, 0x05, 0x05, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x04, 0x05, 0x05, 0x05, 0x04, 0x05, 0x04, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08 }; int msg_size = sizeof (msgtable); void setup() { DDRB = 0x0f; /* Set port D to outputs on the lower 4 bits. */ } void loop() { PORTB = msgtable[(int)msg_step]; /* output one nibble */ msg_step++; delay(DTIME); /* pause for one CW element */ if (msg_step >= msg_size) /* reset at end of message */ msg_step = 0; }