КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

Дорожный знак из линейки "дорожное движение"

Общие сведения:

Модуль дорожный знак из линейки «Дорожное движение» состоит из знака, основания и крестовины. На каждом знаке имеется светодиодная подсветка. На плате основания расположен ИК-светодиод, с помощью которого модуль способен передавать информацию о себе по ИК-каналу на расстояние до 4-х метров. Дальность передачи данных по ИК-каналу можно регулировать подстроечным резистором, расположенным с обратной стороны платы основания.

Модуль способен работать как под управлением по шине I2С, так и автономно: при подключении батарейного отсека. Принимать передаваемые модулем данные можно при помощи модуля ИК-приемник/передатчик, FLASH-I2C.

Видео:

Редактируется...

Спецификация:

  • Напряжение питания: 3,3 В или 5 В, поддерживаются оба напряжения.
  • Питание от батарейного отсека: 3,3...4,2 В.
  • Ток потребляемый модулем: до 100 мА.
  • Дальность ИК-связи: от 20 см до 4 м (регулируется вручную).
  • Интерфейс: I2C.
  • Скорость шины I2C: 100 кбит/с.
  • Адрес на шине I2C: устанавливается программно (по умолчанию 0x09).
  • Уровень логической 1 на линиях шины I2C: Vcc (толерантны к 5 В).
  • Рабочая температура: от -20 до +70 °С.
  • Габариты квадратного знака: 60 x 90
  • Габариты круглого знака: 60 x 90
  • Габариты треугольного знака: 67 x 90
  • Габариты знака Уступи дорогу: 67 x 90
  • Габариты знака Главная дорога: 82 x 101
  • Габариты основания: 24 х 66 мм.
  • Габариты крестовины: 71 х 71 x 12 мм.
  • Вес: 30 г.

Подключение:

Модуль подключается к аппаратной или программной шине I2C Arduino.
Для удобства подключения предлагаем использовать TremaShield.

Модуль удобно подключать двумя способами в зависимости от ситуации:

Способ - 1 : Используя проводной шлейф и Piranha UNO

Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO.

Способ - 2: Используя проводной шлейф и Shield

Используя 4-х проводной шлейф, подключаем к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.

Питание:

Входное напряжение питания модуля — 3,3В или 5В постоянного тока (поддерживаются оба напряжения). Питание подаётся на выводы Vcc и GND.

Знак может работать в автономном режиме, для чего удобно использовать батарейный отсек, устанавливаемый на плате основания.

Подробнее о модуле:

Модуль построен на базе микроконтроллера STM32F030F4, снабжён ИК-светодиодом, светодиодом информирующем о передаче данных, регулятором дальности ИК-связи, транзисторными сборками Дарлингтона для управления подсветкой знаков. Также на модуле находится собственный стабилизатор напряжения. В верхней части платы основания имеется двухрядная колодка для подключения знаков разной геометрии или секций светофора, а в нижней части платы расположена колодка шины I2C.

Модуль способен передавать данные по ИК-каналу, используя протоколы NEC, SAMSUNG, SHARP, SIRC12, SIRC15, RC5, RC5X, RC6 и IARDUINO. Все перечисленные протоколы используют пакетную передачу данных. Данные в пакете представлены в виде адреса ИК-устройства (не путать с адресом устройства на шине I2C) и команды для него. Принимать данные, отправленные по ИК-каналу, можно при помощи модуля ИК-приемник/передатчик, FLASH-I2C, который поддерживает все перечисленные выше протоколы.

Модуль дорожный знак позволяет:

  • Менять свой адрес на шине I2C;
  • Управлять внутренней подтяжкой линий шины I2C (по умолчанию включена);
  • Узнать версию прошивки модуля;
  • Однократно отправить данные о номере знака по ИК-каналу;
  • Отслеживать момент завершения отправки данных по ИК-каналу;
  • Работать в режиме постоянной отправки данных по ИК-каналу с заданным интервалом. По умолчанию модуль меняет интервал между отправкой данных в диапазоне ±50% от заданного, что позволяет устанавливать несколько модулей, передающих данные по ИК-каналу, в одном направлении. Таким образом модули могут распознаваться машинкой одновременно;
  • Выбрать один из 9 доступных протоколов для передачи данных по ИК-каналу;
  • Разрешать/запрещать работу светодиода, информирующего о передаче данных по ИК-каналу;
  • Управлять подсветкой знаков (включить, выключить, мигать);
  • Работать в автономном режиме — без подключения к шине I2C.

