Answer the question
In order to leave comments, you need to log in
Why is the arduino milis timer not running 2 times?
Background: I have a light on the street and in the house, on the street I turn on the light with a button or a reed switch sensor if it is dark outside, I wanted to add a motion sensor to the house to turn on the light, for this I had to abandon the delay because it slowed down the entire code for the period of inclusion , I wrote this code, but it does not work correctly, the time does not count as it should, and most importantly, it works only 1 time
poke your nose please
#define knopka 2 // кнопка
#define rele_dom 3 // пин реле в доме
#define rele_ul 4 // пин реле на улице
#define dsveta 5 // пин датчика света
#define gerkon 7 // геркон
#define green_1 A0
#define green_2 A1
#define green_3 A2
#define green_4 A3
unsigned long previousMillis_dom = 0; // храним время последнего переключения
unsigned long previousMillis_ul = 0;
bool rele_dom_on = false;
bool rele_ul_on = false;
void setup() {
pinMode(green_1, OUTPUT);
pinMode(green_2, OUTPUT);
pinMode(green_3, OUTPUT);
pinMode(green_4, OUTPUT);
pinMode(rele_dom, OUTPUT);
pinMode(rele_ul, OUTPUT);
digitalWrite(rele_dom, HIGH); // выключаем реле по умолчанию
digitalWrite(rele_ul, HIGH);
pinMode(dsveta, INPUT);
pinMode(gerkon, INPUT);
pinMode(knopka, INPUT);
}
void loop()
{
unsigned long currentMillis = millis(); // переменная для таймеров
// индикация светодиодами
if (digitalRead(dsveta) == 1) {
digitalWrite(green_1, HIGH);
} else {
digitalWrite(green_1, LOW);
}
if (digitalRead(ddvij) == 1) {
digitalWrite(green_2, HIGH);
} else {
digitalWrite(green_2, LOW);
}
if (digitalRead(gerkon) == 1) {
digitalWrite(green_3, HIGH);
} else {
digitalWrite(green_3, LOW);
}
if (digitalRead(knopka) == 1) {
digitalWrite(green_4, HIGH);
} else {
digitalWrite(green_4, LOW);
}
//
// принудительный свет на улице от кнопки
if (!rele_ul_on && (digitalRead(knopka) == 1)) {
digitalWrite(rele_ul, LOW); // включить
rele_ul_on = true; // запомнить состояние
previousMillis_ul = currentMillis; // запомнить момент включения
}
if (rele_ul_on && currentMillis - previousMillis_ul > 5000) { // время в милисекундах
digitalWrite(rele_ul, HIGH); // прошло больше N секунд - выключаем
rele_ul_on = false;
}
//
// включение света на улице от геркона и датчика света
if (digitalRead(gerkon) == 0 && digitalRead(dsveta) == 1) {
digitalWrite(rele_ul, LOW); // включить
rele_ul_on = true; // запомнить состояние
previousMillis_ul = currentMillis; // запомнить момент включения
}
if (rele_ul_on && currentMillis - previousMillis_ul > 7000) { // время в милисекундах
digitalWrite(rele_ul, HIGH); // прошло больше N секунд - выключаем
rele_ul_on = true;
}
}
Answer the question
In order to leave comments, you need to log in
millis()
Returns the number of milliseconds since the current program on the Arduino board started executing.
This number is reset to zero due to a value overflow after approximately 50 days.
unsigned long currentMillis = millis(); // переменная для таймеров
variable currentMillisvoid loop()
// включение света на улице от геркона и датчика света if (digitalRead(gerkon) == 0 && digitalRead(dsveta) == 1) { digitalWrite(rele_ul, LOW); // включить rele_ul_on = true; // запомнить состояние previousMillis_ul = currentMillis; // запомнить момент включения }
will assign the start time to loop .
previousMillis_ul = currentMillis; // запомнить момент включения
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question