Основная концепция такова: запишите в переменную millis () в данный момент - скажем, «время начала».Теперь, во время каждого цикла (), проверяйте время, которое прошло, вычитая millis () из «starttime».Если истекшее время больше установленного времени задержки, выполните код.Сбросьте время начала, чтобы создать повторяющийся шаблон.
Возможно, вам не хватает объяснения, поэтому перед тем, как погрузиться в код, я настоятельно рекомендую вам прочитать это введение о с помощью millis ().для хронометража .Это долго, но это подробно объясняет принцип.Это поможет вам понять приведенный ниже код.
Наконец, есть несколько библиотек, написанных для упрощения использования синхронизации.Например, SimpleTimer -библиотека, но вы можете использовать Google «Библиотека таймера Arduino» для других.Ниже приведен пример.
1 секунда включена, 3 секунды выключена:
unsigned long startMillis; //some global variables available anywhere in the program
unsigned long currentMillis;
const unsigned long period = 1000; //the value is a number of milliseconds
int fase; //value used to determine what action to perform
void setup() {
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
startMillis = millis(); //initial start time
fase = 0;
}
void loop() {
currentMillis = millis(); //get the current "time" (actually the number of milliseconds since the program started)
if (currentMillis - startMillis >= period) //test whether the period has elapsed
{
if (fase == 0)
{
digitalWrite(8, LOW);
startMillis = currentMillis; //IMPORTANT to save the start time of the current LED state.
fase = 1; //increment fase, so next action will be different
}
else if (fase == 1)
{
digitalWrite(7, HIGH);
startMillis = currentMillis;
fase = 2;
}
else if (fase == 2)
{
digitalWrite(7, LOW);
startMillis = currentMillis;
fase = 3;
}
else if (fase == 3)
{
digitalWrite(8, HIGH);
fase = 0;
startMillis = currentMillis;
}
}
}
Пример мигания светодиода с использованием библиотеки SimpleTimer
#include <SimpleTimer.h>
// the timer object
SimpleTimer timer;
int ledPin = 13;
// a function to be executed periodically
void repeatMe() {
digitalWrite(ledPin, !digitalRead(ledPin));
}
void setup() {
pinMode(ledPin, OUTPUT);
timer.setInterval(1000, repeatMe);
}
void loop() {
timer.run();
}