В этом уроке:
- Собираем знак «Опасные повороты»
- Настраиваем знак на автоматическую работу
- Реализуем приём информации машинкой
В вводном уроке мы рассмотрели принцип передачи информации от знака к машинке. Пришла пора научиться отправлять и принимать эти сигналы.
Сборка знака и его настройка на автоматическую работу
Первый знак, с которым мы будем работать, — знак номер 12.1 «Опасные повороты».
Для каждого знака, с которым Вы встретитесь, есть подробная статья. Там Вы найдёте инструкцию по сборке, необходимые скетчи и прочую полезную информацию по работе со знаком. А полный перечень знаков находится в технической главе.
Итак, у Вас есть собранный знак, передающий информацию о себе. Теперь давайте настроим машинку на приём сигнала.
Скетч для приёма сигнала от знака
В приведенной выше статье есть пример и приёма информации, но для текущей задачи мы оставили только самое необходимое, чтобы не отвлекаться на излишний код. Давайте посмотрим, как он работает.
#include <iarduino_I2C_IR.h> // Подключаем библиотеку для работы с Trema модулем: ИК-приёмник/передатчик I2C-flash iarduino_I2C_IR ir(0x09); // Объявляем объект ir для работы с функциями и методами библиотеки iarduino_I2C_IR, указывая адрес модуля на шине I2C // Если объявить объект без указания адреса (iarduino_I2C_IR ir;), то адрес будет найден автоматически void setup(){ // Serial.begin(9600); // Инициируем работу с шиной UART для передачи данных в монитор последовательного порта на скорости 9600 бит/сек ir.begin(); // Инициируем работу с ИК-приёмником/передатчиком I2C-flash ir.setProtocol(IR_IARDUINO); // Указываем протокол для приёма/передачи данных по ИК-каналу } // // void loop(){ // // Если приняты ИК-данные: // if( ir.check(true) ){ // Если принят пакет данных или пакет повтора // Если данные приняты от дорожного знака: // if( ir.device==MODUL_SIGN ){ // Если устройство, отправившее данные, является дорожным знаком Serial.print("Дорожный знак: "); // Serial.println(ir.sign_str); // Выводим строку с номером знака } // } // }
Обратите внимание, что при объявлении объекта ИК-приёмника/передатчика I2C мы указываем его адрес на шине I2C. По умолчанию — 0х09, но если Вы устанавливали ему другой адрес, не забудьте его изменить.
iarduino_I2C_IR ir(0x09); // Объявляем объект ir для работы с функциями и методами библиотеки iarduino_I2C_IR, указывая адрес модуля на шине I2C
Посмотрите — с помощью команды ir.sign_str мы получаем номер знака в ПДД. Это тот же номер, который мы указывали при программировании знака. Знак отправляет этот номер машинке, и теперь мы можем его распознать.
Результат работы программы
Подлючите машинку к компьютеру, загрузите скетч, откройте монитор порта и направьте включенный знак на ИК-приёмник. Помните, что приёмник машинки должен быть направлен в сторону передатчика знака.
Вы увидите в мониторе порта информацию о знаке.
Дорожный знак: 1.12.1
В следующем уроке мы реализуем полноценное взаимодействие машинки со знаком — её поведение будет меняться при обнаружении знака.
Обсуждение