простейшая отладка прошивки arduino

Отладка программ Arduino

В прошлой статье мы создали свами многоуровневое меню на Arduino используя lcd shield с 16 символьным 2 строчным дисплеем, разработали логику работы самого меню и изменения яркости светодиодов. Меню очень сильно завязано на логику и к сожалению, мы не можем посмотреть штатными средствами в внутрь Arduino для того что бы узнать какая переменная чему равна или по какой ветке пошел оператор if. Давайте исправим это!

 

Отладка прошивки

Хоть Arduino и построена на микроконтроллере atmel atmega которые поддерживают отличный инструментарий для отладки прошивки микроконтроллера во время исполнения кода, но не одна плата Arduino ее не поддерживает так же как среда разработки, Но это не повод расстраиваться, дальше мы разберемся как мы можем получить информацию о значениях переменных во время выполнения нашей программы.

Отладочную информацию можно выводить на дисплей, что в нашем случае не очень удобно из-за его маленького размера, моргать светодиодом что так же не удобно из-за большого количества переменных и логических операций. Для отладки мы будем выводить информацию на компьютер по uart протоколу, для этого не потребуется модернизировать схему или писать программу для компьютера, мы будем просто выводить данные из платы в любую терминальную программу, приступим!

Подключение к компьютеру.

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

Для этого откроем пример из Arduino ide Примеры -> Communications -> PhysicalPixel разберемся в коде и немного изменим его под нашу схему.

Открыв пример, мы увидим следующее (комментарии и лишний код удалены):

Теперь изменим его до следующего состояния

Как управлять нашей программой? Для этого в Arduino ide перейдем Инструменты -> Монитор порта.

Откроется окно, через которое мы сможем передавать данные в Arduino написав команду в верхней строке и получить ответ если плата его вернет в нижней. Проверяем что бы все работало: Если мы отправим 1 то должен загореться первый светодиод ели 3 то второй. И команды 2 и 4 должны тушить каждый свой светодиод.

Как видим ничего сложного нет, мы передали на плату Arduino команду, и она ее выполнила. Теперь давайте добавим обратной связи, сделаем так что бы программа посылала нам информацию о том что она сделала, для этого нам нужно добавить в код следующею строку: Serial.println(“Ваш текст”);

Приведем нашу программу к следующему виду:

 

 

Теперь вернемся к нашей прошлой прошивке и выведем в com порт значения переменных в реальном времени. Для этого добавим после всех блоков if и перед case следующий код:

Serial.print(«item= «);  название выводимой переменной (просто текст

Serial.println(item, DEC); сама переменная и команда DEC которая говорит о том что бы вывести переменную как число.

Для вывода всех переменных нам понадобится добавить следующий код

Serial.print(«led1= «);  //выводим надпись led1= без переноса строки

Serial.println(led1, DEC); // выводим значение переменной led1 и переносим строку

Serial.print(«led2= «);

Serial.println(led2, DEC);

Serial.print(«item= «);

Serial.println(item, DEC);

Serial.print(«menuLevel= «);

Serial.println(menuLevel, DEC);

 

И наша программа будет выглядеть так:

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

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

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

Метки: , , , . Закладка Постоянная ссылка.

Добавить комментарий