Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Удаленная работа
Помощь проекту

Arduino UNO урок 3 - Тайминг

Обратимся к первому уроку, где мы управляли LED. Между включением и выключением которого была секундная задержка.


В используемой там программе (см. код ниже) был один очень большой недостаток. Для выдержки паузы между вкл/выкл LED в 1 сек. нами была использована функция delay(). В это время контроллер не может выполнять другие команды в главной функции loop():  

 
Код:
/* Мигание LED
* ------------
*
* Включает и выключает светодиод (LED) подсоединенный
* к выходу 13, с интервалом в 2 секунды
*
*/

int ledPin = 13; // LED подсоединен к выводу 13

void setup()
{
pinMode(ledPin, OUTPUT); // устанавливаем вывод 13 как выход
}

void loop()
{
digitalWrite(ledPin, HIGH); // включаем LED
delay(1000); // пауза 1 секунда
digitalWrite(ledPin, LOW); // выключаем LED
delay(1000); // пауза 1 секунда
}

Первое, что мы сделаем, это внесем небольшие корректировки в функцию loop(). Чтобы сделать код более компактным и изящным, заменим 2 пары строчек на одну пару. Вместо установки значения в HIGH, а затем обратно в LOW, мы получим текущее значение ledPin и проинвертируем его. Т.е. если оно было HIGH, то станет LOW и наоборот.

 
Код:
void loop()
{
digitalWrite(ledPin, !digitalRead(ledPin)); // включаем/выключаем LED
delay(1000); // задержка 1 сек.
}

Отлично! Теперь мы усовершенствуем функцию delay(). Взамен, мы будем использовать функцию millis(). Данная функция возвращает количество миллисекунд, прошедшее с момента запуска текущей программы. Функция переполнится (вернется в нуль) приблизительно через 50 суток работы программы.

Альтернативной функцией является micros(), которая возвращает количество микросекунд, прошедшее с момента запуска текущей программы. Функция переполнится (вернется в нуль) приблизительно через 70 минут работы программы.

В нашем уроке мы будем использовать функцию millis():

 
Код:
/* Мигание LED Версия 2
* ------------------------
* Включает и выключает светодиод (LED) подсоединенный
* к выходу 13, с интервалом в 2 секунды используя функцию millis()
*
*/
int ledPin = 13; // LED подсоединен к выводу 13
unsigned long currentTime;
unsigned long loopTime;

void setup()
{
pinMode(ledPin, OUTPUT); // устанавливаем вывод 13 как выход
currentTime = millis(); // считываем время, прошедшее с момента запуска программы
loopTime = currentTime;
}

void loop()
{
currentTime = millis(); // считываем время, прошедшее с момента запуска программы
if(currentTime >= (loopTime + 1000)){ // сравниваем текущий таймер с переменной loopTime + 1 секунда
digitalWrite(ledPin, !digitalRead(ledPin)); // включаем/выключаем LED
loopTime = currentTime; // в loopTime записываем новое значение
}
// Здесь могут быть другие команды
}

В данном примере мы ввели две дополнительные переменные currentTime и loopTime. В функции setup() обе переменные имеют одно и тоже значение. В функции loop(), переменная currentTime каждый раз обновляется в цикле. Когда currentTime больше чем loopTime на 1 секунду (loopTime + 1000), то LED меняет свое состояние, а переменной loopTime присваивается текущее значение currentTime. Обратите внимание, что в данном примере мы не использовали функцию delay() и процессор может выполнять другие операции.


C этой схемой также часто просматривают:

Светодиодный куб 5х5х5 на Arduino
Светодиодный куб 4х4х4 на Arduino
Светодиодный куб 3х3х3 на Arduino
Arduino UNO урок 1 - Мигание светодиодом
Arduino UNO урок 2 - Управление сервоприводом
Arduino UNO урок 2 - Управление сервоприводом
Arduino UNO урок 1 - Мигание светодиодом
Слуховой аппарат на микросхеме TDA2822M
Усилитель на TBA810 мощностью 7 Вт

Главные категории

Arduino


Аудио


В Вашу мастерскую


Видео


Для автомобиля


Для дома и быта


Для начинающих


Зарядные устройства


Измерительные приборы


Источники питания


Компьютер


Медицина и здоровье


Микроконтроллеры


Музыкантам


Опасные, но интересные конструкции


Охранные устройства


Программаторы


Радио и связь


Радиоуправление моделями


Световые эффекты


Связь по проводам и не только...


Телевидение


Телефония


Узлы цифровой электроники


Фототехника


Шпионская техника



Реклама на KAZUS.RU




Последние поступления

Графический семиполосный эквалайзер-радуга на Arduino Nano и MSGEQ7

Часы реального времени для Arduino

Старинные часы-метеостанция

Блок питания для Arduino из ATX

ATX блок питания управляемый Arduino

Arduino своими руками с USB портом

Подключение монетоприемника к Arduino

Подключение PS/2 клавиатуры к Arduino

Пробуждение ПК по сети на Arduino

Запись/чтение на SD-карту с Arduino



© 2003—2017 «KAZUS.RU - Электронный портал»