ардуино как освоит скетч
- Войдите на сайт для отправки комментариев
Вс, 18/09/2016 - 11:37
Здравствуйте всем скетч для всех может быть самым простым но не могу понять как идет отчет времени пока он привышет 30000 миллисекунд.Заранее спасибо
if(led1On)
if(millis() - led1OnTime > 30000) {
digitalWrite(led1Pin, LOW);
led1On = false;
какой то непонятный кусок кода)))))
И Вам здрасьте.
А Вы не могли бы привести скетч целиком, а не огрызок без начала и конца?
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;
}
}
Кроме основной программы, Arduino выполняет в фоне маленькие подпрограммы (ISR - interrupt service routine, подпрограмма обработки прерывания), в одной из таких ISR обрабатывается прерывание от таймера, где инкрементируется переменная, которая отвечает за хранение текущего количества миллисекунд. Функция millis() возвращает значение этой переменной.
Я не смотрел точно ли так это происходит, но скорее всего так. Когда же крутится основной цикл, значения, возвращаемые millis(), всегда разные и постоянно увеличиваются. Если в один момент времени сохранить значение, выдаваемое millis(), то разность между текущим значением и сохранённым будет с каждым циклом увеличиваться.