Хлебные крошки программные коды
void write(int address, byte value) // Прототип функции
// Записывает байт value по адресу address в EEPROM.
// Запись выполняется за 3,3 мс.
// Гарантируется 100 000 циклов записи.
#include
EEPROM.write(15, 0); //- запись 0 по адресу 15
...
rely.ino Программа автополива
// Программа автополива
// Определяем флаг условной компиляции
#define DebugSerial 1
#include
#include
iarduino_RTC time(RTC_DS3231);
// Переменные
int VlajnGr = 650; // Граничная влажность
//const int8_t DRY = 700; // константа Сухой
//const int8_t WET = 300; // константа Мокрый
float SrIzm = 0;
int MassIzm [10];
int RMassIzm = sizeof(MassIzm)/2;
// Определение имён
#define RELY_SHINE 4 // Сигнал с реле света
#define RELY_WATERING 5 // Сигнал с реле полива
#define dhtPin 8 //
#define PowerSensorPin 7 // Объявляем Пин питания датчика. Пин питания датчика влажности.
#define SensorPin A7 // Объявляем Пин сенсора датчика. Аналоговый вход.
#define Pausa5sek 5000 // 5000 милисекунд.
DHT dht(dhtPin, DHT11);
// Прототипы функций
void relyShine(int Hrs);
void read_h_t();
int readSensor();
void relyWatering(int Vlajn);
void starter();
float InputSensor();
// Мои функции
#include "starter.h"
#include "relyShine.h"
#include "read_h_t.h"
#include "readSensor.h"
#include "relyWatering.h"
#include "InputSensor.h"
void setup()
{ // Инциализация
pinMode(RELY_WATERING, OUTPUT);
digitalWrite(RELY_WATERING, LOW);
pinMode(RELY_SHINE, OUTPUT);
digitalWrite(RELY_SHINE, LOW);
pinMode(SensorPin, INPUT); // Аналоговый вход
pinMode(PowerSensorPin, OUTPUT); // Пин питания датчика влажности
digitalWrite(PowerSensorPin, LOW); // Питающий ПИН на ВЫКЛ цифровой
// Serial.begin(115200);
Serial.begin(9600);
time.begin();
dht.begin();
//time.settime(0, 37, 20); // сек, мин, час, день, месяц, год, день недели
// read_h_t();
// relyShine(time.Hours);
//Lp:
// InputSensor();
// delay(2000);
// goto Lp;
// relyShine(); // Вызов функции вкл выкл света
// relyWatering (); // Вызов функции вкл полива
// read_h_t();
}
void loop() {
starter();
delay(1000);
}
InputSensor.h
// Подпрограмма усреднения считанной влажности
// Релиз от 11 февраля 2021 года
float InputSensor()
{
#if (DebugSerial == 1)
Serial.print(" "); Serial.println(RMassIzm);
#endif
for (int i = 0; i < RMassIzm-1; i++) // Сдвигаем влево.
{
// тело цикла
MassIzm[i] = MassIzm[i+1];
}
MassIzm[RMassIzm-1] = readSensor();
SrIzm = 0; // В исходное (нулевое) состояние
for (int i = 0; i < RMassIzm; i++) // Суммируем все ячейки. ИТОГО.
{
// тело цикла
SrIzm = SrIzm + MassIzm[i];
}
SrIzm = SrIzm/RMassIzm;
#if (DebugSerial == 1)
Serial.print(" "); Serial.print(SrIzm,2); Serial.print(" ");
#endif
for (int i = 0; i < RMassIzm; i++)
{
// тело цикла
#if (DebugSerial == 1)
Serial.print(" "); Serial.print(MassIzm[i]);
#endif
}
#if (DebugSerial == 1)
Serial.println(" ");
#endif
return(SrIzm);
}
InputSensor1.h
// Подпрограмма усреднения считанной влажности
// Релиз от 11 февраля 2021 года
float InputSensor()
{
float SrIzm = 0;
int MassIzm [] = {10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25};
int RMassIzm = sizeof(MassIzm)/2;
Serial.print(" "); Serial.println(RMassIzm);
SrIzm = 0; // В исходное (нулевое) состояние
for (int i = 0; i < RMassIzm; i++) // Суммируем все ячейки. ИТОГО.
{
// тело цикла
SrIzm = SrIzm + MassIzm[i];
}
SrIzm = SrIzm/RMassIzm;
Serial.print(SrIzm,2); Serial.print(" ");
for (int i = 0; i < RMassIzm; i++)
{
// тело цикла
Serial.print(" "); Serial.print(MassIzm[i]);
}
Serial.println(" ");
return(SrIzm);
}
read_h_t.h
// Функция считывания с датчика влажности и температуры
void read_h_t()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
Serial.println(h);
Serial.println(t);
}
readSensor.h
// Функция чтения показаний с сенсора влажности
int readSensor()
{
int val = 550; // 2 команды для отладки
// return(val); //
// Функция включения датч влажности на время
digitalWrite(PowerSensorPin, HIGH); // Включить датчик
delay(50); // Дать время питанию установиться
val = analogRead(SensorPin); // Прочитать аналоговое значение от датчика
digitalWrite(PowerSensorPin, LOW); // Выключить датчик
return(val); // Вернуть аналоговое значение влажности
}
relyShine.h
// Функция включения реле освещения
void relyShine(int Hrs)
{
if ((Hrs > 7) && (Hrs < 22) && digitalRead(RELY_SHINE) == LOW)
{ // Если время больше 7 часов и меньше 22 часов
digitalWrite(RELY_SHINE, HIGH); // Включить реле освещения
Serial.print(Hrs); Serial.println("час. Свет вкл");
return;
}
if (((Hrs < 7) || (Hrs > 22)) && digitalRead(RELY_SHINE) == HIGH)
{
digitalWrite(RELY_SHINE, LOW); // Выключить реле
Serial.print(Hrs); Serial.println("час. Свет выкл");
return;
}
Serial.print(Hrs); Serial.println("час. Со светом всё хорошо !!!");
return;
}
relyWatering.h
// Функция включения реле полива
void relyWatering(int Vlajn)
{
if (readSensor() >= Vlajn)
{ // Если с датчика больше или равно 650
digitalWrite(RELY_WATERING, HIGH); // Тогда включить реле полива
Serial.print(readSensor()); Serial.print(" "); Serial.print(Vlajn); Serial.println(" Полив ВКЛ.");
delay(1000); // ЗАдержка 1 секунда
}
else
{
digitalWrite(RELY_WATERING, LOW); // Иначе реле выключено
Serial.print(readSensor()); Serial.print(" "); Serial.print(Vlajn); Serial.println("Полив ВЫКЛ.");
}
}
starter.h
// Функция запуска функций
void starter()
{
Serial.print("==> ");
Serial.println(time.gettime("H:i:s"));
read_h_t();
relyShine(time.Hours); // Вызов функции вкл выкл света
relyWatering(VlajnGr); // Вызов функции вкл полива
Serial.print("readSensor/реальная влажнсть: "); Serial.println(InputSensor());
delay(Pausa5sek);
}
|