Blue Flower

Встала потребность в контроллере для автоматического включения насоса в определенный промежуток времени.

Насос включается два раза в сутки, в 06.10 и в 18.10 на 54 секунды (за это время от прокачивает ~300 литров стоков).

Стоит OLED экран, и пищалка. Пищалка включается в момент работы насоса и пищит, когда дата и время на RTC сбилась (из-за этого насос перестает работать).

В будущем планируется поставить кнопку для принудительного включения насоса на определенное время.



Собственно вот код:

#include
#include
#include "RTClib.h"
#include
#include
#define OLED_MOSI 9
#define OLED_CLK 10
#define OLED_DC 11
#define OLED_CS 12
#define OLED_RESET 13
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
 
RTC_DS1307 RTC;
 
int Relay = 8;
int Beep = 6;
int length = 1;
char notes[] = "c";
int beats[] = { 1 };
int tempo = 300;
 
void setup () {
Serial.begin(9600);
pinMode(Relay, OUTPUT);
pinMode(Beep, OUTPUT);
digitalWrite(Relay, LOW);
Wire.begin();
display.begin();
RTC.begin();
display.display();
delay(2000);
display.clearDisplay();
display.display();
delay(2000);
display.clearDisplay();
}
 
void loop () {
// Определяем время
 
DateTime now = RTC.now();
if ( (now.hour() == 6 || now.hour() == 18) && now.minute() == 10 && now.second() >= 01 && now.second() < 55)
{digitalWrite(Relay, HIGH);
analogWrite(Beep, HIGH);}
else
{digitalWrite(Relay, LOW);
analogWrite(Beep, LOW);}
 
if (now.year() == 2000)
{analogWrite(Beep, HIGH);}
 
// Выводим время в монитор порта
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
 
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print("06.10 18.10");
 
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,20);
display.print(now.hour()/10);
display.print(now.hour()%10);
display.print(".");
display.print(now.minute()/10);
display.print(now.minute()%10);
display.print(".");
display.print(now.second()/10);
display.println(now.second()%10);
 
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,40);
display.print(now.day()/10);
display.print(now.day()%10);
display.print(".");
display.print(now.month()/10);
display.print(now.month()%10);
display.print(".");
display.println(now.year(), DEC);
display.display();
display.clearDisplay();
delay(1000);
}