Помогите разобраться с включением насоса ( последний кусок кода ) |
|
Включается только после уставки для тэнов т.е. после выключения тэнов и выключается после их включения , а должен включатся после 55 гр.С и выключатся после падения |
#include <Wire.h>
#include <OneWire.h>
#define ONE_WIRE_BUS 9 //задаем контакт для датчика
#define RES_TEMP 12 // разрешение (точность) темп. датчика в битах
OneWire oneWire(ONE_WIRE_BUS);
//Подключаем библиотеку для работы с термометром
#include <DallasTemperature.h>
//Создаем объект sensors, подключенный по OneWire
DallasTemperature sensors(&oneWire);
//Создаем переменные для работы с термометром
DeviceAddress temp1DeviceAddress;//переменная для хранения адреса датчика
float temp1 = 0; //переменная для текущего значения температуры 1
int setTmp = 0; // переменная для заданного значения температуры
//Подключаем LCD-дисплей
#include <LiquidCrystal_I2C.h>
//#include <LCD_1602_RUS.h>
//LCD_1602_RUS lcd(0x27,16,2)
LiquidCrystal_I2C lcd(0x27, 16, 2);
//Подсветка управляется через пин D10
//#define BACKLIGHT_PIN 10
//Создаем переменную для хранения состояния подсветки
boolean backlightStatus = 1;
// Подключаем библиотеку для работы с ARDUINO EEPROM
//Заданная температура будет храниться по адресу 0
#include <EEPROM2.h>
//Реле подключено к пину D11
#define RELAY1 11
#define RELAY2 12
#define RELAY3 7
#define RELAY4 8
#define ledPin 13
//Объявим переменную для хранения состояния реле
boolean relayStatus1 = LOW;
boolean relayStatus2 = LOW;
boolean relayStatus3 = LOW;
boolean relayStatus4 = LOW;
//Объявим переменные для задания задержки
long previousMillis1 = 0;
long interval1 = 2000; // интервал опроса датчиков температуры
//Аналоговая клавиатура подключена к пину A0
#define KEYPAD_PIN A0
//Определим значения на аналоговом входе для клавиатуры
#define ButtonUp_LOW 140
#define ButtonUp_HIGH 145
#define ButtonDown_LOW 324
#define ButtonDown_HIGH 330
#define ButtonLeft_LOW 503
#define ButtonLeft_HIGH 509
#define ButtonRight_LOW 0
#define ButtonRight_HIGH 5
#define ButtonSelect_LOW 740
#define ButtonSelect_HIGH 745
void setup()
{
//Настроим пин для управления реле
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(RELAY4, OUTPUT);
digitalWrite(RELAY1, LOW);
digitalWrite(RELAY2, LOW);
digitalWrite(RELAY3, LOW);
digitalWrite(RELAY4, LOW);
//Считаем из постоянной памяти заданную температуру
setTmp = EEPROM_read_byte(0);
//Инициализируем термодатчик и установим разрешающую способность 12 бит
//(обычно она установлена по умолчанию, так что последнюю строчку
//можно опустить)
sensors.begin();
sensors.getAddress(temp1DeviceAddress, 0);
temp1 = sensors.getTempC(temp1DeviceAddress);
//Выведем на дисплей стартовое сообщение на 2 секунды
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Temp. Controller");
lcd.setCursor(0, 1);
lcd.print(" v1.1 ");
delay(1500);
// выведем на дисплей заданное значение температуры на 2 секунды
lcd.setCursor(0, 1);
lcd.print(" Set temp: ");
lcd.setCursor(12, 1);
lcd.print(setTmp);
delay(1500);
//Очистим дисплей
lcd.begin(16, 2);
}
//Определим функцию для опроса аналоговой клавиатуры
//Функция опроса клавиатуры, принимает адрес пина, к которому
//подключена клавиатура, и возвращает код клавиши:
// 1 - UP
// 2 - DOWN
// 3 - LEFT
// 4 - RIGHT
// 5 - SELECT
int ReadKey(int keyPin)
{
int KeyNum = 0;
int KeyValue1 = 0;
int KeyValue2 = 0;
//Читаем в цикле аналоговый вход, для подавления дребезга
//и нестабильности читаем по два раза подряд, пока значения
//не будут равны.
//Если значения равны 1023 – значит не была нажата ни одна клавиша.
do {
KeyValue1 = analogRead(keyPin);
KeyValue2 = analogRead(keyPin);
} while (KeyValue1 == KeyValue2 && KeyValue2 != 1023);
//Интерпретируем полученное значение и определяем код нажатой клавиши
if (KeyValue2 < ButtonUp_HIGH && KeyValue2 > ButtonUp_LOW) {
KeyNum = 1; //Up
}
if (KeyValue2 < ButtonDown_HIGH && KeyValue2 > ButtonDown_LOW) {
KeyNum = 2; //Down
}
if (KeyValue2 < ButtonLeft_HIGH && KeyValue2 > ButtonLeft_LOW) {
KeyNum = 3; //Left
}
if (KeyValue2 < ButtonRight_HIGH && KeyValue2 > ButtonRight_LOW) {
KeyNum = 4; //Right
}
if (KeyValue2 < ButtonSelect_HIGH && KeyValue2 > ButtonSelect_LOW) {
KeyNum = 5; //Select
}
//Возвращаем код нажатой клавиши
return KeyNum;
}
//Определим процедуру редактирования заданной температуры
//Вызывается по нажатию клавиши Select, отображает на дисплее
//заданную температуру и позволяет изменять ее клавишами Up и Down
void setTemperature()
{
lcd.begin(16, 2);
int keyCode = 0;
//выводим на дисплей заданное значение температуры
lcd.setCursor(0, 0);
lcd.print(" Setting temp ");
lcd.setCursor(7, 1);
lcd.print(setTmp);
//Опрашиваем клавиатуру, если нажата клавиша Up увеличиваем
//значение на 1, если Down – уменьшаем на 1
//Если нажаты клавиши Select или Right – цикл опроса прерывается
//Задержки введены для борьбы с дребезгом, если клавиши срабатывают
//четко – можно уменьшить время задержек или вообще их убрать
do
{
keyCode = ReadKey(KEYPAD_PIN);
if (keyCode == 1) {
setTmp++;
delay(150);
lcd.setCursor(7, 1);
lcd.print(setTmp);
}
if (keyCode == 2) {
setTmp--;
delay(150);
lcd.setCursor(7, 1);
lcd.print(setTmp);
}
//lcd.begin(16,2);
}
while (keyCode != 5 && keyCode != 4);
delay(200);
//lcd.begin(16, 2);
//По клавише Select – созраняем в EEPROM измененное значение
//По клавише Right – восстанавливаем старое значение
if (keyCode == 5) {
EEPROM_write_byte(0, setTmp);
}
if (keyCode == 4) {
setTmp = EEPROM_read_byte(0);
}
}
void loop()
{
//Модуль опроса датчиков и получения сведений о температуре
//Вызывается 1 раз в секунду
unsigned long currentMillis1 = millis();
if (currentMillis1 - previousMillis1 > interval1) {
previousMillis1 = currentMillis1;
//Запуск процедуры измерения температуры
// sensors.setWaitForConversion(false);
sensors.requestTemperatures();
//sensors.setWaitForConversion(true);
//Delay(250) // задержка для обработки информации внутри термометра,
//в данном случае можно не задавать
//Считывание значения температуры
sensors.getAddress(temp1DeviceAddress, 0);
temp1 = sensors.getTempC(temp1DeviceAddress);
// Вывод текущего значения температуры на дисплей
lcd.setCursor(0, 0);
lcd.print("Power");
lcd.setCursor(0, 1);
lcd.print("T=");
lcd.print(temp1);
lcd.print("C");
}
//Проверка условия включения/выключения нагревателя
if (temp1 < setTmp && relayStatus1 == LOW)
{ relayStatus1 = HIGH; digitalWrite(RELAY1, HIGH);
lcd.setCursor(10, 0);
lcd.print("P= 35%");
}
if (temp1 > setTmp && relayStatus1 == HIGH)
{ relayStatus1 = LOW; digitalWrite(RELAY1, LOW);
lcd.setCursor(10, 0);
lcd.print("P= 0%");
}
delay(500);
if (temp1 + 1 < setTmp && relayStatus2 == LOW)
{ relayStatus2 = HIGH; digitalWrite(RELAY2, HIGH);
lcd.setCursor(10, 0);
lcd.print("P= 70%");
}
if (temp1 > setTmp && relayStatus2 == HIGH)
{ relayStatus2 = LOW; digitalWrite(RELAY2, LOW);
//lcd.begin(10, 2);
}
delay(500);
if (temp1 + 2 < setTmp && relayStatus3 == LOW)
{ relayStatus3 = HIGH; digitalWrite(RELAY3, HIGH);
lcd.setCursor(10, 0);
lcd.print("P=100%");
}
if (temp1 > setTmp && relayStatus3 == HIGH)
{ relayStatus3 = LOW; digitalWrite(RELAY3, LOW);
//lcd.begin(16, 2);
}
delay(200);
// Опрос клавиатуры
int Feature = ReadKey(KEYPAD_PIN);
//Включение подсветки
if (Feature == 1 )
{
backlightStatus = 1;
}
//Отключение подсветки
if (Feature == 2 )
{
backlightStatus = 0;
}
//Переход к редактированию заданной температуры
if (Feature == 5 )
{ delay(200); setTemperature();
}
if(temp1>10&&temp1<95){
if (temp1 >=55&&relayStatus4==LOW){relayStatus4=HIGH; digitalWrite(RELAY4, HIGH);} //температура включения
if (temp1 <=40&&relayStatus4==HIGH){relayStatus4=LOW; digitalWrite(RELAY4, LOW);}} //температура выключения
if (temp1 ==(-127)){lcd.init();lcd.setCursor(0,0);lcd.print("Avaria Sensor");digitalWrite(RELAY4, HIGH);
} //при потере датчика включаем насос
//if(temp1 !=(-127)){avaria2=LOW;}
if (temp1 <=-127 )digitalWrite(ledPin, HIGH); //при потере датчика включаем светодиод
delay(200); // помигаем светодиодом при потери датчика
// delay(50);
}
Ну почему все пишут подобные сообщения - помогите разобраться с включением насоса , а не разобраться например с лишним пивом, или избытком денег, ну или с лишними шашлыками .
А автору кода писали? Чо он говорит?
Автор почти я , слепил из трех программ под мои интересы .
Почти уже сегодня написал свой с более сложной работой .Завтра выложу.
Автор почти я , слепил из трех программ под мои интересы .
Почти уже сегодня написал свой с более сложной работой .Завтра выложу.
в более сложном коде обратите внимание на большое кол-во делеев и использование далласовской библиотеки - тормоза и проблемки в работе вам обеспечены.
Как и обещал выкладываю ещё пока сырой код , прошу помочь поправить если можно чтото изменить . Закоментированные части кода для дальнейшего апгрейда пропускаем .