====== Робот - полицейский ======
====== Описание ======
Попробуем воссоздать из робота полицейскую машину. Или машину скорой помощи. Для этого поместим на робота мигалки и сигнализацию. И оставим режим движения по объезду препятствий.

===== Дополнительные модули =====
Предполагается что у Вас уже есть набор Минибот, и вы собрали его по инструкции в руководстве пользователя. Тогда дополнительно понадобится:

^ Что нужно                                                                                                               ^  Кол-во, шт  ^
| [[https://smartelements.ru/collection/moduli/product/modul-adresnyh-svetodiodov-h4|Модуль адресных светодиодов]] |  2           |
| [[https://smartelements.ru/collection/moduli/product/modul-zummera-2|Модуль зуммера]] |  1           |

===== Библиотеки =====
  * [[http://files.smartelements.ru/know_libs/robotSE.zip|Библиотека robotSE (для робота)]]
  * [[http://files.smartelements.ru/know_libs/NewTone.zip|Библиотека NewTone (для зуммера)]]
  * [[http://files.smartelements.ru/know_libs/Adafruit_NeoPixel.zip|Библиотека Adafruit_NeoPixel (для модуля светодиодов)]]

===== Порядок действий =====
==== Шаг 1. Пересоберите робота ====
  - С помощью отвёртки, входящей в комплект набора, снимите с платформы модуль ИК-приёмника
  - С помощью отвёртки, входящей в комплект набора, прикрепите на место модуля ИК-приёмника - [[https://smartelements.ru/collection/moduli/product/modul-zummera-2|Модуль зуммера]]
  - Присоедините модуль зуммера с помощью трёхпроводного шлейфа к выводам D10 мотор шилда.
  - С помощью отвёртки, входящей в комплект набора, снимите с платформы модуль 4-х разрядного индикатора
  - С помощью отвёртки, входящей в комплект набора, прикрепите на нижние крепления модуля 4-х разрядного индикатора - два [[https://smartelements.ru/collection/moduli/product/modul-adresnyh-svetodiodov-h4|модуля адресных светодиодов]]
  - Присоедините один из модулей адресных светодиодов с помощью трёхпроводного шлейфа к выводам D11 мотор шилда.
  - Соедините между собой модули адресных светодиодов трёхпроводным шлейфом.

==== Шаг 2. Установите библиотеки ====
Установите в Arduino IDE библиотеки, которые представлены по ссылкам выше. О том как устанавливаются библиотеки описано в руководстве пользователя, входящем в комплект, либо посетите соответствующий [[main:info:libs|раздел Базы Знаний]].

++++ Зачем нужна библиотека для зуммера?|У вас мог возникнуть вопрос, зачем нужна отдельная библиотека для зуммера, если в Arduino IDE уже входит функция tone(), позволяющая работать с зуммером. Дело в том, что библиотека работающая с ультразвуковым дальномером и функция tone() вместе работать не смогут, вызывая конфликты. Для того чтобы этого избежать мы и будем пользоваться дополнительной библиотекой для зуммера. ++++

<WRAP center round important 60%>
Внимание! Подразумевается что библиотеки для входящих в набор модулей вы уже установили так как это описано в руководстве пользователя!
</WRAP>


==== Шаг 3. Загрузите скетч на контроллер ====
<file Arduino>
#include <robotSE.h>              //Подключение библиотеки для работы с платформой.
#include <NewPing.h>              //Подключение библиотеки для работы с дальномером.
#include <Adafruit_NeoPixel.h>    //Библиотека для работы со светодиодами
#include <NewTone.h>              //Библиотека для работы с зуммером

const int min_distance = 10;    //Минимальное расстояние в сантиметрах
const int PIN_BUZ = 10;         //Вывод для подключения модуля зуммера
const int PIN_LED = 11;         //Вывод подключения адресных светодиодов
boolean nowRed = true;          //Флаг для вывода цвета

robotSE robot; //создание объекта робота

NewPing sonar(8, 9, 400); //Создание объекта дальномера. - (trig, echo, max_dist)

Adafruit_NeoPixel pixels(8, PIN_LED); //создание объекта адр. светодиодов

void setup() {
  pinMode(PIN_BUZ, OUTPUT);     //Установка вывода зуммера как выходной
  pixels.begin();               //инициализация светодиодов
}

void loop() {
  
  int cm = sonar.ping_cm();    //Получение расстояния с датчика.

  if (cm == 0) {               //Если получено нулевое значение,
    return;                    //измерить расстояние еще раз.
  }
  
  //нумерация светодиодов начинается с 0
  for(int i=0; i<8; i++) { 
    pixels.setPixelColor(i, pixels.Color(nowRed?255:0, 0, nowRed?0:255)); //установка цвета свечения для очередного светодиода
    pixels.show();    //показать цвет светодиода 
    nowRed = !nowRed; //смена флага
  }

  NewTone(PIN_BUZ, nowRed?294:396);

  if (cm < min_distance) {    //Если расстояние меньше минимального,
    robot.move_stop();        //остановиться.
    robot.move_back();        //Немного отъехать назад.
    delay(1000);              //Задержка величиной 1 с.
    robot.move_left();        //Выполнить поворот.
    delay(500);               //Задержка 200 мс.
  } 

  robot.move_forward();         //Движение в случайную сторону
  delay(1000);                  //Задержка 1 сек.
  nowRed = !nowRed;             //смена флага
}
</file>

==== Шаг 4. Робот вперёд! ====
Отсоедините кабель от контроллера, поставьте платформу на ровную поверхность и переведите переключатель питания в положение ON. Робот будет передвигаться прямо до препятствия, стараясь обогнуть его. При этом у робота включена световая и звуковая сигнализация. Световая сигнализация попеременно меняет цвет (красный и синий), звуковая - меняет тон. Получаем настоящую машину экстренных служб.