Delay альтернатива

MrSnaKe
Offline
Зарегистрирован: 28.08.2015

Здравствуйте,

Собираю систему полива растений (датчик влажности почвы (YL-38), реле (SONGLE SRD-05VDC-SL-C), олед дысплей и уно)

Как оно должно работать: если влажность больше уровня Х, срабатывает реле на Х времени, пры использовании delay, информация на олед екране не обновляется, смотрел в сторону millis(), но так и не разобрасля, может ктото поможет с примером? или есть другое альтернативное решение?

Такж при запусте срабатывает реле, можно както отключить?

#include <OLED_I2C.h> 

OLED  myOLED(SDA, SCL, 8);


extern uint8_t SmallFont[];
extern uint8_t RusFont[];

int WaterSensor=10000;

void setup() {
  
  myOLED.begin(); 
  myOLED.setFont(SmallFont); 
  
  pinMode(A0, INPUT); 
  pinMode(10, OUTPUT);
}


void water() {
  myOLED.print("Water Sensor", 0, 10);
  WaterSensor = analogRead(A0); 
  String WaterSensorS = String(WaterSensor); 
  myOLED.print("    ", RIGHT, 10); 
  myOLED.print(WaterSensorS, RIGHT, 10); 

  if (WaterSensor < 1000) {
    digitalWrite(10, LOW);
    delay(5000);
  } else {
    digitalWrite(10, HIGH);
  }
  
}


void loop() {
  
  water();
  
  myOLED.update(); 
}

 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

BlinkWithoutDelay есть такой пример, его и смотрите
Чтобы при запуске не срабатывать реле, нужно включать реле нулём, а пин, управляющий реле инициализируется как digitalWrite(pin, HIGH); pinMode(pin, OUTPUT);