Уроки по Arduino: Урок 9

Уроки по Arduino: Урок 9

Урок 9: Электронное пианино

План:

1. Переход с S4A на С++

2. Внешний вид программы IDE Arduino

3. Основные функции

4. Управление пьезоизлучателем

 

 

 

Теоретическая часть

 

1. Переход с S4A на С++

Программировать Arduino можно не только в визуальной среде S4A, но и написанием кода на языке программирования Processing/Wiring. Этот язык программирования основан на языке. С++, с добавлением некоторых функций, которые облегчают работу с Arduino.
Программирование на языке С++ позволяет использовать больше возможностей Arduino. Например, любой порт можно настроить как вход и как выход, а количество используемых портов ограничивается только их наличием на плате.

 

 

2. Внешний вид программы IDE Arduino

 

Для программирования плат Arduino существует специальная интегрированная среда разработки IDE Arduino. Рассмотрим внешний вид программы.

IDE Arduino

Вверху, под строкой заголовка находится строка Меню, со следующими пунктами: Файл, Правка, Скетч, Настройки, Сервис.
Под строкой меню располагается строка инструментов, на которую вынесены часто используемые команды:

 — Проверить

 — Загрузить

 — Создать

 — Сохранить

 — Открыть

 — Монитор порта

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

 

 

3. Основные функции

Программа, написанная в IDE Arduino, называется скетчем. Каждый скетч должен состоять как минимум из двух функций:
Функция – структурная единица программы, которая имеет имя и сдержит в себе некоторую последовательность действий.

void setup()
{
действия;
}

void loop()
{
действия;
}

В начале программы, перед функцией setup, обычно, объявляются переменные. После включения питания платы первой выполняется функция setup. Она выполняется только один раз. Обычно в ней инициализируются режимы работы портов: порты, к которым подключены различные датчики, устанавливаются как входы, а порты с исполнительными устройствами как выходы.
Код, написанный в функции loop() начинает выполняться после выполнения функции setup(), и выполняется в бесконечном цикле снова и снова. В этой функции выполняется основная работа: различные вычисления, получение значений датчиков, вывод значений на порты.
В таблице ниже приведены в соответствия блоки из Skretch и их аналоги — функции из С++.

 

Блок из Skretch

Аналог в С++

Описание

sensor value digitalRead(2); Возвращает значение ИСТИНА, если на порте значение HIGH и ЛОЖЬ, если LOW. value of sensor digitalRead(2); Возвращает значение ИСТИНА, если на порте значение HIGH и ЛОЖЬ, если LOW. analogRead(0); Возвращает аналоговое значение с заданного порта analog value analogWrite(5,255); Посылает на порт аналоговое значение от 0 до 255. Функция в С++ может посылать аналоговое значение и на дискретные и на аналоговые порты. digital off analogWrite(5,255); Посылает на порт аналоговое значение от 0 до 255. Функция в С++ может посылать аналоговое значение и на дискретные и на аналоговые порты. digitalWrite(10,LOW); Посылает на заданный порт значение LOW digital on digitalWrite(10, HIGH); Посылает на заданный порт значение HIGH ждать секунд digitalWrite(10, HIGH); Посылает на заданный порт значение HIGH delay(1000); Задержка в миллисекундах. если или  if (/*условие*/)
{ /*
дейсвия, выполняемые, если выполняется условие */
}
else { /*
действия, выполняемые, если условие не выполняется */
};  Выполняется аналогично предыдущей функции, но после слова else указываются действия, которые должны выполняться, если условие ложно.  если  if (/*условие*/)
{ /*
дейсвия, выполняемые, если выполняется условие */
}
else { /*
действия, выполняемые, если условие не выполняется */
};  Выполняется аналогично предыдущей функции, но после слова else указываются действия, которые должны выполняться, если условие ложно.  
 if (/*условие*/)
{ /*
дейсвия, выполняемые, если выполняется условие */
};  Выполняет действия, указанные между фигурных скобок, если условие истинно. Если выполняемое действие одно, то оно может не заключаться в фигурные скобки. Условие записывается с помощью следующих операторов отношения: == — проверка на равенство, < — меньше, > — больше, <= — меньше или равно, >= больше или равно, != — не равно.  всегда  void loop()
{
/*действия, которые будут выполняться постоянно, пока включено питание платы*/
}  Одна из обязательных функций. Внутри располагаются действия, которые будут выполняться постоянно, пока включено питание.

 

4. Управление пьезоизлучателем

 Для управления пьезоизлучателем существует функция tone(pin, frequency) или tone(pin, frequency, duration).
В скобках указывается номер пина, к которому подключен пьезоизлучатель и, через запятую, частота звучания (от 20 до 20000Гц). После частоты звучания, необязательно может указываться длительность звучания в миллисекундах.

 

 

 

Практическая часть

 1. Подключить пять кнопок и пьезоизлучатель. Сделать подобие пианино, настроив частоту звучания пьезодинамика в зависимости от нажатой кнопки.

Шаг 1. Соберем схему.

 

Шаг 2. Напишем стандартную структуру скетча.

void setup()
{}

void loop()
{}

Настроим порт, к которому подключен пьезоизлучатель на выход.

void setup()
{
pinMode(2, OUTPUT);
}

void loop()
{}

С помощью оператора if включаем пьезодинамик при нажатии одной кнопки и выключаем, если кнопка не нажата.

void setup()
{
pinMode(2, OUTPUT);
}

void loop()
{
if (digitalRead(3) == 1)
tone(2, 3500);
else
noTone(2);
}

Аналогичным образом обрабатываем нажатие остальных кнопок.

void setup()
{
pinMode(2, OUTPUT);
}

void loop()
{
if (digitalRead(3) == 1)
tone(2, 3500);
else if (digitalRead(4) == 1)
tone(2, 3200);
else if (digitalRead(5) == 1)
tone(2, 2900);
else if (digitalRead(6) == 1)
tone(2, 2600);
else if (digitalRead(7) == 1)
tone(2, 2300);
else
noTone(2);
}

 

 

 

Перейти к 8-му уроку Перейти к 10-му уроку Перейти к оглавлению

Центр робототехники "BOTEON".
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: