// код для Arduino, который будет генерировать (800гц) кодом Морзе (русский) следующую фразу: // всем привет. это маяк. 73! // Подключение пина для подачи сигнала const int signalPin = 13; // Длина тире в миллисекундах const int dashDuration = 300; // Длина точки в миллисекундах const int dotDuration = 100; // Пауза между символами (точками и тире) в миллисекундах const int symbolPause = 100; // Пауза между буквами в миллисекундах const int letterPause = 300; void setup() { pinMode(signalPin, OUTPUT); } void loop() { // Функция для отправки сигнала Морзе для символа из русского алфавита // Принимает код символа (в десятичной системе) void sendMorseCode(int code) { // Коды символов Морзе для русского языка const int russianMorseCodes[33] = { 0b10101101, // А 0b1101010101, // Б 0b110101101, // В 0b101011, // Г 0b110101, // Д 0b1, // Е 0b1010101101, // Ж 0b11010101, // З 0b10101, // И 0b1010111011, // Й 0b1101011, // К 0b1010101, // Л 0b11011, // М 0b1101, // Н 0b111, // О 0b1101101, // П 0b10101101, // Р 0b10101, // С 0b110, // Т 0b101011, // У 0b1010101, // Ф 0b1011101, // Х 0b101010101, // Ц 0b11011011, // Ч 0b110111, // Ш 0b1101010111, // Щ 0b10101, // Ъ 0b101110101, // Ы 0b10111011, // Ь 0b10101101, // Э 0b101110111, // Ю 0b1010101101 // Я }; // Проверка наличия кода символа в массиве if (code >= 1040 && code <= 1071) { int index = code - 1040; int morseCode = russianMorseCodes[index]; // Отправка сигнала Морзе for (int i = 11; i >= 0; i--) { int bit = (morseCode >> i) & 1; // сдвигает значение переменной morseCode вправо на i битов и выполняет побитовую операцию И с 1. Это извлекает значение i-го бита из morseCode. if (bit) { digitalWrite(signalPin, HIGH); delay(dashDuration); } else { digitalWrite(signalPin, HIGH); delay(dotDuration); } digitalWrite(signalPin, LOW); delay(symbolPause); } } else { // Если код символа не найден, отправляем пробел delay(letterPause); } } // Отправка фразы "всем привет. это маяк. 73!" sendMorseCode(1074); // в sendMorseCode(1057); // с sendMorseCode(1055); // е sendMorseCode(1084); // м sendMorseCode(32); // пробел sendMorseCode(1055); // е sendMorseCode(1088); // п sendMorseCode(1080); // р sendMorseCode(1080); // и sendMorseCode(1074); // в sendMorseCode(1055); // е sendMorseCode(1090); // т sendMorseCode(46); // . sendMorseCode(32); // пробел sendMorseCode(1055); // е sendMorseCode(1094); // т sendMorseCode(1075); // о sendMorseCode(32); // пробел sendMorseCode(1084); // м sendMorseCode(1072); // а sendMorseCode(1100); // я sendMorseCode(1082); // к sendMorseCode(46); // . sendMorseCode(32); // пробел sendMorseCode(55); // 7 sendMorseCode(51); // 3 sendMorseCode(33); // ! // Пауза в конце фразы delay(1000); }