// 2.11.2018, Arduino IDE v1.8.7, v0.2 // CW Beacon using Si5351, LZ2WSG, KN34PC //--------------------------------------------------------------------------------------------------------- #include "si5351.h" #define PIN_SP 10 #define PIN_TX 13 Si5351 si5351(0x60); uint16_t duration = 60; uint16_t hz = 750; String cw_message = "VVV de F1AZJ/P BEACON JN28OK 10mW"; uint32_t tx = 144400000; // FREQUENCE 144.400Mhz CLK1 //--------------------------------------------------------------------------------------------------------- void setup() { pinMode(PIN_TX, OUTPUT); si5351.init(SI5351_CRYSTAL_LOAD_8PF, 10000000, 0); // FREQUENCE QUARTZ Si5351 10 ou 25MHZ si5351.set_freq(10000000 * SI5351_FREQ_MULT, SI5351_CLK0); si5351.drive_strength(SI5351_CLK0, SI5351_DRIVE_2MA); //CLK0=SIGNAL +13DBM=8MA 3DBM=2MA 9DBM=4MA 11DBM=6MA si5351.output_enable(SI5351_CLK0, 1); si5351.set_freq(tx * SI5351_FREQ_MULT, SI5351_CLK1); si5351.drive_strength(SI5351_CLK1, SI5351_DRIVE_8MA); //CLK0=SIGNAL +13DBM=8MA 3DBM=2MA 9DBM=4MA 11DBM=6MA si5351.output_enable(SI5351_CLK1, 0); } //--------------------------------------------------------------------------------------------------------- void loop() { cw_string_proc(cw_message); delay(500); cw(true); delay(5000); cw(false); delay(1000); } //--------------------------------------------------------------------------------------------------------- void cw_string_proc(String str) { // processing string to characters for (uint8_t j = 0; j < str.length(); j++) cw_char_proc(str[j]); } //--------------------------------------------------------------------------------------------------------- void cw_char_proc(char m) { // processing characters to Morse code symbols String s; if (m == ' ') { // пауза между думите word_space(); return; } if (m > 96) // ACSII, case change a-z to A-Z if (m < 123) m -= 32; switch (m) { // Morse code case 'A': s = ".-#"; break; case 'B': s = "-...#"; break; case 'C': s = "-.-.#"; break; case 'D': s = "-..#"; break; case 'E': s = ".#"; break; case 'F': s = "..-.#"; break; case 'G': s = "--.#"; break; case 'H': s = "....#"; break; case 'I': s = "..#"; break; case 'J': s = ".---#"; break; case 'K': s = "-.-#"; break; case 'L': s = ".-..#"; break; case 'M': s = "--#"; break; case 'N': s = "-.#"; break; case 'O': s = "---#"; break; case 'P': s = ".--.#"; break; case 'Q': s = "--.-#"; break; case 'R': s = ".-.#"; break; case 'S': s = "...#"; break; case 'T': s = "-#"; break; case 'U': s = "..-#"; break; case 'V': s = "...-#"; break; case 'W': s = ".--#"; break; case 'X': s = "-..-#"; break; case 'Y': s = "-.--#"; break; case 'Z': s = "--..#"; break; case '1': s = ".----#"; break; case '2': s = "..---#"; break; case '3': s = "...--#"; break; case '4': s = "....-#"; break; case '5': s = ".....#"; break; case '6': s = "-....#"; break; case '7': s = "--...#"; break; case '8': s = "---..#"; break; case '9': s = "----.#"; break; case '0': s = "-----#"; break; case '?': s = "..--..#"; break; case ',': s = "--..--#"; break; case '/': s = "-..-.#"; break; } for (uint8_t i = 0; i < 7; i++) { switch (s[i]) { case '.': ti(); break; // TI case '-': ta(); break; // TA case '#': char_space(); return; // end of Morse code symbol } } } //--------------------------------------------------------------------------------------------------------- void ti() { cw(true); // TX TI delay(duration); cw(false); // stop TX TI delay(duration); } //--------------------------------------------------------------------------------------------------------- void ta() { cw(true); // TX TA delay(3 * duration); cw(false); // stop TX TA delay(duration); } //--------------------------------------------------------------------------------------------------------- void char_space() { // 3x, пауза между буквите delay(2 * duration); // 1 from element-end + 2 new } //--------------------------------------------------------------------------------------------------------- void word_space() { // 7x, пауза между думите delay(6 * duration); // 1 from element-end + 6 new } //--------------------------------------------------------------------------------------------------------- void cw(bool state) { // TX-CW, TX-LED, 750 Hz sound if (state) { si5351.output_enable(SI5351_CLK1, 1); digitalWrite(PIN_TX, HIGH); tone(PIN_SP, hz); } else { si5351.output_enable(SI5351_CLK1, 0); digitalWrite(PIN_TX, LOW); noTone(PIN_SP); } }