1.04. Лабораторная работа №1.4.md


Азбука Морзе

Тема работы

Представьте, что вы шпион из старого фильма, передающий секретное сообщение с помощью вспышек фонарика! В этой лабораторной работе вы научите Рудирон новому языку — азбуке Морзе. Мы напишем программу, которая заставит встроенный светодиод L1 отстукивать светом международный сигнал бедствия «SOS».

Цель

Научиться программировать плату Рудирон для передачи сообщений с помощью азбуки Морзе. Увидеть, как с помощью функций можно сделать код более организованным и читаемым.

Оборудование и материалы

  • Отладочная плата Рудирон.
  • USB-кабель (тип USB-A на USB-B) для подключения Рудирона к компьютеру.
  • Компьютер с установленной средой разработки Arduino IDE.

Ход работы

  1. Знакомство с азбукой Морзе

    Азбука Морзе — это способ кодирования букв с помощью коротких и длинных сигналов, известных как «точки» и «тире». Например, международный сигнал бедствия «SOS» выглядит так:

    • S: три точки (...)
    • O: три тире (---)

    Мы напишем программу, которая будет воспроизводить эту последовательность с помощью вспышек светодиода.

    Рис. 1. Азбука Морзе

  2. Настройка перемычек и подключение

    Для этого эксперимента нам не нужны внешние компоненты. Всё будет происходить прямо на плате!

    • Убедитесь, что перемычка PRG | RUN установлена в положение PRG для загрузки кода.
    • Подключите плату Рудирон к компьютеру через USB-кабель.
    • В Arduino IDE выберите плату Rudiron_Buterbrod_R10_20MHz и правильный COM-порт.
  3. Написание и загрузка кода

    Теперь напишем программу, которая научит Рудирон говорить «SOS». Мы будем использовать встроенный светодиод L1, который, как мы помним, подключён к пину 5. Чтобы наш код был чистым и понятным, мы создадим отдельные функции для «точки» и «тире».

    • В Arduino IDE создайте новый скетч и вставьте в него следующий код:

      // Пин, к которому подключен светодиод L1
      const int ledPin = 5;
      
      void setup() {
        // Настраиваем пин светодиода на выход
        pinMode(ledPin, OUTPUT);
      }
      
      void loop() {
        // Передаём букву 'S' (...): три точки
        morseDot(); morseDot(); morseDot();
        delay(700); // Пауза между буквами
      
        // Передаём букву 'O' (---): три тире
        morseDash(); morseDash(); morseDash();
        delay(700); // Пауза между буквами
      
        // Снова передаём букву 'S' (...)
        morseDot(); morseDot(); morseDot();
      
        // Длинная пауза перед повторением всего сообщения
        delay(2000);
      }
      
      // --- Наши собственные функции для Морзе ---
      
      // Функция для передачи "точки"
      void morseDot() {
        digitalWrite(ledPin, HIGH); // Включаем светодиод
        delay(250);                 // Длительность точки
        digitalWrite(ledPin, LOW);  // Выключаем светодиод
        delay(250);                 // Пауза после каждого сигнала
      }
      
      // Функция для передачи "тире"
      void morseDash() {
        digitalWrite(ledPin, HIGH); // Включаем светодиод
        delay(750);                 // Тире в 3 раза длиннее точки
        digitalWrite(ledPin, LOW);  // Выключаем светодиод
        delay(250);                 // Пауза после каждого сигнала
      }
      
    • Нажмите кнопку «Upload» (стрелка вправо), чтобы загрузить код на плату.
    • Сразу после загрузки внимательно наблюдайте за светодиодом L1. Он начнёт мигать, передавая сигнал «SOS»: три короткие вспышки, три длинные, и снова три короткие.
  4. Задание для самостоятельной работы

    Теперь, когда у вас есть готовые функции morseDot() и morseDash(), вы можете передавать любые сообщения! Попробуйте, используя таблицу ниже, передать своё имя или любое другое слово.

    Буква Код Морзе Буква Код Морзе Цифра Код Морзе
    A .- Н .... 1 .----
    Б -... О --- 2 ..---
    В .-- П .--. 3 ...--
    Г --. Р .-. 4 ....-
    Д -.. С ... 5 .....
    Е . Т - 6 -....
    Ж ...- У ..- 7 --...
    З --.. Ф ..-. 8 ---..
    И .. Х .... 9 ----.
    К -.- Ц -.-. 0 -----
    Л .-.. Ч ---.
    М -- Ш ----

    Просто вызовите функции morseDot() и morseDash() в правильной последовательности внутри loop(), не забывая про паузы delay() между буквами. Это отличное упражнение, чтобы закрепить понимание работы функций

Результаты

После выполнения работы вы должны увидеть, как встроенный светодиод L1 на плате Рудирон ритмично мигает, передавая сигнал «SOS» в азбуке Морзе.

Анализ результатов

В этой программе мы использовали функции morseDot() и morseDash(). Функция — это именованный блок кода, который выполняет определённую задачу. Благодаря им основной код в loop() стал очень читаемым. Вместо того чтобы каждый раз писать четыре строки для включения/выключения светодиода, мы просто вызываем функцию по имени. Это ключевой принцип хорошего программирования — разбивать сложные задачи на маленькие, управляемые части.

Выводы

В этой лабораторной работе вы научились писать более сложные программы, используя функции для организации кода. Вы создали устройство, которое отправляет осмысленное сообщение с помощью света, и всё это — без единого внешнего компонента. Вы увидели, как абстрактные идеи (буквы) можно превратить в физические сигналы (вспышки света).

Вопросы для самопроверки

  1. Что такое функция в программировании и зачем она нужна?
  2. Чем в нашем коде отличается «точка» от «тире»?
  3. Как изменить код, чтобы передать букву «A» (.-)?
  4. Почему между буквами и словами в азбуке Морзе нужны паузы разной длины?
  5. Как можно улучшить код, создав отдельные функции для каждой буквы (morseS(), morseO())?

Вы освоили азбуку Морзе и научились структурировать код с помощью функций! Это важный шаг в изучении программирования. Теперь переходите к следующей лабораторной работе, чтобы научить плату реагировать на ваши действия и управлять светодиодами с помощью кнопок.