Відповісти

Введіть повідомлення і натисніть Надіслати
Параметри

Назад

Огляд теми (нові повідомленні вгорі)

Антончик
2023-05-20 12:13:46
Honey пише:

Програмування - це не копіпейст, щоб перейти до millis розберіться з теорією

ну я власне щоб розібратись звернувся на цей форум

Васятко
2023-05-20 10:51:43

Вот что чатGPT животворящий делает!  smile  Honey начал бесплатно коды выдавать

Honey
2023-05-20 10:04:39

Скінченний автомат з трьома вашими станами:

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;
 }
}
г0сть
2023-05-20 09:18:06
Антончик пише:

якщо я правильно розумію як працює міліс то (

digitalWrite(vbochku, LOW);

if (millis() - last_time == 50000) {
  last_time = millis();
digitalWrite(vbochku, HIGH);
}
) ось цей кусок коду повинен працювати на мою думку так:  релле включається, і через 50 секунд виключається

Ні, ви не зовсім правильно розумієте роботу мілліс. Коли ви вмикаєте реле вам необхідно запам’ятати цей час і потім перевіряти чи не пройшов заданий інтервал. А ви робите навпаки

г0сть
2023-05-20 09:14:39
Антончик пише:

там де мені потрыбно подати напругу пишу low)

Якщо ви використовуєте модулі китайських реле - то це нормально. Вони вмикаються низьким рівнем, а вимикаються високим

Honey
2023-05-20 09:10:52

Програмування - це не копіпейст, щоб перейти до millis розберіться з теорією

Антончик
2023-05-20 00:32:28

проект автоматичного поливу, ардуїно зчитує дані з сенсора вологості грунту, і відносноно результатів послідовно запускає 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);
}
}

Підвал форуму