Программируем Arduino. Профессиональная работа со скетчами. - [60]
Пример измерения частоты
В этом, втором примере плата Arduino Uno используется для вывода оценки частоты сигнала в монитор последовательного порта (sketch_13_07_FFT_Freq). Большая часть кода в этом скетче повторяет код из предыдущего примера. Главное отличие в том, что после обработки массива data определяется индекс элемента с наибольшим значением и используется для оценки частоты. Затем функция loop выводит это значение в монитор последовательного порта.
В заключение
Цифровая обработка сигналов — сложная тема, ей посвящено множество отдельных книг. Из-за ее сложности я коснулся только наиболее полезных приемов, которые можно попробовать применить при использовании платы Arduino.
В следующей главе мы обратимся к проблеме, возникающей при желании одновременно решать несколько задач в Arduino. С этой проблемой часто сталкиваются те, кто имеет опыт программирования в больших системах, где несколько потоков выполнения, действующих одновременно, считаются нормой.
14. Многозадачность с единственным процессом
Программисты, пришедшие в мир Arduino из мира больших систем, часто отмечают отсутствие поддержки многозадачности в Arduino как существенное упущение. В этой главе я попробую исправить его и покажу, как преодолеть ограничения однопоточной модели встроенных систем.
Переход из мира программирования больших систем
Плата Arduino привлекла множество энтузиастов (в том числе и меня), которые работают в индустрии программного обеспечения не один год, имеют опыт работы в составе коллективов из десятков человек, объединяющих усилия для создания больших программных продуктов, и привыкли решать все возникающие проблемы. Для нас возможность без продолжительного проектирования написать несколько строк кода и практически немедленно получить какое-нибудь интересное проявление в физическом мире является отличным противоядием от привычек, прививаемых в мире большого программного обеспечения.
Однако накопленный опыт часто заставляет нас искать в Arduino то, чем мы привыкли пользоваться в повседневной работе. При переходе из мира больших систем в миниатюрный мир Arduino первое, что сразу бросается в глаза, — это простота разработки программ для Arduino. Приступать к созданию большой системы без использования приемов разработки через тестирование, системы управления версиями и процедуры гибкой разработки было бы слишком опрометчиво. В то же время большой проект для Arduino может состоять всего из 200 строк кода, написанных одним человеком. Если этот человек — опытный программист, он просто будет хранить все тонкости в памяти, не нуждаясь в привлечении инструментов, обычных в большой разработке.
Поэтому прекращайте беспокоиться об управлении версиями, шаблонах проектирования, создании модульных тестов и поддержке рефакторинга в среде разработки и просто почувствуйте радость от простоты Arduino.
Почему вам не нужны потоки выполнения
Если вам так много лет, что вы застали времена, когда большое распространение имели домашние компьютеры, программируемые на Бейсике, вы должны помнить, что компьютеры «в каждый момент времени делают что-то одно». Если игре, написанной на Бейсике, требовалось одновременно перемещать несколько спрайтов, вам приходилось прибегать к уловке с общим циклом, в котором каждый спрайт перемещался на небольшое расстояние.
Этот образ мышления отлично подходит для программирования Arduino. Вместо создания множества потоков выполнения, каждый из которых отвечает за перемещение единственного спрайта, достаточно единственного потока, перемещающего спрайты по очереди небольшими шагами, не блокируя ничто другое.
Компьютеры, кроме тех, что имеют многоядерные процессоры, действительно в каждый момент времени могут делать что-то одно. Операционная система переключает внимание процессора между процессами, действующими в компьютере. В Arduino, где нет операционной системы и потребность в решении нескольких задач одновременно возникает довольно редко, многозадачность можно реализовать самостоятельно.
Функции setup и loop
В каждом скетче требуется реализовать две функции, setup и loop, и такой подход выбран не случайно. Фактически функция loop вызывается снова и снова, и именно по этой причине ее работа не должна блокироваться. Код в функции loop должен действовать виртуозно, чтобы она выполнялась моментально и тут же запускалась вновь.
Оценка, затем действие
Большинство проектов для Arduino предназначено для управления чем-то. Поэтому функция loop часто:
• проверяет нажатие кнопки или превышение данных с некоторого датчика порогового значения;
• выполняет соответствующее действие.
Простым примером может служить реализация мигания светодиода в результате нажатия кнопки.
Следующий пример иллюстрирует это. Однако, как будет показано далее, иногда необходимость ждать, пока выполняется код, управляющий миганием светодиода, бывает совершенно неприемлемой:
// sketch_14_01_flashing_1
const int ledPin = 13;
const int switchPin = 5;
const int period = 1000;
boolean flashing = false;
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(switchPin, INPUT_PULLUP);
}
void loop()
На первый взгляд процедура удаления Windows 8 ничем не отличается от вполне обычного форматирования винчестера с последующей установкой системы. К сожалению, все гораздо сложней.
Вы приобрели нетбук? И теперь хотите понять, чем он отличается от привычного всем ноутбука? Тогда вы держите в руках действительно необходимую книгу. Прочитав ее, вы не только освоите все тонкости, относящиеся к работе с нетбуками, но и узнаете о том, как работать на компьютере. Вы научитесь выбирать мобильный компьютер и аксессуары к нему, узнаете, как установить и настроить операционную систему, научитесь пользоваться пакетом Microsoft Office, выясните, какие программы следует иметь на жестком диске, как защитить сам ноутбук и данные на нем, можно ли модернизировать нетбук и что делать в случае его поломки.
В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера.
В книге даны детальные рекомендации по выбору и покупке ноутбука. Приведены описания работы, настройки и ремонта компонентов мобильного компьютера – винчестера, карты Wi-Fi, PCMCIA, ЖК-экрана и т. д. Читатель найдет в ней подробные рекомендации по ускорению работы мобильных компьютеров с операционными системами Windows 98, Windows XP и Windows Vista, а также пути решения проблем при поломках, попадании ноутбука в воду, заражении вирусами, сбоях программ. Даны полезные советы по увеличению времени работы от батареи, настройкам, доступу в Интернет.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Жизнь современного человека — это движение. Мобильность для нас становится одним из самых важных моментов для работы, для общения, для жизни. Многие из нас сейчас уже не представляют жизнь без сотовых телефонов, которые из средства роскоши превратились в предмет, без которого жизнь современного человека стала просто немыслима. Многие уже оценили все преимущества Bluetooth, GPRS. Эти устройства превратили наши телефоны из средств связи в незаменимых помощников в работе. К сожалению, один из самых главных недостатков этих беспроводных технологий — малый радиус действия и низкая скорость передачи данных, что сейчас становится очень важным фактором для всех нас.