Arduino:Примеры/CurieTimer1Interrupt
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Моргание светодиодом с разной частотой[1]
Этот пример показывает, как использовать один из таймеров, имеющихся у микроконтроллера Arduino или Genuino 101. Речь о таймере-1 (Timer 1), для работы с которым есть специальная библиотека Curie Timer One. Прерывания в данном примере будут использоваться, чтобы временно выйти из функции delay(), останавливающей выполнение кода, переключить светодиод, а затем снова вернуться к delay(). В результате первые 10 секунд светодиод будет мигать с одной частотой, вторые – с другой и т.д. (всего будет 4 разных частоты).
Необходимое оборудование
- Arduino или Genuino 101
Цепь
Никакого дополнительного оборудования для этого примера не нужно.
Наиболее важные части скетча
Библиотека CurieTimerOne.h, предоставляющая доступ к таймеру-1 микроконтроллера. Она позволяет настраивать количество микросекунд, которые счетчик будет отсчитывать перед тем, как запустить прерывание. Прерывание можно настроить, чтобы вместе с ним запускалась функция внешнего вызова. Кроме того, каждое новое прерывание увеличивает счетчик прерываний. Эта же библиотека используется для генерации ШИМ-сигнала, причем продолжительность рабочего цикла и частоту пользователь может задать сам.
Функция timedBlinkIsr(), вызываемая при запуске прерывания. Она переключает состояние светодиода на 13-ом контакте при помощи переменной toggle – значение в ней меняется с каждым новым вызовом при помощи оператора «!» (отрицание).
Код
Этот скетч поддерживает отображение логов в мониторе порта. Ее можно включить, раскомментировав строчку
#define SERIAL_PORT_LOG_ENABLE 1.
/*
Скетч: Timer1Interrupt.ino
Этот скетч демонстрирует использование библиотеки Curie Timer One.
Он использует таймер-1, чтобы инициировать моргание светодиода
на 13-ом контакте с четырьмя разными интервалами (частотой).
Информацию о частоте мигания и количестве прерываний, посчитанных
за 10 секунд, можно наблюдать через монитор порта, но для этого
нужно включить запись логов. Кроме того, чтобы перепрограммировать
плату, может потребоваться MASTER_RESET.
Моргание светодиода запустится, только если открыть монитор порта.
Впрочем, если строчка "#define SERIAL_PORT_LOG_ENABLE 1"
закомментирована, то моргание должно запуститься само собой. Если вы
все же решили использовать запись логов, то не забудьте также
раскомментировать "CurieTimerOne.restart(time);" в самом низу скетча
Создан компанией Intel,
модифицирован 14 марта 2016 года Симоне Маджоччи (Simone Majocchi)
Этот код не защищен авторским правом.
*/
#include "CurieTimerOne.h"
// если вы хотите отключить ведение логов в мониторе порта, оставьте
// эту строчку закомментированной:
#define SERIAL_PORT_LOG_ENABLE 1
const int oneSecInUsec = 1000000; // одна секунда, выраженная в микросекундах
bool toggle = 0; // переменная для переключения светодиода
int time; // переменная для настройки таймера
void timedBlinkIsr() // функция, вызываемая при запуске прерывания
{
digitalWrite(13, toggle);
toggle = !toggle; // используем оператор «!» (отрицание) для инвертирования значения в переменной toggle
}
void setup() {
#ifdef SERIAL_PORT_LOG_ENABLE
Serial.begin(115200);
while (!Serial); // ждем открытия монитора порта
#endif
// выставляем светодиод на 13-ом контакте в положение OUTPUT:
pinMode(13, OUTPUT);
}
void loop() {
for (int i = 1; i < 9; i = i * 2) {
// настраиваем период мигания светодиода на 1000000, 500000, 250000 и 125000 микросекунд
time = oneSecInUsec / i; // здесь задаем частоту, деля секунду на i
CurieTimerOne.start(time, &timedBlinkIsr); // выставляем таймер и функцию внешнего вызова
#ifdef SERIAL_PORT_LOG_ENABLE
Serial.print("The blink period: "); // "Период мигания: "
Serial.println(time);
#endif
delay(10000); // 10-секундная задержка, постоянно приостанавливаемая прерываниями таймера
#ifdef SERIAL_PORT_LOG_ENABLE
Serial.print("Total number of ticks in 10 seconds: "); // "Общее количество тиков за 10 секунд: "
Serial.println(CurieTimerOne.rdRstTickCount()); // считываем и сбрасываем счетчик
Serial.println("----");
#endif
// если вы хотите отключить ведение логов в мониторе порта, оставьте
// эту строчку закомментированной:
// CurieTimerOne.restart(time); // перезапускаем таймер
}
}
См.также
- Curie Timer One PWM
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino