ардуино как освоит скетч

Yer
Offline
Зарегистрирован: 12.02.2016

Здравствуйте всем скетч для всех может быть самым простым но не могу понять как идет отчет времени пока он привышет 30000 миллисекунд.Заранее спасибо 

if(led1On)

if(millis() - led1OnTime > 30000) {

digitalWrite(led1Pin, LOW);

led1On = false;

 

vvadim
Offline
Зарегистрирован: 23.05.2012

какой то непонятный кусок кода)))))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

И Вам здрасьте.

А Вы не могли бы привести скетч целиком, а не огрызок без начала и конца?

Yer
Offline
Зарегистрирован: 12.02.2016

const int button1Pin = 2;

const int button2Pin = 3;

const int led1Pin = 4;

const int led2Pin = 5;

unsigned long led1OnTime;

unsigned long led2OnTime;

bool led1On;

bool led2On;

void setup() {

pinMode(led1Pin, OUTPUT);

pinMode(led2Pin, OUTPUT);

pinMode(button1Pin, INPUT);

pinMode(button2Pin, INPUT);

led1On = false;

led2On = false;

}

void loop(){

if (digitalRead(button1Pin) == HIGH) {

digitalWrite(led1Pin, HIGH);

led1On = true;

led1OnTime = millis();

}

if (digitalRead(button2Pin) == HIGH) {

digitalWrite(led2Pin, HIGH);

led2On = true;

led2OnTime = millis();

}

if(led1On)

if(millis() - led1OnTime > 30000) {

digitalWrite(led1Pin, LOW);

led1On = false;

}

if(led2On)

if(millis() - led2OnTime > 30000) {

digitalWrite(led2Pin, LOW);

led2On = false;

}

 

}

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
-//-

 

uni
uni аватар
Offline
Зарегистрирован: 24.09.2015

Кроме основной программы, Arduino выполняет в фоне маленькие подпрограммы (ISR - interrupt service routine, подпрограмма обработки прерывания), в одной из таких ISR обрабатывается прерывание от таймера, где инкрементируется переменная, которая отвечает за хранение текущего количества миллисекунд. Функция millis() возвращает значение этой переменной.

Я не смотрел точно ли так это происходит, но скорее всего так. Когда же крутится основной цикл, значения, возвращаемые millis(), всегда разные и постоянно увеличиваются. Если в один момент времени сохранить значение, выдаваемое millis(), то разность между текущим значением и сохранённым будет с каждым циклом увеличиваться.