Найти тему
Робототехника

Урок 4. Подключение монитора порта и обратная связь от Ардуино.

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

Поэтому познакомимся с такой функцией как монитор порта. Что нам это даст:

  1. Можно вести полноценный обмен сообщениями.
  2. Задавать внутренние параметры во время работы программы
  3. Видеть внутренние параметры программы.
  4. Определять текущее состояние программы.
  5. Наблюдать за работой таймера

Можно много чего еще на самом деле, сегодня часть из этого используем. Конечно же полноценной отладкой это не назовёшь, но видеть процесс работы или не работы можно.

Итак, у нас есть меню инструменты, заходим в него и выбираем монитор порта.

Появляется такое окно:

-2

Его мы не будем, закрывать, а будем использовать в процессе работы.

Теперь напишем небольшую программу по выводу простого счетчика на монитор.

int count = 1; // задали переменную счетчика
void setup() { // начало инициализации
Serial.begin(9600); //установка соединения на скорости 9600
}
void loop() {
Serial.println(count); //Выводим на окно монитора счётчик count
count=count+1; //увеличиваем счетчик на 1
}

В результате получим быстрый вывод на экран чисел с переносом коретки (переход на новую строчку).

-3

Если у Вас получилось, то замечательно. Проведем еще один интересный эксперимент, а именно узнаем сколько времени у нас занимает команда вывода на монитор сообщения. Для этого подключим команду millis вводим пару временнЫх переменных.

int count = 1; // задали переменную счетчика
unsigned long time1; // задали переменную time1
unsigned long time2; // задали переменную time2
unsigned long time3; // задали переменную time3
void setup() {
Serial.begin(9600); //установка соединения на скорости 9600 бод
}
void loop() {
time1=millis(); // Записали в time1 текущее время
Serial.println(count);
time2=millis(); // Записали в time2 текущее время
count=count+1;
time3=millis(); // Записали в time3 текущее время
Serial.println(time1);
Serial.println(time2);
Serial.println(time3); // вывели на монитор все три значения
delay(1000);
}

У вас может возникнуть вопрос, зачем мы это сделали. Отвечаю, с помощью временных меток, time1, time2, time3 и команды millis() мы видим сколько миллисекунд у нас ушло на выполнение команд.

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

Результат достаточно прост и понятен.

-4

Как видим для мегагерцового процессора выполнение команд вывода на монитор и увеличения счётчика почти не изменилось. Обратите внимание как команда delay() просто забирает из жизни контроллера одну секунду. В это время просто нечего не происходит кроме увеличения времени таймера.

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

Пишем программу.

int count = 1;
unsigned long time1;
unsigned long time2;
unsigned long time3;
void setup() {
Serial.begin(9600);
}
void loop() {
time1=micros();
Serial.println(count);
time2=micros();
count=count+1;
time3=micros();
Serial.println(time1);
Serial.println(time2);
Serial.println(time3);
delay(1000);
}

И получаем более интересный результат.

-5

Обратите внимание, что на запись time1 и вывод на монитор ушло 116 микросекунд, на увеличение счётчика и запись time2 ушло всего 4 микросекунды. Также обратите внимание, что на печать всех трех чисел, задержки в 1000 миллисекунд и начала нового цикла ушло 180 микросекунд.

А теперь вполне логичный вопрос, зависит ли время выполнения передачи на монитор информации от длины строки или от типа передаваемых данных.

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

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

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

Задание на дом.

1. Создать подобную программу,

2. Замерить сколько микросекунд займет передача на монитор строки длиной в 10 знаков, 100 знаков и 500 знаков.

3. Сколько символов нужно передать, чтобы вывод на монитор порта занимал 1 секунду?