Приветствую всех! Хотелось бы узнать их различия, и в каких случаях нужно использовать каждую из них? Буду благодарен за ответ
Все просто. millis и micros возвращают количество соответственно миллисекунд и микросекунд с начала старта программы. Могут быть использованы для измерения времени между двумя событиями. delay и delayMicrodseconds - задержка на указанный в аргументе период соответственно в миллисекундах и микросекундах. Используется для того, чтобы просто тормознуть исполнение алгоритма на указанное время.
т.е millis() с момента старта МК считает время, и если мой МК работает 2 дня (48 часов), то он эти часы в секунды мне будет возвращать? Его можно как-нибудь "обнулять"? Какие манипуляции можно с ним делать?
Я хотел бы сделать что-то вроде "Если кнопка нажата 2 секунды - включить 13 LED; Если нажата 5 секунд - выключить 13 LED;" Как это можно организовать?
Это вроде беззнаковое 32 бит целое, обнуляется по переполнению (после 0xFFFFFFFF следует 0). Обнулить его самому, если я правлильно понимаю, можно только выполнив ресет микроконтроллера (кнопкой перезапуска, если имеется, импульсом на пин).
Засекаем нажатие на кнопку. Запоминаем сразу после этого значение, возвращаемое millis, проверяем периодически разницу между текущим значением, возвращаемым millis и запомненным вместе с состоянием кнопки. Если разница больше или равна 2000, но пока еще меньше 5000, а кнопка все еще нажата - включить LED. Если разница больше или равна 5000, а кнопка все еще нажата - выключить LED. Возможно, при проверке значения millis придется отдельно рассмотреть случай перехода значения millis через 0. Можно также менять поведение, если кнопка нажата больше двух секунд, но все еще не отпущена, учитывать текущее состояние LED,
Спасибо - будем пробовать Если получится нормальный скетч - выложу сюда, быть может кому-нибудь понадобится "кик-старт" как и мне
Для примера, выжимки из моего кода, реализация включения подсветки индикатора на 5 сек. Правда переход через ноль обработан просто. После перехода подсветка гаснет вне зависимости от того, прошли ли положенные 5 сек. Код (Text): // Пин, к которому подключен затвор транзистора управления подсветкой #define LCDLIGHTPIN 10 // Пин, на который заведена кнопка управления подсветкой // В Arduino Micro это не только RX, но и внешнее прерывание 2 #define LCDLIGHTBUTTONPIN 0 // Время, когда была нажата кнопка, в миллисекундах от включения платы volatile unsigned long lcdLightTime; // Признак, что подсветка должна быть включена volatile unsigned long lcdLightOn; ... void setup() { ... pinMode(LCDLIGHTPIN,OUTPUT); pinMode(LCDLIGHTBUTTONPIN,INPUT_PULLUP); digitalWrite(LCDLIGHTPIN,LOW); lcdLightOn=0; attachInterrupt(2, LCDButtonInterrupt, FALLING); ... } void loop() { ... processlcdlight(); ... } void LCDButtonInterrupt() { lcdLightOn=1; lcdLightTime=millis(); } void processlcdlight(){ if (lcdLightOn){ digitalWrite(LCDLIGHTPIN,HIGH); if ((millis()>lcdLightTime+5000)|| (millis()<lcdLightTime)) lcdLightOn=0; } if (!lcdLightOn){ digitalWrite(LCDLIGHTPIN,LOW); } } ...