Неравномерное включение и выключение реле
- Войдите на сайт для отправки комментариев
Вс, 23/01/2022 - 18:14
Доброго. Когда то я уже делал все это. НО прошло много времени, все мои скетчи уничтожены. И поиск не помогает.
Задача: сделать включение и выключение реле с помощью millis()
Включение на 2 секунды, выключение на заданный мной параметр intervaloff
int pin1 = 2; int pin2 = 3; int pin3 = 4; int Rele1 = 8; int Rele2 = 9; int push1; int push2; int push3; int mode = 1; int intervaloff; boolean buttonPush = false; boolean relework = false; unsigned long curentMillis; unsigned long pushMillis; unsigned long push3state; unsigned long timetowork; unsigned long timenotwork; void setup() { // put your setup code here, to run once: pinMode(pin1,INPUT_PULLUP); pinMode(pin2,INPUT_PULLUP); pinMode(pin3,INPUT_PULLUP); pinMode(Rele1, OUTPUT); pinMode(Rele2, OUTPUT); digitalWrite(Rele1, HIGH); digitalWrite(Rele2, HIGH); Serial.begin(9600); } void loop() { push1=digitalRead(pin1); push2=digitalRead(pin2); curentMillis = millis(); if(push1 == LOW && push2 == LOW) { push3 = digitalRead(pin3); if(push3 == LOW) { push3state = millis(); buttonPush = true; } if(push3 == HIGH && buttonPush == true && curentMillis - push3state >= 200) //от дребезга { mode++; //параметр для выбора нужного intervaloff Serial.print("mode= "); Serial.println(mode); //проверка что кнопка срабатывает buttonPush = false; } if(mode == 1) { intervaloff = 0; } if(mode == 2) { intervaloff = 1000; } if(mode == 3) { intervaloff = 2000; } if(mode == 4) { intervaloff = 3000; } if(mode == 5) { mode = 1; } if(curentMillis - timetowork >= intervaloff) //вот дальше никак не могу сообразить { //если бы время было одинаковым - было бы проще timetowork = curentMillis; relework = true; digitalWrite(Rele1, LOW); //включение реле digitalWrite(Rele2, HIGH); } if(curentMillis - timetowork >= 2000 && relework == true) // ну тут явно бред { timetowork = curentMillis; digitalWrite(Rele1, HIGH); //выключение реле digitalWrite(Rele2, HIGH); relework = false; } pushMillis = millis(); } if(push1 == LOW && push2 == HIGH) { digitalWrite(Rele1, HIGH); digitalWrite(Rele2, LOW); pushMillis = millis(); } if(push1 == HIGH && push2 == LOW) { if(curentMillis - pushMillis > 5000) { digitalWrite(Rele1, HIGH); digitalWrite(Rele2, HIGH); } } }
вы для начала напишите включение и выключение реле на разное время, без этих кнопок и режимов. Когда заработает - начнете добавлять остальное
сто строк для блинка - многовато: