Полный текст программы для приемника приведен в листинге 11.6. Загрузите программу на плату Arduino, не забыв перед этим переключить перемычки на переходнике ХВее (или отсоединить его).
Листинг 11.6. Программа для приемника беспроводного дверного замка - doorbell/receiving_arduino
// Код приемника беспроводного дверного замка
const int RED=11;
// Выход 11 - красный контакт RGB-светодиода
const int GREEN =10; // Выход 10 - зеленый контакт RGB-светодиода
const int SPEAKER =8; // Выход 8 подключения пьезоизлучателя
char data;
int onLED = GREEN;
- 248 -
int offLED = RED;
int freq = 131;
unsigned long prev_time = 0;
// Таймер для переключения цвета светодиода
// и частоты звука
void setup()
{
Serial.begin(9600);
}
void loop()
{
// Для переключения звука и цвета светодиода
// прошло 100 мс?
if (millis() >= prev_time + 100)
// Переключение светодиода
if (onLED == GREEN)
{
onLED = RED;
offLED = GREEN;
}
else
{
onLED = GREEN;
offLED = RED;
}
// Переключение частоты звука
if ( freq == 261)
{
freq =131;
}
else
{
freq=261;
}
// Корректировка времени для переключения
// Текущее время становится предыдущим
prev_time = millis();
// Проверить наличие данных из последовательного порта
if (Serial.available() > 0)
{
// Чтение байта данных
data = Serial.read();
- 249 -
// Кнопка нажата - включаем звук и свет
if (data == '1')
{
digitalWrite(onLED, HIGH);
digitalWrite(offLED, LOW);
tone(SPEAKER, freq);
}
// Кнопка отпущена - выключаем звук и свет
else if (data == '0')
{
digitalWrite(onLED, LOW);
digitalWrite(offLED, LOW);
noTone(SPEAKER);
}
}
}
Первый оператор if() в основном цикле программы loop() проверяет время, прошедшее с последнего момента установки переменной prev_time. Если прошло более 100 мс, то значения переменных текущего состояния цвета светодиода и частоты звука меняются, в результате получается чередование сигналов.
Второй оператор if() в цикле loop() проверяет наличие и значение входящих последовательных данных. Если приходит 0, свет и звук выключаются, если 1 - цвет и частота звука выставляются в соответствии со значениями переменных onLed, offLed, freq.
ПРИМЕЧАНИЕ
Посмотреть видеоурок, демонстрирующий работу беспроводного звонка, можно на странице http://www.exploringarduino.com/content/ch11. Этот видеофайл доступен также на сайте издательства Wiley.
Резюме
• Что выпускается множество разновидностей модулей ХВее.
• Что для использования радиомодулей ХВее с большинством плат Arduino необходимо конвертировать логические уровни с 5 до 3,3 В.
• Как настроить модули ХВее из программы X-CTU (для ОС Windows) или с помощью терминала (для операционных систем Linux и Mac).
• Как организовать автономное питание платы Arduino.
• Как установить беспроводную связь между компьютером и платой Arduino с помощью модулей ХВее.
• Как с помощью модулей ХВее организовать беспроводную связь между двумя платами Arduino.
• Как реализовать временную задержку с помощью функции millis().
Часть IV. Дополнительные темы и проекты
В этой части
Глава 12. Аппаратные прерывания и прерывания по таймеру
Глава 13. Обмен данными с картами памяти SD
Глава 14. Подключение Arduino к Интернету
Глава 12. Аппаратные прерывания и прерывания по таймеру
Для повторения примеров главы вам понадобятся следующие детали:
• плата Arduino (рекомендуется Uno );
• USB-кабель для программирования платы Arduino;
• кнопка;
• пьезозуммер;
• RGB-светодиод с общим катодом;
• 1 резистор номиналом 10 кОм;
• 1 резистор номиналом 100 Ом;
• 1 резистор номиналом 150 Ом;
• 3 резистора номиналом 220 Ом;
• электролитический конденсатор 10 мкФ;
• микросхема 74НС14 (шесть инверторов с триггерами Шмитта);
• набор перемычек;
• 2 макетные платы.
На странице http://www.exploringarduino.com/content/ch12 можно загрузить программный код, видеоуроки и другие материалы для данной главы. Кроме того, листинги примеров можно скачать со страницы www.wiley.com/go/exploringarduino в разделе Downloads.
Все предыдущие программы работали в синхронном режиме. В связи с этим возникали проблемы, например, выполнение команды delay() останавливает программу на некоторое время и не дает возможности Arduino осуществлять другие действия.
В главе 1 мы создали программный таймер, использующий функцию millis(), что
- 254 -
позволило избежать временного блокирования платы Arduino функцией delay().
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии