У нас уже была серия статей про программирование Arduino/Freeduino/CraftDuino. Там мы рассмотрели структуру программы, константы и специфичные для Arduino функции, которые собственно и составляют язык Wiring.
Теперь же настала пора практических занятий 🙂
0. Начало
Пожалуй, всё же стоит обозначить элементы управления Arduino IDE
Итак, слева направо:
— компиляция (оригинальное название — проверка) кода
— стоп (остановка монитора COM-порта)
— новый скетч
— открыть скетч
— сохранить скетч
— загрузить скетч в микроконтроллер Arduino/Freeduino
— монитор последовательного (COM) порта
Самые важные для нас – первая и две последние кнопки 🙂
Т.о. цикл разработки скетча для Arduino можно представить так:
Написание кода – компиляция – загрузка в МК.
Кажется — всё просто 🙂
Попробуем снова загрузить Blink 🙂
Открываем тестовый скетч из Examples — Digital — Blink
и нажмём кнопку компиляции
Компиляция прошла без ошибок о чём нам и сообщают – «Done compiling» 🙂
Остаётся подключить нашу ардуину к питанию и COM-порту и нажать кнопку выгрузки скетча на МК.
Во время выгрузки будут мигать светодиоды Rx и Тx – сигнализирующие приём и передачу сообщений через последовательный интерфейс ардуины 🙂
Если выгрузка прошла успешно – мы получим сообщение: «Done uploading.»
Т.к. джампер на плате установлен в Autoreset enable плата сама перезагрузится, произойдёт заливка скетча, снова перезагрузка и через 10 секунд ардуина начнёт весело мигать светодиодом 🙂
Впрочем, светодиод даже не обязательно вставлять в разъём – на плате уже есть сигнальный светодиод, подключённый к 13-му цифровому порту ардуины через ограничительный резистор.
Используя провода, изготовленные из витой пары,
схему можно перенести на макетную плату.
А если всё делать по-честному и подключать светодиод через ограничительный резистор, то получится такая простейшая схема:
,которая на макетной плате будет выглядеть так:
Теперь немножко переделаем скетч Blink т.о., чтобы плата сообщала нам через COM-порт когда светодиод горит, а когда нет.
Для этого нужно добавить всего три строчки кода:
int ledPin = 13; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); // инициализация работы с COM-портом } void loop() { digitalWrite(ledPin, HIGH); Serial.print("H"); // светодиод горит – пишем H delay(1000); digitalWrite(ledPin, LOW); Serial.println("L"); // светодиод погасили – пишем L delay(1000); }
Компилируем и загружаем скетч в МК.
Светодиод мигает, а сообщения от платы мы можем увидеть через монитор последовательного порта.
Ура! Работает 🙂
Сообщения из последовательного порта можно смотреть любой терминальной программой, например tutty:
выбираем наш COM-порт и любуемся:
Но что это – при любой новой попытке просмотреть сообщения COM-порта наша плата перезагружается!
Всё дело в джампере Autoreset enable, который так удобен при загрузке новых скетчей 🙂
Если джампер снять, то теперь каждое новое подключение к последовательному порту не будет вызывать перезагрузку ардуины, но новые скетчи придётся загружать после ручного нажатия на кнопку Reset, расположенную на плате.
читать далее: 1. Цифровой ввод — кнопка
По теме
Подготовка к работе с Arduino/CraftDuino
Программирование Arduino — статьи.
Книги про Arduino
книга на русском языке: Блокнот программиста Arduino (PDF 1.3 Mb)
Шпаргалка по Arduino
Возможные ошибки при работе с Arduino
Arduino, термины, начало работы
Разновидности плат Arduino, а также про клоны, оригиналы и совместимость
КМБ для начинающих ардуинщиков
Состав стартера (точка входа для начинающих ардуинщиков)
14 комментариев на «“Практическое программирование Arduino/CraftDuino — начало”»
а что нужно сделать, чтобы отключить autoreset, где расположен этот джампер?
У меня плата freeduino v1.16
сковырнуть конденсатор CRS или порезать дорожку идущую к нему
(лучше порезать — потом восстановить проще будет, при желании=)
както так:
спасибо, пока правда воспользуюсь программным способом, всё равно свой софт писать
Помогите, пожалуйста.
Ubuntu 10.10
Библиотека arduino 22
Запускаю Example-Servo-Knob
Отправляю на плату, а в ответ
In file included from Knob.cpp:4:
/home/sergei/arduino-0022/libraries/Servo/Servo.h:48:22: error: inttypes.h: Нет такого файла или каталога
In file included from Knob.cpp:6:
/home/sergei/arduino-0022/hardware/arduino/cores/arduino/WProgram.h:4:20: error: stdlib.h: Нет такого файла или каталога
/home/sergei/arduino-0022/hardware/arduino/cores/arduino/WProgram.h:5:20: error: string.h: Нет такого файла или каталога
/home/sergei/arduino-0022/hardware/arduino/cores/arduino/WProgram.h:6:18: error: math.h: Нет такого файла или каталога
/home/sergei/arduino-0022/hardware/arduino/cores/arduino/WProgram.h:8:27: error: avr/interrupt.h: Нет такого файла или каталога
In file included from /home/sergei/arduino-0022/hardware/arduino/cores/arduino/WProgram.h:10,
from Knob.cpp:6:
/home/sergei/arduino-0022/hardware/arduino/cores/arduino/wiring.h:28:20: error: avr/io.h: Нет такого файла или каталога
In file included from /home/sergei/arduino-0022/hardware/arduino/cores/arduino/WProgram.h:13,
from Knob.cpp:6:
/home/sergei/arduino-0022/hardware/arduino/cores/arduino/WCharacter.h:23:19: error: ctype.h: Нет такого файла или каталога
Где же все эти файлы брать???
возможно, поможет страничка:
http://www.arduino.cc/playground/Linux/Debian
скорее всего проблема в зависимостях:
так же, нашлось небольшоеруководство :
спасибо большое :-)) Первое помогло…
а как отключить Autoreset enable в arduino mega 2560?
нашел ответ, я разорвал цепь, но теперь не хотят загружаться скетчи
нажимаю кнопку аплоад, потом жму ресет, идет компилинг но полностью скетч не загружается
Жать надо позже, когда мигнёт светодиод RX.
Но попасть в нужный момент может оказаться не так просто=)
Дрампер можно запаять — надо загрузить — замкнули, не нужен авторезет — разомкнули, как на крафтдуино=)
А с какой целью, позвольте полюбопытствовать?
Припаял я переключатель.
У меня почему то при заливки выше приведенного скетча программы Tutty ничего не показывал думал из за Autoreset enable, но в итоге все равно ничего не показывает, хотя встроенная консоль IDE все отображает.
Зугрузил скетч с посылкой данных в терминал, видно как led мигает, идет передача. Гаснет-идет передача. Но монитор порта ничего не выводит. Tutty тоже. baud вна мониторе стоит 9600. Что делать?
если сам порт выбран правильно, то всё должно работать 🙂