Для работы с модулем дорожный знак предлагаем воспользоваться разработанной нами библиотекой iarduino_I2C_Track, позволяющей реализовать все возможности модуля.

    Подробнее про установку библиотеки читайте в нашей инструкции.

    Смена адреса модуля на шине I2C:

    По умолчанию все модули FLASH-I2C имеют установленный адрес 0х09. Если вы планируете подключать более 1 модуля на шину I2C, необходимо изменить  адреса модулей таким образом, чтобы каждый из них был уникальным. Более подробно о том, как изменить адрес, а также о многом другом, что касается работы FLASH-I2C модулей, вы можете прочесть в этой статье.

    В первой строке скетча необходимо записать в переменную newAddress адрес, который будет присвоен модулю.  После этого подключите модуль к контроллеру и загрузите скетч. Адрес может быть от 0х07 до 0х7F.

    uint8_t newAddress = 0x09;                         // Назначаемый модулю адрес (0x07 < адрес < 0x7F).
                                                       //
    #include <iarduino_I2C_Track.h>                    // Подключаем библиотеку для работы с модулями трассы I2C-flash.
    iarduino_I2C_Track sign;                           // Объявляем объект sign для работы с функциями и методами библиотеки iarduino_I2C_Track.
                                                       // Если при объявлении объекта указать адрес, например, iarduino_I2C_Track sign(0xBB), то пример будет работать с тем модулем, адрес которого был указан.
    void setup(){                                      //
        Serial.begin(9600);                            //
        if( sign.begin() ){                            // Инициируем работу с модулем.
            Serial.print("Найден модуль 0x");          //
            Serial.println( sign.getAddress(), HEX );  // Выводим текущий адрес модуля.
            if( sign.changeAddress(newAddress) ){      // Меняем адрес модуля на newAddress.
                Serial.print("Адрес изменён на 0x");   //
                Serial.println(sign.getAddress(),HEX); // Выводим текущий адрес модуля.
            }else{                                     //
                Serial.println("Адрес не изменён!");   //
            }                                          //
        }else{                                         //
            Serial.println("Модуль не найден!");       //
        }                                              //
    }                                                  //
                                                       //
    void loop(){}                                      //
    

    Данный пример использует библиотеку iarduino_I2C_Track, которая работает только с модулями трассы, а значит позволяет менять только их адреса.

    Смена и сортировка адресов на шине I2C:

    Изменить адрес любого I2C модуля серии «Flash» можно аппаратно, используя установщик адресов FLASH-I2C. Это модуль подключаемый к шине I2C, на плате которого размещён дисплей и кнопки управления, при помощи которых можно узнать количество любых устройств на шине I2C, и менять адреса модулей Flash-I2C не отключая их от шины, что значительно сократит время сборки ваших проектов. Модуль оснащён разъемом USB через который можно запитать как сам модуль, так и шину I2C, или можно запитать шину I2C без использования разъема USB на плате модуля. Установщик адресов пригодиться в проектах с большим количеством модулей Flash-I2C.

    Изменить адрес любого I2C модуля серии «Flash» можно программно, о том как это сделать рассказано в статье Wiki - Программная установка адресов модулей FLASH-I2C. В этой статье рассмотрены примеры с использованием библиотеки iarduino_I2C_Address, которая позволяет получать адреса любых устройств на шине I2C, менять адреса модулей Flash-I2C не отключая их от шины, получать название, номер модели, версию прошивки модулей Flash-I2C, а главное - автоматически сортировать адреса модулей Flash-I2C даже если на шине есть устройства с одинаковыми адресами.

    Примеры:

    В данном разделе раскрыты примеры управления модулем дорожный знак с использованием библиотеки iarduino_I2C_Track. Сама библиотека содержит больше примеров, доступных из меню Arduino IDE: Файл / Примеры / iarduino_I2C_Track.

    Отправка информации о знаке по ИК-каналу:

    Пример отправляет информацию о дорожном знаке по ИК-каналу каждые 200 мс.

    #include <iarduino_I2C_Track.h>       // Подключаем библиотеку для работы с модулями трассы I2C-flash.
    iarduino_I2C_Track sign(0x09);        // Объявляем объект sign для работы с функциями и методами библиотеки iarduino_I2C_Track, указывая адрес модуля на шине I2C.
                                          // Если объявить объект без указания адреса (iarduino_I2C_Track sign;), то адрес будет найден автоматически.
    void setup(){                         //
         sign.begin(MODUL_SIGN, 2,4    ); // Инициируем работу с модулем. Указываем что модуль является знаком 2.4 ПДД "Уступите дорогу".
    //   sign.begin(MODUL_SIGN, 6,8,2  ); // Инициируем работу с модулем. Указываем что модуль является знаком 6.8.2 ПДД "Тупик" (справа).
    //   sign.begin(MODUL_SIGN, 3,24, 5); // Инициируем работу с модулем. Указываем что модуль является знаком 3.24 ПДД "Ограничение максимальной скорости", последняя цифра (0-15) указывает скорость (5 = 50км/ч).
         sign.irProtocol(IR_IARDUINO);    // Указываем протокол передачи данных по ИК-каналу: "IARDUINO".
         sign.backlight(true);            // Включаем подсветку знака.
         sign.indicator(true);            // Разрешаем работу светодиода информирующего об отправке данных.
    }                                     //
                                          //
    void loop(){                          //
         sign.irSend();                   // Выполняем отправку одного пакета данных по ИК-каналу. В одном пакете есть вся информация о знаке.
    //   sign.irWait();                   // Ждём  завершения отправки пакета данных по ИК-каналу. Отправка одного пакета данных в кодировке IARDUINO занимает 26,5 мс.
         delay(200);                      // Ждём 200 мс.
    }                                     //

    В коде Setup() данного скетча можно оставить только функцию begin(), так как параметры определяемые остальными функциями хранятся в памяти модуля и загружаются автоматически.

    Функция begin(), для дорожных знаков, вызывается с параметром MODUL_SIGN и номером знака ПДД, в примере используется знак 2.4 "Уступите дорогу".

    В коде loop() постоянно выполняются функции irSend() и delay(200). Первая отправляет один пакет данных по ИК-каналу, а вторая приостанавливает выполнение скетча на 200мс. Отправка одного пакета по ИК-каналу, в кодировке IR_IARDUINO, занимает 26,5мс.

    Функция irSend() указывает модулю отправить данные по ИК-каналу, но не ждёт их отправки. Значит пакет будет полностью отправлен по ИК-каналу только через 26,5мс после того как скетч уже начал выполнять функцию delay(200). Значит пауза между пакетами данных отправляемых по ИК-каналу составит 200-26,5=173,5мс.

    Если раскомментировать строку с функцией irWait(), то пауза между ИК-пакетами станет равна паузе указанной в качестве параметра функции delay(), так как функция irWait() приостановит скетч на время отправки пакета по ИК-каналу. Стоит отметить что время отправки пакета по ИК-каналу зависит от используемого протокола, а для некоторых протоколов время отправки пакета зависит от данных передаваемых по ИК-каналу.

    Постоянная отправка информации о знаке по ИК-каналу:

    Пример отправляет информацию о дорожном знаке по ИК-каналу не используя ресурсы микроконтроллера.

    #include <iarduino_I2C_Track.h>       // Подключаем библиотеку для работы с модулями трассы I2C-flash.
    iarduino_I2C_Track sign(0x09);        // Объявляем объект sign для работы с функциями и методами библиотеки iarduino_I2C_Track, указывая адрес модуля на шине I2C.
                                          // Если объявить объект без указания адреса (iarduino_I2C_Track sign;), то адрес будет найден автоматически.
    void setup(){                         //
         sign.begin(MODUL_SIGN, 2,4    ); // Инициируем работу с модулем. Указываем что модуль является знаком 2.4 ПДД "Уступите дорогу".
    //   sign.begin(MODUL_SIGN, 6,8,2  ); // Инициируем работу с модулем. Указываем что модуль является знаком 6.8.2 ПДД "Тупик" (справа).
    //   sign.begin(MODUL_SIGN, 3,24, 5); // Инициируем работу с модулем. Указываем что модуль является знаком 3.24 ПДД "Ограничение максимальной скорости", последняя цифра (0-15) указывает скорость (5 = 50км/ч).
         sign.irProtocol(IR_IARDUINO);    // Указываем протокол передачи данных по ИК-каналу: "IARDUINO".
         sign.backlight(true);            // Включаем подсветку знака.
         sign.indicator(true);            // Разрешаем работу светодиода информирующего об отправке данных.
         sign.irAutoSend();               // Указываем модулю постоянно отправлять информацию о знаке по ИК-каналу с паузой между пакетами определённой ИК протоколом по умолчанию ±50%.
    //   sign.irAutoSend(100);            // Указываем модулю постоянно отправлять информацию о знаке по ИК-каналу с паузой между пакетами в 100 мс ±50%.
    //   sign.offline(true);              // Указываем модулю сохранить все полученные настройки в энергонезависимую память и работать в автономном режиме.
    }                                     // Отключить автономный режим можно функцией offline() с параметром false.
                                          //
    void loop(){}                         //
    

    Данный пример отличается от предыдущего тем, что для отправки данных используется функция автоматический отправки данных по ИК-каналу irAutoSend() вместо функции однократной отправки irSend(). Остановить автоматическую отправку данных можно при помощи функции irStop().

    Функция irAutoSend() указывает модулю начать постоянную отправку пакетов данных с информацией о знаке. Если в качестве параметра указать число от 15 до 255 мс, то средняя пауза между отправляемыми по ИК-каналу пакетами будет равна указанному числу миллисекунд. Реальная пауза между отправляемыми пакетами устанавливается хаотично в диапазоне ±50% от указанного числа, что позволяет поставить несколько знаков в одном направлении.

    Если раскомментировать строку с функцией offline(true), то скетч можно запустить однократно. Модуль запомнит полученные настройки, сохранив их в энергонезависимую память. После этого модуль будет работать автономно (сразу после подачи питания), даже если он не подключён к шине I2C, так, как будто он вновь получил все команды кода Setup(). Для работы в автономном режиме удобно использовать батарейный отсек подключаемый к основанию знака. Для отключения автономного режима достаточно однократного обращения к функции offline(false).

    Работа с несколькими знаками:

    Пример определяет 3 знака и указывает им отправлять информацию о себе по ИК-каналу.

    #include <iarduino_I2C_Track.h>       // Подключаем библиотеку для работы с модулями трассы I2C-flash.
    iarduino_I2C_Track sign_1(0x10);      // Объявляем объект sign_1 для работы с функциями и методами библиотеки iarduino_I2C_Track, указывая адрес модуля на шине I2C.
    iarduino_I2C_Track sign_2(0x11);      // Объявляем объект sign_2 для работы с функциями и методами библиотеки iarduino_I2C_Track, указывая адрес модуля на шине I2C.
    iarduino_I2C_Track sign_3(0x12);      // Объявляем объект sign_3 для работы с функциями и методами библиотеки iarduino_I2C_Track, указывая адрес модуля на шине I2C.
                                          //
    void setup(){                         //
         sign_1.begin(MODUL_SIGN, 2,1  ); // Инициируем работу с модулем. Указываем что модуль является знаком 2.1 ПДД "Главная дорога".
         sign_2.begin(MODUL_SIGN, 2,4  ); // Инициируем работу с модулем. Указываем что модуль является знаком 2.4 ПДД "Уступите дорогу".
         sign_3.begin(MODUL_SIGN, 2,3,1); // Инициируем работу с модулем. Указываем что модуль является знаком 2.3.1 ПДД "Пересечение со второстепенной дорогой".
         sign_1.irProtocol(IR_IARDUINO);  // Указываем протокол передачи данных по ИК-каналу: "IARDUINO".
         sign_2.irProtocol(IR_IARDUINO);  // Указываем протокол передачи данных по ИК-каналу: "IARDUINO".
         sign_3.irProtocol(IR_IARDUINO);  // Указываем протокол передачи данных по ИК-каналу: "IARDUINO".
         sign_1.backlight(true);          // Включаем подсветку знака.
         sign_2.backlight(true,false);    // Включаем подсветку знака, диоды включаются через одного.
         sign_3.backlight(2);             // Включаем подсветку знака, заставив её самостоятельно мигать.
         sign_1.indicator(true);          // Разрешаем работу светодиода информирующего об отправке данных.
         sign_2.indicator(false);         // Запрещаем работу светодиода информирующего об отправке данных.
         sign_3.indicator(false);         // Запрещаем работу светодиода информирующего об отправке данных.
         sign_1.irAutoSend();             // Указываем модулю постоянно отправлять информацию о знаке по ИК-каналу.
         sign_2.irAutoSend();             // Указываем модулю постоянно отправлять информацию о знаке по ИК-каналу.
         sign_3.irAutoSend(100);          // Указываем модулю постоянно отправлять информацию о знаке по ИК-каналу с паузой между пакетами в 100 мс ±50%.
    }                                     //
                                          //
    void loop(){}                         //
    

    Данный пример отличается от предыдущего тем, что работает не с одним, а с тремя модулями.

    До запуска данного скетча, нужно указать адрес каждого модуля на шине I2C, в скетче используются адреса 0x10, 0x11 и 0x12. Адреса модулей на шине I2C могут быть любыми, в диапазоне от 0x08 до 0x7E, главное что бы на шине не было модулей с одинаковыми адресами.

    Для смены адресов модулей на шине I2C, можно воспользоваться первым примером данной статьи, или использовать модуль - Установщик адресов FLASH-I2C.

    Отправка информации о знаке с числом по ИК-каналу:

    Некоторые знаки имеют картинку с числовыми обозначениями, например, ограничение скорости 60 км/ч, или рекомендуемая скорость 50 км/ч, ограничение массы и т.д.

    #include <iarduino_i2c_track.h>       // Подключаем библиотеку для работы с модулями трассы I2C-flash.
    iarduino_I2C_Track sign(0x09);        // Объявляем объект sign для работы с функциями и методами библиотеки iarduino_I2C_Track, указывая адрес модуля на шине I2C.
                                          // Если объявить объект без указания адреса (iarduino_I2C_Track sign;), то адрес будет найден автоматически.
    void setup(){                         //
         sign.begin(MODUL_SIGN, 6,2, 1 ); // Инициируем работу с модулем. Указываем что модуль является знаком 6.2 ПДД «Рекомендуемая скорость», указав в качестве третьего аргумента число от 0 до 15. Значение 1  соответствует  10 км/ч.
    //   sign.begin(MODUL_SIGN, 6,2, 2 ); // Инициируем работу с модулем. Указываем что модуль является знаком 6.2 ПДД «Рекомендуемая скорость», указав в качестве третьего аргумента число от 0 до 15. Значение 2  соответствует  20 км/ч.
    //   sign.begin(MODUL_SIGN, 6,2, 3 ); // Инициируем работу с модулем. Указываем что модуль является знаком 6.2 ПДД «Рекомендуемая скорость», указав в качестве третьего аргумента число от 0 до 15. Значение 3  соответствует  30 км/ч.
    //   sign.begin(MODUL_SIGN, 6,2, 10); // Инициируем работу с модулем. Указываем что модуль является знаком 6.2 ПДД «Рекомендуемая скорость», указав в качестве третьего аргумента число от 0 до 15. Значение 10 соответствует 100 км/ч.
    //   sign.begin(MODUL_SIGN, 6,2, 15); // Инициируем работу с модулем. Указываем что модуль является знаком 6.2 ПДД «Рекомендуемая скорость», указав в качестве третьего аргумента число от 0 до 15. Значение 15 соответствует 150 км/ч.
         sign.irProtocol(IR_IARDUINO);    // Указываем протокол передачи данных по ИК-каналу: "IARDUINO".
         sign.backlight(true);            // Включаем подсветку знака.
         sign.indicator(true);            // Разрешаем работу светодиода информирующего об отправке данных.
         sign.irAutoSend();               // Указываем модулю постоянно отправлять информацию о знаке по ИК-каналу.
    }                                     //
                                          //
    void loop(){}                         //
    

    В примере модуль определён как знак 6.2 «Рекомендуемая скорость», но после номера знака ПДД в функции begin() указано число от 0 до 15 кратное изображённому на знаке (1 - 10км/ч, 5 - 50км/ч, 9 - 90км/ч и т.д.).

    Отправка информации о знаке с табличкой под ним по ИК-каналу:

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

    #include <iarduino_I2C_Track.h>                         // Подключаем библиотеку для работы с модулями трассы I2C-flash.
    iarduino_I2C_Track sign(0x09);                          // Объявляем объект sign для работы с функциями и методами библиотеки iarduino_I2C_Track, указывая адрес модуля на шине I2C.
                                                            // Если объявить объект без указания адреса (iarduino_I2C_Track sign;), то адрес будет найден автоматически.
    void setup(){                                           //
         sign.begin(MODUL_SIGN, 3,27,   SIGN_CAR_TRUCK   ); // Инициируем работу с модулем. Указываем что модуль является знаком 3.27 ПДД "Остановка запрещена", добавив параметр SIGN_CAR_TRUCK поясняющий что под знаком установлена табличка "Вид транспортного средства" - действие знака распространяется только на грузовые автомобили.
    //   sign.begin(MODUL_SIGN, 6,4,    SIGN_CAR_LIGHT   ); // Инициируем работу с модулем. Указываем что модуль является знаком 6.4 ПДД "Парковка (парковочное место)", добавив параметр SIGN_CAR_LIGHT поясняющий что под знаком установлена табличка "Вид транспортного средства" - действие знака распространяется только на легковые автомобили.
    //   sign.begin(MODUL_SIGN, 7,14,1, SIGN_DISTANCE_200); // Инициируем работу с модулем. Указываем что модуль является знаком 7.14.1 ПДД "Пункт таможенного контроля", добавив параметр SIGN_DISTANCE_200 поясняющий что под знаком установлена табличка "Расстояние до объекта" - расстояние от знака до объекта (места), находящегося впереди по ходу движения равно 200 метров.
         sign.irProtocol(IR_IARDUINO);                      // Указываем протокол передачи данных по ИК-каналу: "IARDUINO".
         sign.backlight(true);                              // Включаем подсветку знака.
         sign.indicator(true);                              // Разрешаем работу светодиода информирующего об отправке данных.
         sign.irAutoSend();                                 // Указываем модулю постоянно отправлять информацию о знаке по ИК-каналу.
    }                                                       //
                                                            //
    void loop(){}                                           //

    В этом примере модуль отправляет данные о знаке 3.27 «Остановка запрещена» с табличкой указывающей на то, что действие знака распространяется только на грузовые автомобили.

    В качестве примера приведено две закомментированные строки, первая строка определяет модуль как знак 6.4 «Парковка» распространяющийся только на легковые автомобили, а вторая строка определяет модуль как знак 7.14.1 «Пункт таможенного контроля» с расстоянием до объекта 200 метров.

    Описание функций библиотеки:

    В данном разделе описаны функции библиотеки iarduino_I2C_Track для работы с модулями дорожный знак и светофор.

    Данная библиотека может использовать как аппаратную, так и программную реализацию шины I2C. О том как выбрать тип шины I2C рассказано в статье Wiki - расширенные возможности библиотек iarduino для шины I2C.

    Подключение библиотеки:

    • Если адрес модуля известен (в примере используется адрес 0x09):
    #include <iarduino_I2C_Track.h>   // Подключаем библиотеку для работы с модулем трассы.
    iarduino_I2C_Track sign(0x09);    // Создаём объект sign для работы с функциями и методами библиотеки iarduino_I2C_Track, указывая адрес модуля на шине I2C.
    
    • Если адрес модуля неизвестен (адрес будет найден автоматически):
    #include <iarduino_I2C_Track.h>   // Подключаем библиотеку для работы с модулем трассы.
    iarduino_I2C_Track sign;          // Создаём объект sign для работы с функциями и методами библиотеки iarduino_I2C_Track.
    

    При создании объекта без указания адреса, на шине должен находиться только один модуль.

    Функция begin();

    • Назначение: Инициализация работы с модулем светофор или дорожный знак.
    • Синтаксис для дорожного знака: begin( МОДУЛЬ, ГРУППА, НОМЕР [, ПУНКТ] [,ТАБЛИЧКА] );
    • Синтаксис для светофора: begin( МОДУЛЬ, ТИП ПЕРЕКРЁСТКА [, СЕКЦИИ СВЕТОФОРА] );
    • Параметры:
      • uint8_t МОДУЛЬ - может принимать одно из трёх значений:
        • MODUL_SIGN - модуль является дорожным знаком.
        • MODUL_TLIGHT - модуль является светофором.
        • MODUL_TLIGHT_AUTO - модуль является светофором с автопереключением.
          Светофор с автопереключением самостоятельно меняет свои цвета и управляет шлагбаумом. Алгоритм переключений зависит от параметра СЕКЦИИ СВЕТОФОРА. Время свечения цветов задаётся функцией timing().
      • uint8_t ГРУППА - указывается только для дорожного знака. Представлена целым числом от 1 до 7. Дорожные знаки в ПДД обозначаются двумя или тремя числами разделёнными точками, первое число обозначения знака является его группой.
        Например, знак 2.3.4 является знаком 2 группы.
      • uint8_t НОМЕР - указывается только для дорожного знака. Представлен целым числом от 1 до 63. Дорожные знаки в ПДД обозначаются двумя или тремя числами разделёнными точками, второе число обозначения знака является его номером.
        Например, знак 2.3.4 имеет номер 3.
      • uint8_t ПУНКТ - необязательный параметр для дорожного знака. Представлен целым числом от 1 до 15. Если дорожный знак обозначен в ПДД тремя числами разделёнными точками, то в качестве параметра ПУНКТ указывается третье число.
        Например, знак 2.3.4 имеет пункт 4.
        Если знак в ПДД обозначается двумя числами, то параметр ПУНКТ не указывается.
        Некоторые знаки имеют картинку с числовыми обозначениями, например, ограничение скорости 60 км/ч, или рекомендуемая скорость 50 км/ч, ограничение массы и т.д. В таких случаях в качестве параметра ПУНКТ указывается число от 1 до 15 кратное изображённому на знаке (пример: 1 = 10 км/ч, 2 = 20 км/ч, 15 = 150 км/ч).
      • uint8_t ТАБЛИЧКА - необязательный параметр для дорожного знака, который указывается только если под дорожным знаком установлена табличка - знак дополнительной информации уточняющий или ограничивающий действие основного знака. Данный параметр может принимать одно из семи значений:
        • SIGN_CAR_TRUCK - действие знака распространяется только на грузовые автомобили.
        • SIGN_CAR_LIGHT - действие знака распространяется только на легковые автомобили.
        • SIGN_DISTANCE_050 - расстояние до объекта или зона действия знака 50 метров.
        • SIGN_DISTANCE_100 - расстояние до объекта или зона действия знака 100 метров.
        • SIGN_DISTANCE_150 - расстояние до объекта или зона действия знака 150 метров.
        • SIGN_DISTANCE_200 - расстояние до объекта или зона действия знака 200 метров.
        • SIGN_DISTANCE_250 - расстояние до объекта или зона действия знака 250 метров.
      • uint8_t ТИП ПЕРЕКРЁСТКА - указывается для светофора, может принимать значения:
        • TRACK_L - на перекрёстке светофора есть дорога только налево.
        • TRACK_R - на перекрёстке светофора есть дорога только прямо.
        • TRACK_F - на перекрёстке светофора есть дорога только прямо.
        • TRACK_LR - на перекрёстке светофора есть дорога только налево или направо.
        • TRACK_FL - на перекрёстке светофора есть дорога только прямо или налево.
        • TRACK_FR - на перекрёстке светофора есть дорога только прямо или направо.
        • TRACK_LRF - на перекрёстке светофора есть дорога прямо, налево или направо.
        • ПРИМЕЧАНИЕ: Буквы L (left), R (right), F (forward) можно указывать в любом порядке.
      • uint8_t СЕКЦИИ СВЕТОФОРА - необязательный параметр, указывается если светофор оснащён шлагбаумом или секциями поворота. Параметр может принимать значения:
        • SECTION_L - светофор оснащён дополнительной секцией левого поворота.
        • SECTION_R - светофор оснащён дополнительной секцией правого поворота.
        • SECTION_G - светофор оснащён шлагбаумом.
        • SECTION_LR - светофор оснащён секциями левого и правого поворота.
        • SECTION_LG - светофор оснащён секцией левого поворота и шлагбаумом.
        • SECTION_RG - светофор оснащён секцией правого поворота и шлагбаумом.
        • SECTIONT_LRG - светофор оснащён секциями влево, вправо и шлагбаумом.
        • ПРИМЕЧАНИЕ: Буквы L (left), R (right), G (gate) можно указывать в любом порядке.
    • Возвращаемое значение: bool - результат инициализации (true или false).
    • Примечание:
      • По результату инициализации можно определить наличие модуля на шине.
      • Данные передаваемые дорожным знаком по ИК-каналу включают в себя все значения указанные при его инициализации.
      • Данные передаваемые светофором по ИК-каналу включают не только его текущее состояние, но и указанные при инициализации секции и тип перекрёстка, что позволяет автомобилям трассы выбрать направление до проезда светофора.
      • Допускается обращаться к функции begin() без параметров, например, если требуется только проверить наличие модуля на шине I2C или прочитать/изменить его адрес.
    • Пример:
    sign.begin(MODUL_SIGN, 2,4  );       // Инициируем работу с дорожным знаком 2.4 ПДД "Уступите дорогу".
    sign.begin(MODUL_SIGN, 2,3,1);       // Инициируем работу с дорожным знаком 2.3.1 ПДД "Пересечение со второстепенной дорогой".
    sign.begin(MODUL_TLIGHT, TRACK_LFR); // Инициируем работу со светофором без секций поворота, указав что на его перекрёстке есть дорога прямо, налево и направо.
    

    Функция reset();

    • Назначение: Перезагрузка модуля.
    • Синтаксис: reset();
    • Параметры: Нет.
    • Возвращаемое значение: bool - результат перезагрузки (true или false).
    • Пример:
    if( sign.reset() ){ Serial.print( "Модуль    перезагружен" ); }
    else              { Serial.print( "Модуль не перезагружен" ); }
    

    Функция changeAddress();

    • Назначение: Смена адреса модуля на шине I2C.
    • Синтаксис: changeAddress( АДРЕС );
    • Параметры:
      • uint8_t АДРЕС - новый адрес модуля на шине I2C (целое число от 0x08 до 0x7E)
    • Возвращаемое значение: bool - результат смены адреса (true или false).
    • Примечание: Текущий адрес модуля можно узнать функцией getAddress().
    • Пример:
    if( sign.changeAddress(0x12) ){ Serial.print( "Адрес модуля изменён на 0x12" ); }
    else                          { Serial.print( "Не удалось изменить адрес"    ); }
    

    Функция getAddress();

    • Назначение: Запрос текущего адреса модуля на шине I2C.
    • Синтаксис: getAddress();
    • Параметры: Нет.
    • Возвращаемое значение: uint8_t АДРЕС - текущий адрес модуля на шине I2C (от 0x08 до 0x7E)
    • Примечание: Функция может понадобиться если адрес модуля не указан при создании объекта, а обнаружен библиотекой.
    • Пример:
    Serial.print( "Адрес модуля на шине I2C = 0x");
    Serial.println( sign.getAddress(), HEX );
    

    Функция getVersion();

    • Назначение: Запрос версии прошивки модуля.
    • Синтаксис: getVersion();
    • Параметры: Нет
    • Возвращаемое значение: uint8_t ВЕРСИЯ - номер версии прошивки от 0 до 255.
    • Пример:
    Serial.print( "Версия прошивки модуля ");
    Serial.println( sign.getVersion(), HEX );
    

    Функция setPullI2C();

    • Назначение: Управление внутрисхемной подтяжкой линий шины I2C.
    • Синтаксис: setPullI2C( [ФЛАГ] );
    • Параметры:
      • bool ФЛАГ требующий установить внутрисхемную подтяжку линий шины I2C (true или false).
    • Возвращаемое значение:
      • bool - результат включения / отключения внутрисхемной подтяжки (true или false).
    • Примечание:
      • Вызов функции без параметра равносилен вызову функции с параметром true - установить.
      • Флаг установки внутрисхемной подтяжки сохраняется в энергонезависимую память модуля, а значит будет действовать и после отключения питания.
      • Внутрисхемная подтяжка линий шины I2C осуществляется до уровня 3,3 В, но допускает устанавливать внешние подтягивающие резисторы и иные модули с подтяжкой до уровня 3,3 В или 5 В, вне зависимости от состояния внутрисхемной подтяжки модуля.
    • Пример:
    if( sign.setPullI2C(true ) ){ Serial.print( "Внутрисхемная подтяжка установлена." ); }
    if( sign.setPullI2C(false) ){ Serial.print( "Внутрисхемная подтяжка отключена."   ); }
    

    Функция getPullI2C();

    • Назначение: Запрос состояния внутрисхемной подтяжки линий шины I2C.
    • Синтаксис: getPullI2C();
    • Параметры: Нет.
    • Возвращаемое значение: bool - ФЛАГ включения внутрисхемной подтяжки (true или false).
    • Пример:
    if( sign.getPullI2C() ){ Serial.print( "Внутрисхемная подтяжка включена."  ); }
    else                   { Serial.print( "Внутрисхемная подтяжка отключена." ); }
    

    Функция backlight();

    • Функция только для дорожного знака.
    • Назначение: Управление подсветкой дорожного знака.
    • Синтаксис: backlight( РЕЖИМ );
    • Параметры:
      • uint8_t РЕЖИМ - целое число может принимать следующие значения:
        • 0 или false - отключить подсветку знака.
        • 1 или true - включить подсветку знака.
        • 2 - указать модулю самостоятельно мигать подсветкой знака с частотой 1 Гц.
    • Возвращаемое значение: bool - результат управления подсветкой (true или false).
    • Примечание:
      • По умолчанию (при подаче питания в неавтономном режиме) подсветка отключена.
      • Допускается вызов функции с двумя параметрами РЕЖИМ, тогда половина светодиодов подсветки примет состояние указанное первым параметром, а остальные светодиоды подсветки примут состояние указанное вторым параметром.
      • Если обратиться к данной функции при работе с модулем светофор, то каждый параметр будет управлять состоянием стрелок светофора (влево, вправо).
    • Пример:
    sign.backlight(false      ); // Отключить все светодиоды подсветки знака.
    sign.backlight(true       ); // Включить  все светодиоды подсветки знака.
    sign.backlight(2          ); // Мигать всеми светодиодами подсветки знака.
    sign.backlight(true, false); // Включить только половину светодиодов подсветки знака.
    sign.backlight(true, 2    ); // Включить половину светодиодов подсветки знака, а вторую половину заставить мигать.
    

    Функция indicator();

    • Назначение: Разрешение работы светодиода информирующего о передаче данных.
    • Синтаксис: indicator( ФЛАГ );
    • Параметры:
      • bool ФЛАГ разрешающий работу индикаторного светодиода (true или false).
    • Возвращаемое значение: bool - результат управления индикатором (true или false).
    • Примечание:
      • По умолчанию (при подаче питания в неавтономном режиме) работа индикаторного светодиода разрешена.
      • Модуль передаёт данные по ИК-каналу при помощи ИК-светодиода, свечение которого невидимо человеческим глазом. На плате основания модуля, рядом с ИК-светодиодом расположен обычный светодиод, которому данная функция разрешает или запрещает светиться во время сеанса передачи данных по ИК-каналу.
    • Пример:
    sign.backlight(true); // Разрешить работу индикаторного светодиода.
    

    Функция irProtocol();

    • Назначение: Установка протокола для передачи данных по ИК-каналу.
    • Синтаксис: irProtocol( ПРОТОКОЛ );
    • Параметры:
      • uint8_t ПРОТОКОЛ - может принимать одно из следующих значений:
        • IR_NEC - кодирование длинной паузы. Пакет отправляется за 68 мс.
        • IR_SAMSUNG - кодирование длинной паузы. Пакет отправляется за 53...71 мс.
        • IR_RC6 - бифазное кодирование. Пакет отправляется за 23 мс.
        • IR_IARDUINO - кодирование длинной паузы. Пакет отправляется за 26 мс.
    • Возвращаемое значение: bool - результат применения нового протокола (true или false).
    • Примечание:
      • По умолчанию (при подаче питания в неавтономном режиме) модуль использует протокол IR_IARDUINO, так как он поддерживает проверку данных, содержит бит toggle, а пакеты повтора идентичны пакету данных.
      • Остальные протоколы являются стандартом передачи данных по ИК-каналу для пультов ДУ.
      • Имеются ещё 5 протоколов поддерживаемых модулем, но они не должны использоваться для передачи информации о знаках, так как размер данных в их пакетах менее 2 байт:
        • IR_SHARP - кодирование длинной паузы. Пакет отправляется за 16...30 мс.
        • IR_SIRC12 - кодирование длинной импульса. Пакет отправляется за 17...25 мс.
        • IR_SIRC15 - кодирование длинной импульса. Пакет отправляется за 21...30 мс.
        • IR_RC5 - бифазное кодирование. Пакет отправляется за 25 мс.
        • IR_RC5X - бифазное кодирование. Пакет отправляется за 25 мс.
    • Пример:
    sign.irProtocol(IR_IARDUINO); // Использовать для передачи данных протокол «IR_IARDUINO».

    Функция irSend();

    • Назначение: Однократная отправка пакета данных по ИК-каналу.
    • Синтаксис: irSend();
    • Параметры: Нет.
    • Возвращаемое значение: bool - результат получения команды модулем (true или false).
    • Примечание:
      • Функция передаёт модулю команду на передачу данных о знаке или состоянии светофора по ИК-каналу.
      • Функция не ждёт завершения отправки данных по ИК-каналу. Это значит, что для передачи новых данных тем же модулем, нужно выдержать паузу достаточную для завершения отправки предыдущих данных по ИК-каналу. Для этого можно воспользоваться функцией irWait().
    • Пример:
    sign.irSend(); // Выполняем отправку одного пакета данных по ИК-каналу. В одном пакете есть вся информация о знаке или состоянии светофора.
    

    Функция irWait();

    • Назначение: Ожидание завершения отправки данных по ИК-каналу.
    • Синтаксис: irWait();
    • Параметры: Нет.
    • Возвращаемое значение: Нет.
    • Примечание:
      • Функция приостанавливает выполнение скетча, постоянно опрашивая модуль по шине I2C, до тех пор пока ИК-передача не будет завершена, но не дольше 500 мс.
    • Пример:
    if( !sign.irSend() ){ Serial.print( "Не удалось отправить данные" ); }
    else { sign.irWait(); Serial.print( "Данные успешно отправлены"   ); }

    Функция irAutoSend();

    • Назначение: Автоматическая отправка пакетов данных по ИК-каналу.
    • Синтаксис: irAutoSend( [ИНТЕРВАЛ] );
    • Параметры:
      • uint8_t ИНТЕРВАЛ - значение от 25 до 255 мс определяющее средний интервал между пакетами повторов отправляемых по ИК-каналу.
    • Возвращаемое значение: bool - результат получения команды модулем (true или false).
    • Примечание:
      • Функция передаёт модулю команду на постоянную передачу данных о знаке или состоянии светофора по ИК-каналу.
      • Если функция вызвана без параметра, то интервал между ИК пакетами будет установлен в соответствии со стандартным значением для используемого ИК-протокола.
      • Модуль самостоятельно и хаотично меняет интервалы между отправляемыми ИК пакетами в диапазоне ±50% от заданного, что позволяет поставить несколько разных модулей в одном направлении.
      • Остановить процесс отправки ИК пакетов можно обращением к функции irStop().
    • Пример:
    sign.irAutoSend();    // Указываем модулю постоянно отправлять информацию о знаке или светофоре по ИК-каналу с паузой между пакетами определённой ИК протоколом по умолчанию ±50%.
    sign.irAutoSend(100); // Указываем модулю постоянно отправлять информацию о знаке или светофоре по ИК-каналу с паузой между пакетами в 100 мс ±50%.

    Функция irStop();

    • Назначение: Остановка автоматической отправки пакетов по ИК-каналу.
    • Синтаксис: irStop();
    • Параметры: Нет.
    • Возвращаемое значение: bool - результат остановки пакетов (true или false).
    • Примечание:
      • Функция останавливает процесс автоматической отправки данных по ИК-каналу, запущенный функцией irAutoSend().
    • Пример:
    sign.irAutoSend();     // Указываем модулю постоянно отправлять информацию о знаке или светофоре по ИК-каналу с паузой между пакетами определённой ИК протоколом по умолчанию ±50%.
    delay(1000);           // Ждём 1 секунду.
    sign.irStop();         // Останавливаем процесс автоматической отправки данных по ИК-каналу.

    Функция offline();

    • Назначение: Разрешение работы модуля в автономном режиме.
    • Синтаксис: offline( ФЛАГ );
    • Параметры:
      • bool ФЛАГ разрешающий работу модуля в автономном режиме (true или false).
    • Возвращаемое значение: bool - результат вкл/откл автономного режима (true или false).
    • Примечание:
      • Обращение к функции с параметром true - разрешает работу в автономном режиме.
      • Разрешение работы модуля в автономном режиме приведёт к сохранению текущих настроек модуля в его энергонезависимую память, с загрузкой этих настроек из памяти при каждом следующем включении (при каждой подаче питания). Как модуль «себя ведёт» на момент обращения к функции offline(true), так он и будет себя вести при следующих включениях.
        Сохраняются данные указанные следующими функциями:
        • begin().
        • backlight().
        • indicator().
        • irProtocol().
        • irAutoSend().
        • irStop().
        • timing().
        • set().
      • Обращение к функции с параметром false - отключает автономный режим работы.
      • Отключение автономного режима приведёт к тому, что модуль перестанет загружать данные из памяти при подаче питания.
    • Пример:
    sign.begin(MODUL_SIGN, 2,1);  // Инициируем работу с модулем. Указываем что модуль является знаком 2.1 ПДД "Главная дорога".
    sign.backlight(true);         // Включаем подсветку знака.
    sign.irProtocol(IR_IARDUINO); // Указываем протокол передачи данных по ИК-каналу: "IARDUINO".
    sign.indicator(false);        // Запрещаем работу светодиода информирующего об отправке данных.
    sign.irAutoSend();            // Указываем модулю постоянно отправлять информацию о знаке по ИК-каналу с паузой между пакетами определённой ИК протоколом по умолчанию ±50%.
    sign.offline(true);           // Указываем модулю сохранить все полученные настройки в энергонезависимую память и работать в автономном режиме.

    Функция timing();

    • Функция для светофора и/или шлагбаума.
    • Назначение: Установка времени свечения цветов светофора с автопереключением.
    • Синтаксис: timing( ЗЕЛЁНЫЙ, ЖЁЛТЫЙ, КРАСНЫЙ );
    • Синтаксис: timing( ЗЕЛЁНЫЙ, КРАСНЫЙ );
    • Синтаксис: timing( ЖЁЛТЫЙ );
    • Параметры:
      • uint8_t ЗЕЛЁНЫЙ - целое число от 1 до 127 сек определяет длительность свечения зелёного сигнала светофора.
      • uint8_t ЖЁЛТЫЙ - целое число от 0 до 127 сек определяет длительность свечения жёлтого и мигающего зелёного сигнала светофора.
      • uint8_t КРАСНЫЙ - целое число от 1 до 127 сек определяет длительность свечения красного сигнала светофора и закрытия шлагбаума.
    • Возвращаемое значение: bool - результат применения интервалов (true или false).
    • Примечание:
      • Длительности свечения зелёного, мигающего зелёного, жёлтого и красного сигналов используются если светофор работает в режиме автоматического переключения.
      • Длительность свечения жёлтого и мигающего зелёного сигнала, так же используется при полуавтоматическом переключении светофора функцией set().
      • Если обратиться к функции с одним параметром, то будет установлено только время свечения жёлтого (и мигающего зелёного) сигнала светофора. Это удобно при переключении сигналов светофора в полуавтоматическом режиме. Время свечения зелёного и красного останутся без изменений.
      • Если обратиться к функции с двумя параметрами, то будет установлено время свечения зелёного и красного сигнала светофора. Это удобно при автоматической работе модуля со шлагбаумом без светофора. Время свечения жёлтого и мигающего зелёного будет сброшено в 0.
    • Пример:
    tlight.timing(10, 3, 5); // Указываем время свечения зелёного (10сек), жёлтого (3сек) и красного (5сек).
    tlight.timing(10, 5);    // Указываем время свечения зелёного (10сек) и красного (5сек). Время свечения жёлтого сбрасывается в 0.
    tlight.timing(3);        // Указываем время свечения жёлтого (3сек). Время свечения зелёного и красного остаются без изменений.
    

    Функция set();

    • Функция для светофора и/или шлагбаума.
    • Назначение: Управление светофором в ручном или полуавтоматическом режиме.
    • Синтаксис для ручного управления: set( ЦВЕТ, ЗНАЧЕНИЕ ); - до 7 пар параметров.
    • Синтаксис для полуавтоматического управления: set(ДЕЙСТВИЕ [,ДЕЙСТВИЕ][,ДЕЙСТВИЕ]);
    • Параметр:
      • uint8_t ЦВЕТ - может принимать одно из следующих значений:
        • TL_RED - красный сигнал светофора.
        • TL_YELLOW - жёлтый сигнал светофора.
        • TL_GREEN - зелёный сигнал светофора.
        • TL_RIGHT - стрелка светофора вправо.
        • TL_LEFT - стрелка светофора влево.
        • TL_BEEP - звуковой сигнал шлагбаума.
        • TL_GATE - шлагбаум.
        • TL_ALL - все цвета, стрелки, звуковой сигнал и шлагбаум.
      • uint8_t ЗНАЧЕНИЕ - может принимать одно из следующих значений:
        • 0 или false - отключить (для шлагбаума - открыть).
        • 1 или true - включить (для шлагбаума - закрыть).
        • 2 - мигать с частотой 1 Гц.
      • uint8_t ДЕЙСТВИЕ - может принимать одно из следующих значений:
        • TL_FORWARD_ON - переключиться на запрет движения в прямом направлении.
        • TL_FORWARD_OFF - переключиться на разрешение движения в прямом направлении.
        • TL_LEFT_ON - разрешить движение влево.
        • TL_LEFT_OFF - переключиться на запрет движения влево.
        • TL_RIGHT_ON - разрешить движение вправо.
        • TL_RIGHT_OFF - переключиться на запрет движения вправо.
    • Возвращаемое значение: bool - результат получения команды модулем (true или false).
    • Примечание:
      • Функция используется только для модулей инициированных как светофор без автопереключения begin(MODUL_TLIGHT, ... ).
      • В ручном режиме указывается от одной до семи пар параметров (цвет, значение), указанные значения моментально отражаются на состоянии светофора.
      • В полуавтоматическом режиме указывается от одного до трех действий, светофор самостоятельно переключает свои сигналы устанавливая требуемое состояние. Если при инициализации указано, что светофор оснащён шлагбаумом, то действие запрещающее движение прямо (при выключенных поворотах) - закроет шлагбаум, а действие разрешающее движение прямо, влево или вправо - откроет его.
      • Функция допускает комбинировать параметры ручного и полуавтоматического управления.
      • Управление светофором не отменяет работу функции irAutoSend(). Если включена автоматическая отправка состояния светофора по ИК-каналу, то любое изменение состояния светофора будет влиять на автоматически отправляемые по ИК-каналу данные.
    • Пример управления светофором в ручном режиме:
    sign.set( TL_RED,1, TL_YELLOW,1, TL_GREEN,0, TL_BEEP,2 ); // Включить красный, включить жёлтый, выключить зелёный, мигать звуком, остальные сигналы оставить без изменений.
    sign.set( TL_BEEP,2, TL_GREEN,0, TL_YELLOW,1, TL_RED,1 ); // Выполняются те же команды, что и в предыдущей строке, просто их поменяли местами.
    sign.set( TL_LEFT,1, TL_GATE,0);                          // Включить зелёную стрелку влево и поднять шлагбаум.
    
    • Пример управления светофором в полуавтоматическом режиме:
    sign.set(TL_FORWARD_ON);  // Разрешить движение в прямом направлении. Если горит красный, то сначала включится красный и жёлтый, а потом зелёный.
    delay(15000);             // Ждём 15 секунд. Нужно учитывать время затрачиваемое модулем на переключение сигналов светофора.
    sign.set(TL_FORWARD_OFF); // Запретить движение в прямом направлении. Если горит зелёный, то он начнёт мигать, потом включится жёлтый, а затем красный. Если мигал зелёный, то включится жёлтый потом красный, если горел жёлтый то сразу включится красный.
    delay(25000);             // Ждём 25 секунд. Нужно учитывать время затрачиваемое модулем на переключение сигналов светофора.

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

    Функция gateSpeed();

    • Функция только для шлагбаума.
    • Назначение: Установка скорости работы шлагбаума.
    • Синтаксис: gateSpeed( СКОРОСТЬ );
    • Параметр:
      • uint8_t СКОРОСТЬ - значение от 0 (минимальная) до 255 (максимальная).
    • Возвращаемое значение: bool - результат применения новой скорости (true или false).
    • Примечание:
      • Указанная скорость сохраняется в энергонезависимой памяти модуля.
      • Скорость работы шлагбаума не влияет на управление шлагбаумом функцией gateWidth().
    • Пример:
    sign.gateSpeed(127); // Устанавливаем среднюю скорость поднятия / опускания шлагбаума.
    

    Функция gateWidth();

    • Функция только для шлагбаума.
    • Назначение: Управление положением шлагбаума при помощи ШИМ.
    • Синтаксис: gateWidth( ШИРИНА );
    • Параметры:
      • uint16_t ШИРИНА - значение от 0 до 20'000 определяет ширину импульсов ШИМ в мкс.
    • Возвращаемое значение: bool - результат применения новой ширины (true или false).
    • Примечание:
      • В модуле - Шлагбаум светофора, используется сервопривод управляемый сигналом ШИМ на частоте 50Гц. Максимальная ширина импульсов ШИМ не может превышать период их следования, чем и ограничено допустимое значение параметра: T=1/f = 1/50 = 20'000 мкс.
      • Полный диапазон ШИМ для управления сервоприводом используемом в модуле ограничен шириной импульсов от 500±100 мкс (для угла 0°) до 2300±100 мкс (для угла 180°).
      • Рабочий ход шлагбаума 90° в два раза меньше полного хода сервопривода 180°, значит диапазон ШИМ для управления шлагбаумом ограничен шириной импульсов от 950 мкс (шлагбаум открыт) до 1850 мкс (шлагбаум закрыт).
      • Управление шлагбаумом путем указания ширины импульсов ШИМ позволяет задать любое положение шлагбаума, а не положения закрыт/открыт как при управлении им при помощи функции set().
    • Пример:
    sign.gateWidth(1400); // Установить ширину импульсов ШИМ подаваемых на сервопривод шлагбаума в значение 1400 мкс.
    

    Функция gateWidthOpen();

    • Функция только для шлагбаума.
    • Назначение: Указание ширины импульсов ШИМ для полностью открытого шлагбаума.
    • Синтаксис: gateWidthOpen( ШИРИНА );
    • Параметры:
      • uint16_t ШИРИНА - значение от 1 до 19'999 определяет ширину импульсов ШИМ в мкс для полностью открытого шлагбаума.
    • Возвращаемое значение: bool - результат применения новой ширины (true или false).
    • Примечание:
      • Ширина импульсов ШИМ заданная данной функцией сохраняется в энергонезависимой памяти модуля. Это значение используется функциями ручного, автоматического и полуавтоматического управления при открытии шлагбаума.
      • Рекомендуемое значение ширины импульсов ШИМ для полностью открытого шлагбаума равно 950±100 мкс.
      • Для выявления наиболее подходящего значения рекомендуется воспользоваться функцией gateWidth() меняя ширину импульсов до тех пор, пока шлагбаум не станет параллельным трассе, именно это значение и стоит указать функции gateWidthOpen().
    • Пример:
    sign.gateWidthOpen(950); // Указываем модулю, что для полностью открытого шлагбаума требуется подать на сервопривод сигнал ШИМ с длительностью импульсов 950 мкс.

    Функция gateWidthClose();

    • Функция только для шлагбаума.
    • Назначение: Указание ширины импульсов ШИМ для полностью закрытого шлагбаума.
    • Синтаксис: gateWidthClose( ШИРИНА );
    • Параметры:
      • uint16_t ШИРИНА - значение от 1 до 19'999 определяет ширину импульсов ШИМ в мкс для полностью закрытого шлагбаума.
    • Возвращаемое значение: bool - результат применения новой ширины (true или false).
    • Примечание:
      • Ширина импульсов ШИМ заданная данной функцией сохраняется в энергонезависимой памяти модуля. Это значение используется функциями ручного, автоматического и полуавтоматического управления при закрытии шлагбаума.
      • Рекомендуемое значение ширины импульсов ШИМ для полностью закрытого шлагбаума равно 1850±100 мкс.
      • Для выявления наиболее подходящего значения рекомендуется воспользоваться функцией gateWidth() меняя ширину импульсов до тех пор, пока шлагбаум не станет перпендикулярным трассе, именно это значение и стоит указать функции gateWidthClose().
    • Пример:
    sign.gateWidthClose(1850); // Указываем модулю, что для полностью закрытого шлагбаума требуется подать на сервопривод сигнал ШИМ с длительностью импульсов 1850 мкс.

    Формирование данных библиотекой для их передачи по ИК каналу:

    Модуль поддерживает 9 протоколов передачи данных по ИК-каналу: NEC, SAMSUNG, SHARP, SIRC12, SIRC15, RC5, RC5X, RC6 и IR_IARDUINO. Все протоколы являются стандартными протоколами передачи данных по ИК-каналу для пультов ДУ, кроме IR_IARDUINO, который используется модулем по умолчанию. Этот протокол был разработан специально для модулей линейки «Дорожное движение», он позволяет ИК-приёмнику проверить полученные данные на наличие ошибок, а так же отличить пакет данных от пакетов повторов не смотря на то, что они несут одну и ту же информацию. Отправка одного бита данных по протоколу IR_IARDUINO занимает меньше времени, чем в любом другом из перечисленных протоколов.

    • Пакет данных передаваемый по ИК-каналу, вне зависимости от используемого протокола, содержит адрес ИК-устройства (не путать с адресом модуля на шине I2C) и команду для ИК-устройства. Количество бит в адресе ИК-устройства и количество бит в команде ИК-устройства зависит от используемого ИК протокола.
    • Пакеты протоколов NEC, SAMSUNG, RC6 и IR_IARDUINO содержат адрес состоящий из 8 бит и команду из 8 бит. Эти ИК протоколы подходят для передачи данных о дорожных знаках и состоянии светофора, кроме протокола NEC, пакеты повторов которого являются пустыми.
    • Остальные протоколы: RC5, RC5X, SIRC12, SHARP, SIRC15, содержат адрес состоящий из 5 бит и команду состоящую из 6, 7, 7, 8 и 10 бит соответственно. Эти ИК протоколы не подходят для передачи данных о дорожных знаках и состоянии светофора.

    В библиотеке iarduino_I2C_Track, отправка данных по ИК-каналу осуществляется обращением к функции irSend() или irAutoSend(). Функции передают модулю два байта данных (байт адреса ИК-устройства и байт команды ИК-устройства) в которых содержится вся информация о знаке или состоянии светофора. Модуль просто отправляет 2 байта по ИК-каналу.

    Для передачи информации о знаке у байта адреса три старших бита не могут иметь значение 000 (так как группа знака не может быть нулевой), значит байт адреса для знаков сможет принимать значения в диапазоне от 0x20 до 0xFF, что позволяет отличить знак от светофора.

    БАЙТ ИК-АДРЕСА ЗНАКА: БАЙТ ИК-КОМАНДЫ ЗНАКА:
    7654321076543210
    ГРУППА НОМЕР ПУНКТ ТАБЛИЧКА
    • Блог ГРУППА знака состоит из 3 бит и представляет целое число от 1 до 7.
    • Блок НОМЕР знака состоит из 6 бит и представляет целое число от 1 до 63.
    • Блок ПУНКТ знака состоит из 4 бит и представляет целое число от 0 до 15.
    • Блок ТАБЛИЧКА под знаком состоит из 3 бит и представляет целое число от 0 до 7.

    Для передачи информации о светофоре у байта адреса три старших бита всегда имеют значение 000 (так как эти биты не несут информации), а три байта блока ПЕРЕКРЁСТОК не могут иметь значение 000, значит байт адреса для светофоров сможет принимать значения в диапазоне от 0x04 до 0x1F, что позволяет отличить светофор от знака.

    БАЙТ ИК-АДРЕСА СВЕТОФОРА: БАЙТ ИК-КОМАНДЫ СВЕТОФОРА:
    7654321076543210
    000 ПЕРЕКРЁСТОК СЕГМЕНТЫ GT R Y* Y G* G LT RT
    • Блок ПЕРЕКРЁСТОК состоит из 3 бит указывающий направления перекрёстка: L, F, R.
    • Блок СЕГМЕНТЫ состоит из 2 бит указывающих на наличие секций поворота: L, R.
    • Байт ИК-команды информирует о состоянии светофора:
      • GT - шлагбаум опущен.
      • R - светится красный.
      • Y - светится жёлтый, Y* - мигает жёлтый.
      • G - светится зелёный, G* - мигает зелёный.
      • LT - левая / RT - правая секция поворота включена (светится или мигает).

    ИК-адрес 0x01 используется для отправки данных автомобилями трассы. Оставшиеся ИК-адреса 0x02 и 0x03 можно использовать для идентификации данных отправляемых с пультов ДУ.

      Ссылки:




      Обсуждение

      Гарантии и возврат Используя сайт Вы соглашаетесь с условями