Затем выберите порт: Инструменты | Порти задайте номер порта СОМ, который соответствует вашей плате. Если плата не подключена, то нужный порт в списке не появится.
Примечание
Микроконтроллер АТМеда2560 оснащен энергонезависимой памятью (EEPROM) емкостью 4096 байт. В этой памяти хранятся настроечные константы прошивки MultiWii. Перед загрузкой новой прошивки EEPROM необходимо очистить. В противном случае прошивка может работать неправильно, либо не заработает вообще.
Для очистки EEPROM загрузите специальный короткий скетч из папки готовых примеров Arduino: Файл | Образцы | EEPROM | eeprom_dear. Скетч откроется в новом окне, но настройки платы и порта останутся прежними.
Примечание
Имейте в виду, что загрузка любой новой программы в память контроллера стирает записанную ранее. Если вы взяли чужой контроллер на время или не уверены, что хотите уничтожить имеющуюся прошивку, то не загружайте в память контроллера новые программы!
В строке
for (int i = 0; i < 512; i++)
исправьте значение 512 на 4096, чтобы очистить EEPROM полностью:
for (int i = 0; i < 4096; i++)
Теперь нажмите кнопку со стрелкой для загрузки программы в микроконтроллер. В течение нескольких секунд произойдет компиляция исходного текста программы в машинные коды, затем плата весело замигает светодиодами во время загрузки прошивки. Примерно через три секунды после загрузки светодиод А на плате начнет светиться постоянно. Это означает, что процесс очистки EEPROM завершен и контроллер готов к записи и настройке новой прошивки. Файлы примеров Arduino IDE защищены от записи, поэтому сохраните исправленный скетч очистки EEPROM в другое удобное место.
Память EEPROM нужно чистить, если:
• это первая загрузка прошивки в память контроллера, или предыдущая версия неизвестна;
• меняется версия прошивки;
• меняется тип коптера;
• меняется состав датчиков платы или их тип;
• после записи новой прошивки коптер стал вести себя неадекватно.
В остальных случаях, когда вы ограничиваетесь правкой настроечных параметров, стирать EEPROM перед повторной записью прошивки не надо.
Настройка базовых опций кода прошивки
Ранее вы скачали и разархивировали проект прошивки MultiWii. Проект состоит из нескольких файлов. Файлы скетчей имеют расширения ino или срр; файлы так называемых заголовков имеют расширения h. В среде Arduino имя папки проекта обязательно совпадает с именем главного файла проекта. Например, если папка носит имя MultiWiiAIOP, то главный файл в этой папке называется MultiWii_AIOP.ino.
Откройте главный файл двойным щелчком или через меню Файл | Открыть. При этом в среде Arduino IDE откроются все файлы проекта. Сейчас нас интересует только файл config.h. В нем подробно расписана конфигурация прошивки. Остальные файлы, если вы не имеете четкого понимания своих действий, лучше не трогать.
Механизм конфигурирования прошивки MultiWii, как, впрочем, и многих других программ для микроконтроллеров, основан на так называемых "дефайнах" — служебных директивах компилятора #define (определить). После этой директивы через пробел следуют имя параметра и его значение. В коде программы вместо конкретного значения указывают имя параметра. Во время обработки программного кода компилятор отыскивает имя параметра и автоматически подставляет вместо него соответствующее значение.
Например, если определен некий параметр
#define MY_PARAMETER 10
и он несколько раз используется в разных местах очень длинной программы, то впоследствии нам достаточно лишь один раз заменить его значение в определении, а остальные замены сделает компилятор. Для удобства настройки все необходимые определения вынесены в отдельный файл проекта и снабжены комментариями.
Наличие или отсутствие определений, указанных без значения, используется для того, чтобы иметь возможность скомпилировать разные варианты программы. Например, имеются два определения
#define HELICOPTER
//#define AIRPLANE
при этом второе определение закрыто символом комментария // и невидимо для компилятора. Теперь, если в программе встретятся такие два фрагмента:
#ifdef HELICOPTER
Фрагмент программы 1;
#endif
#ifdef AIRPLANE
Фрагмент программы 2;
#endif
то компилятор обработает первый фрагмент кода и проигнорирует второй, потому что определение airplane закомментировано и не существует. И наоборот, если мы закомментируем определение helicopter и раскомментируем airplane, to будет скомпилирован второй фрагмент кода.
Существуют и более сложные условные конструкции директив компилятора, но нам сейчас достаточно знать два метода, применяемые при пользовательском конфигурировании прошивки: задание численных значений и комментирование/раскомментирование имен параметров.
Читать дальше