Ви не увійшли.
Програмування - це не копіпейст, щоб перейти до millis розберіться з теорією
ну я власне щоб розібратись звернувся на цей форум
Вот что чатGPT животворящий делает! Honey начал бесплатно коды выдавать
Скінченний автомат з трьома вашими станами:
loop() {
static byte state = 0;
static unsigned long start_time;
unsigned long cur_time = millis();
switch (state) {
case 0:
if (analogRead() <= 260) {
digitalWrite(vbochku, LOW);
state = 1;
start_time = cur_time;
}
break;
case 1:
if (cur_time - start_time >= 50000) {
digitalWrite(vbochku, HIGH);
digitalWrite(zbochki, LOW);
state = 2;
start_time = cur_time;
}
break;
case 2:
if (cur_time - start_time >= 50000) {
digitalWrite(zbochki, HIGH);
state = 0;
}
break;
}
}
якщо я правильно розумію як працює міліс то (
digitalWrite(vbochku, LOW);
if (millis() - last_time == 50000) {
last_time = millis();
digitalWrite(vbochku, HIGH);
}
) ось цей кусок коду повинен працювати на мою думку так: релле включається, і через 50 секунд виключається
Ні, ви не зовсім правильно розумієте роботу мілліс. Коли ви вмикаєте реле вам необхідно запам’ятати цей час і потім перевіряти чи не пройшов заданий інтервал. А ви робите навпаки
там де мені потрыбно подати напругу пишу low)
Якщо ви використовуєте модулі китайських реле - то це нормально. Вони вмикаються низьким рівнем, а вимикаються високим
Програмування - це не копіпейст, щоб перейти до millis розберіться з теорією
проект автоматичного поливу, ардуїно зчитує дані з сенсора вологості грунту, і відносноно результатів послідовно запускає 2 релле.
так от, з delay все працює коректно, але планую в подальшому збільшити функціонал програми що не можливо з делей.
тому якщо я правильно розумію як працює міліс то (
digitalWrite(vbochku, LOW);
if (millis() - last_time == 50000) {
last_time = millis();
digitalWrite(vbochku, HIGH);
}
) ось цей кусок коду повинен працювати на мою думку так: релле включається, і через 50 секунд виключається(доречі там де в коді пише подати низький рівень чомусь подається високий тому там де мені потрыбно подати напругу пишу low) але натомість релле просто безперервно включається та виключається
int sensor = A0;
int vbochku = A1;
int zbochki = A2;
void setup() {
Serial.begin(9600);
pinMode(sensor, INPUT);
pinMode(vbochku, OUTPUT);
pinMode(zbochki, OUTPUT);
}
void loop() {
int result = analogRead(sensor);
Serial.println(result);
digitalWrite(vbochku, HIGH);
digitalWrite(zbochki, HIGH);
if (result <= 260) {polyv();};
}
void polyv() {
unsigned long last_time;
digitalWrite(vbochku, LOW);
if (millis() - last_time == 50000) {
last_time = millis();
digitalWrite(vbochku, HIGH);
}
digitalWrite(zbochki, LOW);
if (millis() - last_time == 50000) {
last_time = millis();
digitalWrite(zbochki, HIGH);
}
}