tamerlan37
Offline
Зарегистрирован: 22.10.2013
Вот обьеденил свой код с кодом меню одного из форумчан (dachnik)после небольшой переделки под свои нужды часть с меню работает а вот часть "терморегулятор" почемуто будто игнорируется нет вывода не на LCD не в Serial будто ее нет вовсе я и перемещал этучасть кода в void loop и в отдельную часть но не помогает.Может вы увидете в чем проблема.
// adress eeprom
/*EEPROM 0 //(Минимальное значение температуры актуатора) теперратура мин
EEPROM 1 //(Максимальное значение темп актуатора) температура макс
EEPROM 2 1/0 //включение отключение полива (0=off / 1=on)
EEPROM 3 //Продолжительность минут полива
EEPROM 4 //минута полива
EEPROM 5 //час полива
//цикл*/
//-------------------------------------м----------------------------------------------
int led2 = 4;// "сигнал таймер переворот"
int led3 = 2;// сигнал нагреватель
int led4 = 5;// сигнал туманогенератор
//-------------------------------------м----------------------------------------------
//LCD I2C 20x4
#include <DS1307RTC.h>
#include <Time.h>
#include <EEPROM.h>
//#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <LiquidCrystal.h>
//LiquidCrystal_I2C lcd(0x27,20,4);
//LCD
#include "DHT.h"
//------------------------------------мое----------------------------------------------------
#define DHTPIN 3 // куда подключен термодатчик
#define DHTTYPE DHT11 // DHT 11 используемый термодатчик
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
//------------------------------------мое----------------------------------------------------
//кнопка
// задаем константы
const int buttonPin = 15; // номер входа, подключенный к кнопке
const int buttonPin_1 = 16; //левая кнопка
const int buttonPin_0 = 14; //правая кнопка
const int led = 17; // номер выхода светодиода
/*
#define buttonEnterPin = 15;
#define buttonPlusPin = 14;
#define buttonMinusPin = 16;
#define EnterPressed !digitalRead(buttonEnterPin);
#define PlusPressed !digitalRead(buttonPlusPin);
#define MinusPressed !digitalRead(buttonMinusPin);
*/
// переменные
int buttonState = 0; // переменная для хранения состояния кнопки
int buttonState_1 = 0; // переменная для хранения состояния кнопки
int buttonState_0 = 0; // previous state of the button
void setup() {
//------------------------------------мое---------------------------------
Serial.begin(9600);
dht.begin();
int day;
while (!Serial) ; // wait for serial
delay(200);
pinMode(led, OUTPUT);//индикатор кнопки
pinMode(led2, OUTPUT);// сигнал "таймер"
pinMode(led3, OUTPUT);// сигнал нагрева
pinMode(led4,OUTPUT);//сигнал туманогенератора
Serial.println("DS1307RTC Read Test");
Serial.println("-------------------");
//------------------------------------мое---------------------------------
//LCD
#ifdef AVR
Wire.begin();
#else
Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
#endif
//lcd.init(); // initialize the lcd
lcd.begin(16, 2);
//------------------------------------мое---------------------------------
// печатаем первую строку
lcd.print("Inkubator" );
lcd.setCursor(1, 1);
delay(500);
// печатаем вторую строку
lcd.print("tamerlan-1");
delay(500);
lcd.clear();
//------------------------------------мое---------------------------------
//lcd.backlight();
//--LCD
// initialize the button pin as a input:
// initialize the LED as an output:
// initialize serial communication:
Serial.begin(9600);
//pinMode(ledPin, OUTPUT);
// инициализируем пин, подключенный к кнопке, как вход
pinMode(buttonPin, INPUT);
pinMode(buttonPin_0, INPUT);
pinMode(buttonPin_1, INPUT);
}
void loop() {
//-------------------------------------m----------------------------------------------
float h = dht.readHumidity();//обозначение влажности
float t = dht.readTemperature(); //обозначение температуры
float x =EEPROM.read(2);//день месяца соответствующий проклевыванию
tmElements_t tm; //вывод на экран дата и влажность
{//lcd.setCursor(0, 1);
//print2digits(tm.Day);
//lcd.write('/');
//print2digits(tm.Month);
//lcd.write('/');
//lcd.print(tmYearToCalendar(tm.Year));
/*lcd.write('h');
print2digits (h);
//lcd.write("*H ");*/
lcd.setCursor(0, 0);//вывод на экран время и температура
print2digits(tm.Hour);
lcd.write(':');
print2digits(tm.Minute);
lcd.write('`');
print2digits(tm.Second);
lcd.write(' ');
print2digits(tm.Day);
lcd.write('/');
print2digits(tm.Month);
//lcd.write('/');
//lcd.print(tmYearToCalendar(tm.Year));
//lcd.write('h');
//print2digits (h);
//lcd.write("*H ");
//lcd.write('t');
//print2digits (t);
//lcd.write("*C ");
//delay(1000);
if (RTC.read(tm)) //информацыя в sereal monitor
{
Serial.print("Ok, Time = ");
Serial.print(tm.Hour);
Serial.write(':');
Serial.print(tm.Minute);
Serial.write(':');
Serial.print(tm.Second);
Serial.print(", Date (D/M/Y) = ");
Serial.print(tm.Day);
Serial.write('/');
Serial.print(tm.Month);
Serial.write('/');
Serial.print(tmYearToCalendar(tm.Year));
Serial.println();
} else {
if (RTC.chipPresent()) {
Serial.println("The DS1307 is stopped. Please run the SetTime");
Serial.println("example to initialize the time and begin running.");
Serial.println();
} else {
Serial.println("DS1307 read error! Please check the circuitry.");
Serial.println();
}
delay(900);
}
//delay(500);
//-------------------------------------m----------------------------------------------
// read the pushbutton input pin:
//lcd.setCursor(0,0);
//lcd.print("Ink MENU v1");
//lcd.setCursor(0,1);
//lcd.print("(very good menu)");
lcd.setCursor(0,1);
lcd.print(" MENU ");
lcd.setCursor(0,1);
lcd.write('t');
print2digits (t);
lcd.write("*C");
lcd.setCursor(12,1);
lcd.write('h');
print2digits (h);
lcd.write("*H ");
buttonState = digitalRead(buttonPin);
// проверяем нажата ли кнопка
// если нажата, то buttonState будет HIGH:
if (buttonState == HIGH) {
digitalWrite(led, HIGH);
delay(1000);// включаем светодиод
lcd.clear(); //очищаем экран
menu();
}
}
}
//-------------------------------------терморегулятор--------------------------------
void termo/*string_irrigation_time*/() // функция формирования строки времни полива
{
tmElements_t tm; //вывод на экран дата и влажность
float h = dht.readHumidity();//обозначение влажности
float t = dht.readTemperature(); //обозначение температуры
float x =EEPROM.read(2);//день месяца соответствующий проклевыванию
String irr_time = ""; //объявление переменной строки
int minuts = EEPROM.read(4); //читаем память
int hours = EEPROM.read(5);
/*if (hours >= 0 && hours <=9) {irr_time += 0; irr_time += hours;} else{irr_time += hours;} //дописываем нолик
irr_time += ":";
if (minuts >= 0 && minuts <=9){irr_time += 0; irr_time += minuts;} else{irr_time += minuts;}
irr_time += ":";
irr_time += "00";*/
// lcd.setCursor(0,1);
//lcd.print("irr_time=");
//lcd.print(irr_time);
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if ((tm.Minute)= minuts)/*((tm.Second)>58)if((tm.Day)<=x)*/{//условия таймера
digitalWrite(led2, HIGH);//включает переворот
// поворот по часовой стрелке
Serial.println("povorot po chasovoi");
//myStepper.step(stepsPerRevolution);
//Serial.print("Taimer On!! ");//вывод инфо состояния
lcd.setCursor(15,1);//вывод инфо состояния на LCD
lcd.print("%");
/* // step one revolution in the other direction:
Serial.println("povorot protiv chasovoi");
myStepper.step(-stepsPerRevolution);
*/
}
else
{
digitalWrite(led2, LOW);
Serial.print("Taimer OFF");
}
//****************************************************************
if (t<EEPROM.read(0))//условия терморегуляции
{
digitalWrite(led3,HIGH);
Serial.print("Vkluchen nagrev!!");//вывод инфо состояния
lcd.setCursor(15, 0);
lcd.print("^");//вывод инфо состояния на LCD
//delay (500);
}
else
{ digitalWrite(led3,LOW);
Serial.print("Temp ok ");//вывод инфо состояния
lcd.setCursor(15, 0);
lcd.print("~");//вывод инфо на LCD
}
//***********************************************************
if (h<EEPROM.read(1))//условия регуляции влажности
{
digitalWrite(led4,HIGH);
Serial.print("Vkluchen tuman!!");//вывод инфо состояния
lcd.setCursor(14, 0);
lcd.print("#");//вывод инфо состояния на LCD
//delay (500);
}
else
{ digitalWrite(led4,LOW);
Serial.print("Vlagnost ok ");//вывод инфо состояния
lcd.setCursor(14, 0);
lcd.print("~");//вывод инфо состояния
}
//************************************************************
}
//-------------------------------------терморегулятор конец--------------------------
void menu()
{
actuator_setup();//температура
irrigtion_setup();//переворот
irrigation_set_time(); //влажность
}
void actuator_setup()//установка температуры
{
lcd.clear(); //очищаем экран
while(1){ //бесконечный цикл
buttonState = digitalRead(buttonPin); //запоминаем значение кнопки
buttonState_0 = digitalRead(buttonPin_0); //запоминаем значение кнопки
buttonState_1 = digitalRead(buttonPin_1); //запоминаем значение кнопки
/*lcd.setCursor(0,0);
lcd.print(" -=TEMP SETUP=- ");//Actuator setup
lcd.clear();*/
int t_mini = EEPROM.read(0);
lcd.setCursor(0,0);
lcd.print("min=");
lcd.print(t_mini);
lcd.print((char)223);
int t_maxi = EEPROM.read(1);
lcd.setCursor(9,0);
lcd.print("max=");
lcd.print(t_maxi);
lcd.print((char)223);
//lcd.setCursor(0,2);
//lcd.print("________________");
lcd.setCursor(0,1);
lcd.print("T_MIN NEXT T_MAX");
digitalWrite(led, HIGH);
if (buttonState == HIGH) {
digitalWrite(led, LOW);
delay(1000);// включаем светодиод
lcd.clear(); //очищаем экран
digitalWrite(led, HIGH);
break; }
if (buttonState_1 == HIGH) {
digitalWrite(led, LOW);
lcd.clear();
t_min();
delay(500);
lcd.clear(); //очищаем экран
digitalWrite(led, HIGH);
}
if (buttonState_0 == HIGH) {
digitalWrite(led, LOW);
lcd.clear();
t_max();
delay(500);// включаем светодиод
lcd.clear(); //очищаем экран
digitalWrite(led, HIGH);
}
}}
void irrigtion_setup()
{
lcd.clear(); //очищаем экран
while(1){ //бесконечный цикл
buttonState = digitalRead(butto/запоминаем значение кнопки
buttonState_0 = digitalRead(buttonPin_0); //запоминаем значение кнопки
buttonState_1 = digitalRead(buttonPin_1); //запоминаем значение кнопки
/*lcd.setCursor(0,0);
lcd.print("=Perevorot SET=");//IRRIGATION*/
int on_off = EEPROM.read(2);
String z;
if (on_off == 1) {z="ON";}
if (on_off == 0) {z="OFF";}
lcd.setCursor(0,0);
lcd.print("per=");
lcd.print(z);
int duration = EEPROM.read(3);//продолжительность
lcd.setCursor(9,0);
lcd.print("prod=");
lcd.print(duration);
lcd.print("min");
//lcd.setCursor(0,1);
//lcd.print("____________________");
lcd.setCursor(0,1);
lcd.print("ON/OFF NEXT prod");
// digitalWrite(ledPin, HIGH);
if (buttonState == HIGH) {
digitalWrite(led, LOW);
delay(500);// включаем светодиод
lcd.clear(); //очищаем экран
break;
}
if (buttonState_0 == HIGH) {
digitalWrite(led, LOW);
lcd.clear();
durration_irrigation();
delay(500);// включаем светодиод
lcd.clear(); //очищаем экран
digitalWrite(led, HIGH);
}
if (buttonState_1 == HIGH) {
digitalWrite(led, LOW);
lcd.clear();
on_off_irrigation();
delay(500);// включаем светодиод
lcd.clear(); //очищаем экран
digitalWrite(led, HIGH);
}
}}
void irrigation_set_time()//настройка времени переворота
{
lcd.clear(); //очищаем экран
while(1){ //бесконечный цикл
buttonState = digitalRead(buttonPin); //запоминаем значение кнопки
buttonState_0 = digitalRead(buttonPin_0); //запоминаем значение кнопки
buttonState_1 = digitalRead(buttonPin_1); //запоминаем значение кнопки
lcd.setCursor(0,0);
lcd.print("Povor SET TIME");//"IRIGAT SET TIME"
//lcd.setCursor(0,1);
//lcd.print("pov_time= "); string_irrigation_time();
/*lcd.setCursor(0,0);
lcd.print("____________________");*/
lcd.setCursor(0,1);
lcd.print("minut NEXT hour");
digitalWrite(led, HIGH);
if (buttonState == HIGH) {
digitalWrite(led, LOW);
delay(1000);// включаем светодиод
lcd.clear(); //очищаем экран
break;
digitalWrite(led, HIGH);
}
if (buttonState_1 == HIGH) {
digitalWrite(led, LOW);
lcd.clear();
irrigation_set_minuts();
delay(500);
lcd.clear(); //очищаем экран
digitalWrite(led, HIGH);
}
if (buttonState_0 == HIGH) {
digitalWrite(led, LOW);
lcd.clear();
irrigation_set_hours();
delay(500);// включаем светодиод
lcd.clear(); //очищаем экран
digitalWrite(led, HIGH);
}
}}
//////--------------------------------------------------------------------------
//SUB MENU
void t_min()
{
lcd.clear(); //очищаем экран
delay(1000);
while(1){ //бесконечный цикл
buttonState = digitalRead(buttonPin); //запоминаем значение кнопки
buttonState_0 = digitalRead(buttonPin_0); //запоминаем значение кнопки
buttonState_1 = digitalRead(buttonPin_1); //запоминаем значение кнопки
lcd.setCursor(0,0);
lcd.print("tMinSET");
int t_min = EEPROM.read(0);
lcd.setCursor(8,0);
lcd.print("t=");
lcd.print(t_min);
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("tmin-1NEXTtmin+1");
//lcd.setCursor(0,1);
//lcd.print("________________");
digitalWrite(led, HIGH);
if (buttonState == HIGH) {
digitalWrite(led, LOW);
delay(1000);// включаем светодиод
lcd.clear(); //очищаем экран
break;
digitalWrite(led, HIGH);
}
if (buttonState_0 == HIGH) {
delay(500);
digitalWrite(led, LOW);
lcd.clear();
EEPROM.write(0, t_min + 1);
digitalWrite(led, HIGH);
}
if (buttonState_1 == HIGH) {
delay(500);
digitalWrite(led, LOW);
lcd.clear();
EEPROM.write(0, t_min - 1);
digitalWrite(led, HIGH);
}
}
}
void t_max()
{
lcd.clear(); //очищаем экран
delay(1000);
while(1){ //бесконечный цикл
buttonState = digitalRead(buttonPin); //запоминаем значение кнопки
buttonState_0 = digitalRead(buttonPin_0); //запоминаем значение кнопки
buttonState_1 = digitalRead(buttonPin_1); //запоминаем значение кнопки
lcd.setCursor(0,0);
lcd.print("tMaxSET");
int t_max = EEPROM.read(1);
lcd.setCursor(8,0);
lcd.print("t=");
lcd.print(t_max);
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("tmax-1NEXTtmax+1");
//lcd.setCursor(0,0);
//lcd.print("________________");
digitalWrite(led, HIGH);
if (buttonState == HIGH) {
digitalWrite(led, LOW);
delay(1000);// включаем светодиод
lcd.clear(); //очищаем экран
break;
digitalWrite(led, HIGH);
}
if (buttonState_0 == HIGH) {
delay(500);
digitalWrite(led, LOW);
lcd.clear();
EEPROM.write(1, t_max + 1);
digitalWrite(led, HIGH);
}
if (buttonState_1 == HIGH) {
delay(500);
digitalWrite(led, LOW);
lcd.clear();
EEPROM.write(1, t_max - 1);
digitalWrite(led, HIGH);
}
}
}
void on_off_irrigation()//вкл/выкл переворот
{
lcd.clear(); //очищаем экран
delay(1000);
while(1){ //бесконечный цикл
buttonState = digitalRead(buttonPin); //запоминаем значение кнопки
buttonState_0 = digitalRead(buttonPin_0); //запоминаем значение кнопки
buttonState_1 = digitalRead(buttonPin_1); //запоминаем значение кнопки
/*lcd.setCursor(0,0);
lcd.print("ON/OFF Povorot");//IRRIGATION*/
int on_off = EEPROM.read(2);
String z;
if (on_off == 1) {z="ON";}
if (on_off == 0) {z="OFF";}
lcd.setCursor(0,0);
lcd.print("now povor=");//irrignation
lcd.setCursor(11,0);
lcd.print(z);
//lcd.setCursor(0,2);
//lcd.print("____________________");
//lcd.clear();
lcd.setCursor(0,1);
lcd.print("ON NEXT OFF");
digitalWrite(led, HIGH);
if (buttonState == HIGH) {
digitalWrite(led, LOW);
delay(1000);// включаем светодиод
lcd.clear(); //очищаем экран
break;
digitalWrite(led, HIGH);
}
if (buttonState_0 == HIGH) {
delay(500);
digitalWrite(led, LOW);
lcd.clear();
EEPROM.write(2, 0);
digitalWrite(led, HIGH);
}
if (buttonState_1 == HIGH) {
delay(500);
digitalWrite(led, LOW);
lcd.clear();
EEPROM.write(2, 1);
digitalWrite(led, HIGH);
}
}
}
void durration_irrigation()
{
lcd.clear(); //очищаем экран
delay(1000);
while(1){ //бесконечный цикл
buttonState = digitalRead(buttonPin); //запоминаем значение кнопки
buttonState_0 = digitalRead(buttonPin_0); //запоминаем значение кнопки
buttonState_1 = digitalRead(buttonPin_1); //запоминаем значение кнопки
/*lcd.setCursor(0,0);
lcd.print("povor do");*/
int duration = EEPROM.read(3);
lcd.setCursor(0,0);
lcd.print("povor=");
lcd.print(duration);
lcd.print("day");
//lcd.clear();
lcd.setCursor(0,1);
lcd.print("-1day NEXT +1day");
//lcd.setCursor(0,2);
//lcd.print("____________________");
digitalWrite(led, HIGH);
if (buttonState == HIGH) {
digitalWrite(led, LOW);
delay(1000);// включаем светодиод
lcd.clear(); //очищаем экран
break;
digitalWrite(led, HIGH);
}
if (buttonState_0 == HIGH) {
delay(500);
digitalWrite(led, LOW);
lcd.clear();
EEPROM.write(3, duration + 1);
digitalWrite(led, HIGH);
}
if (buttonState_1 == HIGH) {
delay(500);
digitalWrite(led, LOW);
lcd.clear();
EEPROM.write(3, duration - 1);
digitalWrite(led, HIGH);
}
}
}
//---------------------------------------------------peredelano-------------------------------
void irrigation_set_minuts()//время поворота минуты
{
lcd.clear(); //очищаем экран
delay(1000);
while(1){ //бесконечный цикл
buttonState = digitalRead(buttonPin); //запоминаем значение кнопки
buttonState_0 = digitalRead(buttonPin_0); //запоминаем значение кнопки
buttonState_1 = digitalRead(buttonPin_1); //запоминаем значение кнопки
/*lcd.setCursor(0,0);
lcd.print("SET MINUT");*/
int minuts = EEPROM.read(4);
lcd.setCursor(0,0);
lcd.print("minuts=");
lcd.print(minuts);
lcd.print("min");
//lcd.clear();
lcd.setCursor(0,1);
lcd.print("-1min NEXT +1min");
//lcd.setCursor(0,2);
// lcd.print("____________________");
digitalWrite(led, HIGH);
if (buttonState == HIGH) {
digitalWrite(led, LOW);
delay(1000);// включаем светодиод
lcd.clear(); //очищаем экран
break;
digitalWrite(led, HIGH);
}
if (buttonState_0 == HIGH) {
delay(500);
digitalWrite(led, LOW);
lcd.clear();
minuts = minuts + 1;
if (minuts >59){minuts=0;}
EEPROM.write(4, minuts);
digitalWrite(led, HIGH);
}
if (buttonState_1 == HIGH) {
delay(500);
digitalWrite(led, LOW);
lcd.clear();
minuts = minuts - 1;
if (minuts < 0) {minuts=59;}
EEPROM.write(4, minuts);
digitalWrite(led, HIGH);
}
}
}
void irrigation_set_hours()
{
lcd.clear(); //очищаем экран
delay(1000);
while(1){ //бесконечный цикл
buttonState = digitalRead(buttonPin); //запоминаем значение кнопки
buttonState_0 = digitalRead(buttonPin_0); //запоминаем значение кнопки
buttonState_1 = digitalRead(buttonPin_1); //запоминаем значение кнопки
/*lcd.setCursor(0,0);
lcd.print("SET hours");*/
int hours = EEPROM.read(5);
lcd.setCursor(0,0);
lcd.print("hours = ");
lcd.print(hours);
lcd.print("h");
//lcd.clear();
lcd.setCursor(0,1);
lcd.print("-1hourNEXT+1hour");
//lcd.setCursor(0,2);
// lcd.print("____________________");
digitalWrite(led, HIGH);
if (buttonState == HIGH) {
digitalWrite(led, LOW);
delay(1000);// включаем светодиод
lcd.clear(); //очищаем экран
break;
digitalWrite(led, HIGH);
}
if (buttonState_0 == HIGH) {
delay(500);
digitalWrite(led, LOW);
lcd.clear();
hours = hours + 1;
if (hours >23){hours=0;}
EEPROM.write(5, hours);
digitalWrite(led, HIGH);
}
if (buttonState_1 == HIGH) {
delay(500);
digitalWrite(led, LOW);
lcd.clear();
hours = hours - 1;
if (hours < 0) {hours=23;}
EEPROM.write(5, hours);
digitalWrite(led, HIGH);
}
}
}
//----------------------------------------m-----------------------------------------------
void print2digits(int number) {
if (number >= 0 && number < 10) {
lcd.write('0');
}
lcd.print(number);
}
//----------------------------------------m-----------------------------------------------