Выбрать главу

4.7 Код, шаг за шагом

Во-первых, вы можете посчитать подобные пояснения ненужными, почти как когда я был в школе и должен был изучать Божественную комедию Данте (каждый итальянский студент должен пройти через это, как и через другую книгу - "I promessi sposi", или "Невеста" - о, кошмар). Для каждой строфы в поэме было написано тысячи строк комменнтариев! Однако, пояснения будут более полезными когда вы начнёте писать свои собственные программы.

// Example 01 :Blinking LED

Комментарий полезен для записи небольших заметок. Предыдущий комментарий просто напоминает что это за программа - Пример 4-1, мигающая светодиодом.

#define LED 13 // LED connected to

               // digital pin 13

#define - эта директива подобна автоматическому поиску и замене в вашем коде; в данном случае она говорит Arduino вставить заменить на число 13 все слова LED в коде. Такая замена - первое, что происходит когда вы нажимаете кнопку "Verify" или "Upload to I/O Board" (вы не увидите результатов этой замены, т.к. она происходит "за сценой"). Мы используем эту команду для того, чтобы показать, что светодиод, которым мы будем мигать, подключён к 13 выводу платы Arduino.

void setup()

Эта строка говорит Arduino, что следующий блок кода будет называться setup().

{ - с такой открывающей скобкой начинается блок кода.

pinMode(LED, OUTPUT); // sets the digital

                      // pin as output

И, наконец, действительно интересная команда. pinMode сообщает Arduino как настроить отдельный вывод. Цифровые выводы могут использоваться как ВХОД (INPUT) и как ВЫХОД (OUTPUT). В данном случае нам требуется вывод для управления светодиодом, так-что мы указываем в скобках номер вывода 13 и его режим OUTPUT. pinMode - это функция, а слова (числа) в её скобках - аргументы. INPUT и OUTPUT - это константы языка Arduino (подобно переменным, константам назначены величины, только величина константы предопределена и никогда не изменяется).

} - закрывающая скобка обзначает конец функции setup().

void loop()

{

loop() - это функция, где вы определяете основное поведение вашего интерактивного устройства. Она будет повторяться снова и снова до выключения платы.

digitalWrite(LED, HIGH); // turns the LED on

Как видно из комментария, digitalWrite() может включить (или выключить) любой вывод, настроенный как ВЫХОД (OUTPUT). Первый аргумент (в данном случае, LED) указывает какой вывод должен быт ьвключён или выключен (помните, LED - это константа со значением, которое указывает на вывод 13, так-что переключаться будет именно он). Второй аргумент может включить вывод (HIGH) или выключить его (LOW).

Представьте себе, что каждый вывод - это крошечная электрическая розетка, такая как те что есть на стенах вашей квартиры. У европейцев там 230 вольт, у американцев - 110 вольт, а Arduino работает с 5 В. В этот момент и происходит волшебство - когда программное обеспечение превращается в аппаратное. Когда вы пишете digitalWrite(LED, HIGH), эта функция подаст на вывод 5 вольт, и если вы подключите к нему светодиод, он загорится. Итак, в этом месте вашего кода инструкция программы влияет на физический мир посредством управления потоком электричества на выводе. Включение и выключение вывода по желанию даёт нам возможность перевести это в что-то видимое для человека; светодиод - наш актюатор.

delay(1000); // waits for a second

Arduino имеет очень простую структуру. Поэтому, если вы хотите чтобы всё происходило с определённой регулярностью, вы говорите: "сиди тихо и ничего не делай до тех пор, пока не придёт время следующего шага". delay() указывает процессору сидеть и ничего не делать столько миллисекунд, сколько было указано в аргументе. Миллисекунды - это тысячные доли секунды; поэтому 1000 миллисекунд равно одной секунде. Итак, светодиод будет включён на одну секунду.

digitalWrite(LED, LOW); // turns the LED off

Эта инструкция выключает светодиод, подобно тому как мы его включили раньше. зачем использовать HIGH и LOW? Это старое соглашение в электронике. HIGH означает что вывод включён, и в случае с Arduino на него будет подано 5 В. LOW означает 0 В. Мысленно вы можете заменить эти аргументы на ВКЛ и ВЫКЛ.

delay(1000); // waits for a second

Здесь мы производим ещё одну задержку. Светодиод будет выключен одну секунду.

} - эта закрывающая скобка обозначает конец функции loop.

Подводя итоги, наша программа делает вот что:

Включает вывод 13 на вывод (только один раз в начале программы)

Входит в цикл loop

Переключает светодиод, подключённый к выводу 13

Ожидает одну секунду

Выключает светодиод на выводе 13

Ожидает одну секунду

Возвращается к началу цикла

Надеюсь, это было несложно. Вы узначете больше о программировании в следующих примерах.

Перед тем как мы перейдём к следующему разделу, я хочу чтобы вы поиграли с кодом. Например, уменьшите величину задержки используя различные цифры для команд включения и выключения, и вы увидите различные виды мигания. В частности, вы должны увидеть что происходит если вы сделаете задержку очень маленькой, но используете разные величины для задержек при включенном светодиоде и при выключенном... будет момент, когда произойдёт странная вещь; это "нечто" будет нам очень полезно когда мы будет изучать широтно-импульсную модуляцию.

4.8 Что мы будем создавать

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

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

4.9 Что такое электричество?

Если вы делали что-нибудь по дому, электроника вам не покажется сложной для понимания. Чтобы понять как работают электричество и электрические схемы, лучше всего представлять вещи как "водяная аналогия". Давайте создадим простое устройство, такое как портативный вентилятор с питанием от батарей (рис. 4-4).

Рис. 4-4. Портативный вентилятор

Если разобрать вентилятор на части, мы увидим что он состоит из маленькой батарейки, нескольких проводов и электромоторчика. Один из проводов, идущих от батареи к моторчику, разорван выключателем. Если у вас новая батарейка и вы включите выключатель, моторчик начнёт крутиться, охлаждая вас. Как это работает? Представьте себе что батарейка - это водяной резервуар с насосом, выключатель - кран, а электромотор - колесо, подобное тем что вы видели у водяных мельниц. Когда вы откроете кран, вода потечёт из насоса и будет приводить водяное колесо в движение.