Подскажите пожалуйтса, как сделать чтобы реле срабатывало если температура ниже заданной (а не выше, как в скетче) - после того как сработает реле, было включено 5 минут потом отключалось, через 10 минут запрашивалась температура с датчика и повтор...?
Хочется данный скетч применить для обогрева воздуха в вентиляции (5 минут нужно чтобы трубы и обогрев не раскалялись), там рекупелятор стоит и 5 минут хватит чтобы обогревать постепенно воздух ...
Помогите поправить скетч:
// Подключаем библиотеку для работы с шиной OneWire
// Термометр будет подключен на Pin2
#include <OneWire.h>
OneWire oneWire(2);
//Подключаем библиотеку для работы с термометром
#include <DallasTemperature.h>
//Создаем объект sensors, подключенный по OneWire
DallasTemperature sensors(&oneWire);
//Создаем переменные для работы с термометром
DeviceAddress tempDeviceAddress; //переменная для хранения адреса датчика
float temp1=0; //переменная для текущего значения температуры
int setTmp=0; // переменная для заданного значения температуры
//Подключаем LCD-дисплей
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
//Подсветка управляется через пин D10
#define BACKLIGHT_PIN 10
//Создаем переменную для хранения состояния подсветки
boolean backlightStatus = 1;
// Подключаем библиотеку для работы с ARDUINO EEPROM
//Заданная температура будет храниться по адресу 0
#include <EEPROM2.h>
//Реле подключено к пину D11
#define RELAY_PIN 11
//Объявим переменную для хранения состояния реле
boolean relayStatus1=LOW;
//Объявим переменные для задания задержки
long previousMillis1 = 0;
long interval1 = 1000; // интервал опроса датчиков температуры
//Аналоговая клавиатура подключена к пину A0
#define KEYPAD_PIN A0
//Определим значения на аналоговом входе для клавиатуры
#define ButtonUp_LOW 140
#define ButtonUp_HIGH 170
#define ButtonDown_LOW 320
#define ButtonDown_HIGH 370
#define ButtonLeft_LOW 500
#define ButtonLeft_HIGH 550
#define ButtonRight_LOW 0
#define ButtonRight_HIGH 50
#define ButtonSelect_LOW 730
#define ButtonSelect_HIGH 780
void setup() {
//Настроим пин для управления реле
pinMode(RELAY_PIN,OUTPUT);
digitalWrite(RELAY_PIN,LOW);
//Считаем из постоянной памяти заданную температуру
setTmp=EEPROM_read_byte(0);
//Инициализируем термодатчик и установим разрешающую способность 12 бит (обычно она установлена по умолчанию, так что последнюю строчку можно опустить)
sensors.begin();
sensors.getAddress(tempDeviceAddress, 0);
sensors.setResolution(12);
//Настроим подсветку дисплея
pinMode(BACKLIGHT_PIN, OUTPUT);
digitalWrite(BACKLIGHT_PIN, backlightStatus);
//Выведем на дисплей стартовое сообщение на 2 секунды
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Temp. Controller");
lcd.setCursor(0, 1);
lcd.print(" v1.0 ");
delay(2000);
// выведем на дисплей заданное значение температуры на 2 секунды
lcd.setCursor(0, 1);
lcd.print(" Set temp: ");
lcd.setCursor(12,1);
lcd.print(setTmp);
delay(2000);
//Очистим дисплей
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() {
int keyCode=0;
//выводим на дисплей заданное значение температуры
lcd.begin(16,2);
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(200);lcd.setCursor(7, 1);lcd.print(setTmp);}
if (keyCode==2){setTmp--;delay(200);lcd.setCursor(7, 1);lcd.print(setTmp);}
} while (keyCode!=5 && keyCode!=4);
delay(200);
//По клавише 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(750); // задержка для обработки информации внутри термометра, в данном случае можно не задавать
//Считывание значения температуры
sensors.getAddress(tempDeviceAddress, 0);
temp1=sensors.getTempC(tempDeviceAddress);
// Вывод текущего значения температуры на дисплей
lcd.setCursor(0, 0);
lcd.print(" Current temp ");
lcd.setCursor(5, 1);
lcd.print(temp1);
// Serial.println(temp1,4);
}
//Проверка условия включения/выключения нагревателя
if (temp1<setTmp&&relayStatus1==LOW){relayStatus1=HIGH; digitalWrite(RELAY_PIN,HIGH);}
if (temp1>setTmp&&relayStatus1==HIGH){relayStatus1=LOW; digitalWrite(RELAY_PIN,LOW);}
// Опрос клавиатуры
int Feature = ReadKey(KEYPAD_PIN);
if (Feature==1 ) {backlightStatus=1;digitalWrite(BACKLIGHT_PIN, backlightStatus);} //Включение подсветки
if (Feature==2 ) {backlightStatus=0;digitalWrite(BACKLIGHT_PIN, backlightStatus);} //Отключение подсветки
if (Feature==5 ) {delay(200);setTemperature();} //Переход к редактированию заданной температуры
}
Использовал вашу идею для своих нужд. Отлично работает. Пришлось правда скорректировать програмку, но в целом использовал оригинал.
Заменил мозг в конвекторе (родные мозги сгорели) и по накатанной сделал управление отоплением в дачном домике, на основе водяного с котлом. Планирую вписаться под газ. Но это пока только задумка.
Всем огромное спасибо за статью.
Мой код для конвектора:
// Подключаем библиотеку для работы с шиной OneWire
// Термометр будет подключен на Pin2
#include <OneWire.h>
OneWire oneWire(2);
//OneWire oneWireOut(3);
//Подключаем библиотеку для работы с термометром
#include <DallasTemperature.h>
//Создаем объект sensors, подключенный по OneWire
DallasTemperature sensors(&oneWire);
//Создаем переменные для работы с термометром
DeviceAddress tempDeviceAddress; //переменная для хранения адреса датчика
DeviceAddress tempDeviceAddressOut;
float temp1=0; //переменная для текущего значения температуры
float temp2=0;
int setTmp=0; // переменная для заданного значения температуры
int setLed=0;
//Подключаем LCD-дисплей
//#include <LiquidCrystal.h>
//LiquidCrystal lcd(8, 9, 4, 5, 6, 7);//Только Английская раскладка
#include <LiquidCrystal_1602_RUS.h>
LiquidCrystal_1602_RUS lcd(8, 9, 4, 5, 6, 7 );//For LCD Keypad Shield
//Подсветка управляется через пин D10
#define BACKLIGHT_PIN 10
//Создаем переменную для хранения состояния подсветки
boolean backlightStatus = 1;
// Подключаем библиотеку для работы с ARDUINO EEPROM
//Заданная температура будет храниться по адресу 0
#include <EEPROM2.h>
//Реле подключено к пину D11
#define RELAY_PIN 11
//Объявим переменную для хранения состояния реле
boolean relayStatus1=LOW;
//Объявим переменные для задания задержки
long previousMillis1 = 0;
long interval1 = 1000; // интервал опроса датчиков температуры
//Аналоговая клавиатура подключена к пину A0
#define KEYPAD_PIN A0
//Определим значения на аналоговом входе для клавиатуры
#define ButtonUp_LOW 110
#define ButtonUp_HIGH 140
#define ButtonDown_LOW 290
#define ButtonDown_HIGH 310
#define ButtonLeft_LOW 460
#define ButtonLeft_HIGH 490
#define ButtonRight_LOW 0
#define ButtonRight_HIGH 10
#define ButtonSelect_LOW 700
#define ButtonSelect_HIGH 730
void setup() {
//Настроим пин для управления реле
pinMode(RELAY_PIN,OUTPUT);
digitalWrite(RELAY_PIN,LOW);
//Считаем из постоянной памяти заданную температуру
setTmp=EEPROM_read_byte(0);
//Инициализируем термодатчик и установим разрешающую способность 12 бит (обычно она установлена по умолчанию, так что последнюю строчку можно опустить)
sensors.begin();
sensors.getAddress(tempDeviceAddress, 0);
sensors.setResolution(12);
//Настроим подсветку дисплея
pinMode(BACKLIGHT_PIN, OUTPUT);
digitalWrite(BACKLIGHT_PIN, backlightStatus);
//Выведем на дисплей стартовое сообщение на 2 секунды
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print(L"Контроллер темп.");
lcd.setCursor(0, 1);
lcd.print("-=SVN=- v1.0");
delay(2000);
// выведем на дисплей заданное значение температуры на 2 секунды
lcd.setCursor(0, 1);
lcd.print(L"Устан.Темп.: ");
lcd.setCursor(12,1);
lcd.print(setTmp);
delay(2000);
//Очистим дисплей
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() {
int keyCode=0;
//выводим на дисплей заданное значение температуры
lcd.begin(16,2);
lcd.setCursor(0, 0);
lcd.print(L"Устан. Темпер. ");
lcd.setCursor(7, 1);
lcd.print(setTmp);
digitalWrite(RELAY_PIN,LOW);
setLed=0;
//Опрашиваем клавиатуру, если нажата клавиша Up увеличиваем значение на 1, если Down – уменьшаем на 1
//Если нажаты клавиши Select или Right – цикл опроса прерывается
//Задержки введены для борьбы с дребезгом, если клавиши срабатывают четко – можно уменьшить время задержек или вообще их убрать
do {
keyCode=ReadKey(KEYPAD_PIN);
if (keyCode==1){
setTmp++;
if (setTmp>45){setTmp=45;}//Проверка максимальной температуры
delay(200);
lcd.setCursor(7, 1);
lcd.print(setTmp);}
if (keyCode==2){
setTmp--;
if (setTmp<0) {setTmp=0;}//Проверка минимальной темературы
if (setTmp<10){
lcd.setCursor(8, 1);
lcd.print(" ");}
delay(200);
lcd.setCursor(7, 1);
lcd.print(setTmp);}
} while (keyCode!=3 && keyCode!=4);
delay(300);
//По клавише Select – созраняем в EEPROM измененное значение
//По клавише Right – восстанавливаем старое значение
if (keyCode==4) {EEPROM_write_byte(0, setTmp);}
if (keyCode==3) {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(750); // задержка для обработки информации внутри термометра, в данном случае можно не задавать
//Считывание значения температуры
sensors.getAddress(tempDeviceAddress, 0);
temp1=sensors.getTempC(tempDeviceAddress);
// Вывод текущего значения температуры на дисплей
lcd.setCursor(0, 0);
lcd.print(L"Температура ");
lcd.setCursor(14, 0);
lcd.print(setTmp);
lcd.setCursor(5, 1);
lcd.print("T=");
lcd.print(temp1);
setLed++;
// Serial.println(temp1,4);
}
//Проверка условия включения/выключения нагревателя
if (temp1+1<setTmp&&relayStatus1==LOW){
relayStatus1=HIGH;
digitalWrite(RELAY_PIN,HIGH);
lcd.setCursor(15, 1);
lcd.print("P");}
if (temp1>setTmp&&relayStatus1==HIGH){
relayStatus1=LOW;
digitalWrite(RELAY_PIN,LOW);
lcd.setCursor(15, 1);
lcd.print(" ");}
// Опрос клавиатуры
int Feature = ReadKey(KEYPAD_PIN);
if (Feature==1 ) {backlightStatus=1;digitalWrite(BACKLIGHT_PIN, backlightStatus);;setLed=0;} //Включение подсветки
if (Feature==2 ) {backlightStatus=0;digitalWrite(BACKLIGHT_PIN, backlightStatus);} //Отключение подсветки
if (Feature==5 ) {delay(200);setTemperature();} //Переход к редактированию заданной температуры
if (setLed>60){
setLed=61;
backlightStatus=0;digitalWrite(BACKLIGHT_PIN, backlightStatus); //Отключение подсветки
}
}
Мой код для Отопления с котлом:
// Подключаем библиотеку для работы с шиной OneWire
// Термометр будет подключен на Pin2
#include <OneWire.h>
OneWire oneWire(2);//котел
OneWire oneWireOut(3);//Комната
//OneWire oneWireOut2(12);//Веранда - не контролируемые
//OneWire oneWireOut3(13);//Улица - не контролируемые
//Подключаем библиотеку для работы с термометром
#include <DallasTemperature.h>
//Создаем объект sensors, подключенный по OneWire
DallasTemperature sensors(&oneWire);
DallasTemperature sensorsOut(&oneWireOut);
//DallasTemperature sensorsOut2(&oneWireOut2);
//DallasTemperature sensorsOut3(&oneWireOut3);
//Создаем переменные для работы с термометром
DeviceAddress tempDeviceAddress; //переменная для хранения адреса датчика
DeviceAddress tempDeviceAddressOut;
float temp1=0; //переменная для текущего значения температуры
float temp2=0;
int setTmp=0; // переменная для заданного значения температуры
int setLed=0; // Таймер подсветки
int setNas=0; // Таймер работы насоса
int Nas=600; // Задержка работы насоса 10мин
//boolean setTmpD=HIGH;// переменная для заданного основного датика
//Подключаем LCD-дисплей
//#include <LiquidCrystal.h>
//LiquidCrystal lcd(8, 9, 4, 5, 6, 7);//Только Английская раскладка
#include <LiquidCrystal_1602_RUS.h>
LiquidCrystal_1602_RUS lcd(8, 9, 4, 5, 6, 7 );//For LCD Keypad Shield
//Подсветка управляется через пин D10
#define BACKLIGHT_PIN 10
//Создаем переменную для хранения состояния подсветки
boolean backlightStatus = 1;
// Подключаем библиотеку для работы с ARDUINO EEPROM
//Заданная температура будет храниться по адресу 0
#include <EEPROM2.h>
//Реле подключено к пину D11, D12, D13
#define RELAY_PIN1 11// 50% 1кВт
#define RELAY_PIN2 12// 100% 2кВт
#define RELAY_PIN3 13// насос циркуляционный
//Объявим переменную для хранения состояния реле
boolean relayStatus50=LOW;
boolean relayStatus100=LOW;
boolean VklOb=LOW;
//Объявим переменные для задания задержки
long previousMillis1 = 0;
long interval1 = 1000; // интервал опроса датчиков температуры
//Аналоговая клавиатура подключена к пину A0
#define KEYPAD_PIN A0
//Определим значения на аналоговом входе для клавиатуры
#define ButtonUp_LOW 110
#define ButtonUp_HIGH 140
#define ButtonDown_LOW 300
#define ButtonDown_HIGH 310
#define ButtonLeft_LOW 460
#define ButtonLeft_HIGH 490
#define ButtonRight_LOW 0
#define ButtonRight_HIGH 10
#define ButtonSelect_LOW 700
#define ButtonSelect_HIGH 730
void setup() {
Serial.begin(9600);
//Настроим пин для управления реле
pinMode(RELAY_PIN1,OUTPUT);
digitalWrite(RELAY_PIN1,LOW);
pinMode(RELAY_PIN2,OUTPUT);
digitalWrite(RELAY_PIN2,LOW);
pinMode(RELAY_PIN3,OUTPUT);
digitalWrite(RELAY_PIN3,LOW);
//Считаем из постоянной памяти заданную температуру
setTmp=EEPROM_read_byte(0);//Температура
//setTmpD=EEPROM_read_byte(1);//Датчик
//Инициализируем термодатчик и установим разрешающую способность 12 бит (обычно она установлена по умолчанию, так что последнюю строчку можно опустить)
sensors.begin();
sensors.getAddress(tempDeviceAddress, 0);
sensors.setResolution(12);
sensorsOut.begin();
sensorsOut.getAddress(tempDeviceAddressOut, 0);
sensorsOut.setResolution(12);
//Настроим подсветку дисплея
pinMode(BACKLIGHT_PIN, OUTPUT);
digitalWrite(BACKLIGHT_PIN, backlightStatus);
//Выведем на дисплей стартовое сообщение на 2 секунды
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print(L"Контроллер темп.");
lcd.setCursor(0, 1);
lcd.print(" -=SVN=- v3.0");
delay(2000);
// выведем на дисплей заданное значение температуры на 2 секунды
lcd.setCursor(0, 1);
lcd.print(L"Устан.Темп.: ");
lcd.setCursor(12,1);
lcd.print(setTmp);
//if (setTmpD){lcd.print("Tk");} else {lcd.print("Ty");}
delay(2000);
//Очистим дисплей
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() {
int keyCode=0;
//выводим на дисплей заданное значение температуры
lcd.begin(16,2);
lcd.setCursor(0, 0);
lcd.print(L"Устан. Темп.");
lcd.setCursor(7, 1);
lcd.print(setTmp);
relayStatus100=LOW;
relayStatus50=LOW;
digitalWrite(RELAY_PIN1,LOW);
digitalWrite(RELAY_PIN2,LOW);
digitalWrite(RELAY_PIN3,LOW);
setLed=0;
//Опрашиваем клавиатуру, если нажата клавиша Up увеличиваем значение на 1, если Down – уменьшаем на 1
//Если нажаты клавиши Select или Right – цикл опроса прерывается
//Задержки введены для борьбы с дребезгом, если клавиши срабатывают четко – можно уменьшить время задержек или вообще их убрать
do {
keyCode=ReadKey(KEYPAD_PIN);
if (keyCode==1){
setTmp++;
if (setTmp>45){setTmp=45;}//Проверка максимальной температуры
delay(100);
lcd.setCursor(7, 1);
lcd.print(setTmp);}
if (keyCode==2){
setTmp--;
if (setTmp<10) {setTmp=10;}//Проверка минимальной темературы
//if (setTmp<10){
// lcd.setCursor(8, 1);
// lcd.print(" ");}
delay(100);
lcd.setCursor(7, 1);
lcd.print(setTmp);}
} while (keyCode!=3 && keyCode!=4);
delay(300);
//По клавише Right – созраняем в EEPROM измененное значение
if (keyCode==4) {EEPROM_write_byte(0, setTmp);}
}
void loop() {
//Модуль опроса датчиков и получения сведений о температуре
//Вызывается 1 раз в секунду
unsigned long currentMillis1 = millis();
if(currentMillis1 - previousMillis1 > interval1) {
previousMillis1 = currentMillis1;
//Запуск процедуры измерения температуры
//sensors.setWaitForConversion(false);
sensors.requestTemperatures();
sensorsOut.requestTemperatures();
//sensors.setWaitForConversion(true);
//delay(750); // задержка для обработки информации внутри термометра, в данном случае можно не задавать
//Считывание значения температуры
sensors.getAddress(tempDeviceAddress, 0);
temp1=sensors.getTempC(tempDeviceAddress);
sensorsOut.getAddress(tempDeviceAddressOut, 0);
temp2=sensorsOut.getTempC(tempDeviceAddressOut);
// Вывод текущего значения температуры на дисплей
lcd.setCursor(0, 0);
lcd.print(L"Темпер. ");
lcd.setCursor(9, 0);
lcd.print("P=");
lcd.setCursor(0, 1);
lcd.print("To= ");
lcd.setCursor(3,1);
if (temp1>-127){lcd.print(temp1);} else {lcd.print("HET");delay(200);}
//lcd.print("C");
lcd.setCursor(7,1);
lcd.print(" Tk= ");
lcd.setCursor(12,1);
if (temp2>-127){lcd.print(temp2);} else {lcd.print("HET");delay(200);}
setLed++;
// что твориться... :)
Serial.print(temp1);
Serial.print("; ");
Serial.print(temp2);
Serial.print("; ");
Serial.print(setTmp);
Serial.print("; ");
// if (setTmpD==HIGH){Serial.print("Tk ");} else {Serial.print("Ty ");}
// Serial.print(setTmpD);
Serial.print("; Rel50=");
Serial.print(relayStatus50);
Serial.print("; Rel100=");
Serial.print(relayStatus100);
Serial.print("; RelNas=");
Serial.print(setNas);
Serial.print("; VklOb=");
Serial.println(VklOb);
}
//Контролируем комнату
//temp1 - котел
//temp2 - Комната
if (temp1!=-127&&temp2!=-127){
if (temp2<setTmp-1){VklOb=HIGH;}
if (temp2>setTmp+1){VklOb=LOW;}
if (VklOb==HIGH){
//Проверка условия включения/выключения нагревателя 100%
if (temp1<(50)&&relayStatus100==LOW&&relayStatus50==HIGH&&temp1!=-127){
relayStatus100=HIGH;
relayStatus50=HIGH;
// digitalWrite(RELAY_PIN1,HIGH);
// digitalWrite(RELAY_PIN2,HIGH);
lcd.setCursor(9, 0);
lcd.print("P=100%");
}
if (temp1>50&&relayStatus100==HIGH&&temp1!=-127){
relayStatus100=LOW;
relayStatus50=LOW;
// digitalWrite(RELAY_PIN1,LOW);
// digitalWrite(RELAY_PIN2,LOW);
lcd.setCursor(9, 0);
lcd.print("P= 0%");
}
//Проверка условия включения/выключения нагревателя 50%
if (temp1<60-1&&relayStatus50==LOW&&temp1!=-127){
relayStatus100=LOW;
relayStatus50=HIGH;
// digitalWrite(RELAY_PIN2,LOW);
// digitalWrite(RELAY_PIN1,HIGH);
lcd.setCursor(9, 0);
lcd.print("P= 50%");
}
if (temp1>60+1&&relayStatus50==HIGH&&temp1!=-127){
relayStatus100=LOW;
relayStatus50=LOW;
// digitalWrite(RELAY_PIN1,LOW);
// digitalWrite(RELAY_PIN2,LOW);
lcd.setCursor(9, 0);
lcd.print("P= 0%");
}
if (relayStatus100==LOW&&relayStatus50==LOW){
lcd.setCursor(9, 0);
lcd.print("P= 0%");}
}else{// Достигли температуру в комнате
relayStatus100=LOW;
relayStatus50=LOW;
lcd.setCursor(9, 0);
lcd.print("P= 0%");
// digitalWrite(RELAY_PIN2,LOW);
// digitalWrite(RELAY_PIN1,LOW);
}
}else {//Не работают датчики
relayStatus100=LOW;
relayStatus50=LOW;
digitalWrite(RELAY_PIN1,LOW);
digitalWrite(RELAY_PIN2,LOW);
lcd.setCursor(0, 1);
lcd.print(L"ERROR: Датчики! ");
lcd.setCursor(9, 0);
lcd.print("P= 0%");
delay(1000);
}
if (relayStatus50==HIGH){
digitalWrite(RELAY_PIN1,LOW);
digitalWrite(RELAY_PIN2,HIGH);
}
if (relayStatus100==HIGH){
digitalWrite(RELAY_PIN1,HIGH);
digitalWrite(RELAY_PIN2,HIGH);
}
if (relayStatus100==LOW&&relayStatus50==LOW){
digitalWrite(RELAY_PIN1,LOW);
digitalWrite(RELAY_PIN2,LOW);
}
if (relayStatus100==HIGH||relayStatus50==HIGH){// Работа с насосом
digitalWrite(RELAY_PIN3,HIGH);
setNas=0;
}else{
setNas++;
if (setNas==Nas){
setNas=Nas+1;
digitalWrite(RELAY_PIN3,LOW);
}
}
//if (temp1<setTmp-1&&relayStatus50==LOW&&temp1!=-127){
// relayStatus50=HIGH;
// digitalWrite(RELAY_PIN2,LOW);
// digitalWrite(RELAY_PIN1,HIGH);
// lcd.setCursor(9, 0);
// lcd.print("P= 50%");
//}
//if (temp1>setTmp+1&&relayStatus50==HIGH&&temp1!=-127){
// relayStatus50=LOW;
// digitalWrite(RELAY_PIN1,LOW);
// lcd.setCursor(9, 0);
// lcd.print("P= 0%");
//}
// Опрос клавиатуры
int Feature = ReadKey(KEYPAD_PIN);
if (Feature==1 ) {backlightStatus=1;digitalWrite(BACKLIGHT_PIN, backlightStatus);setLed=0;} //Включение подсветки
if (Feature==2 ) {backlightStatus=0;digitalWrite(BACKLIGHT_PIN, backlightStatus);} //Отключение подсветки
if (Feature==5 ) {delay(200);setTemperature();} //Переход к редактированию заданной температуры
if (setLed>60){
setLed=61;
backlightStatus=0;digitalWrite(BACKLIGHT_PIN, backlightStatus); //Отключение подсветки
}
}
Приветствую всех. Товарищи, помогите пожалуйста разобраться в чем проблема с кодом и исправить. не работает. нашел исхлжный ранее описанныый код и переделал под энкодер. не работает
// Подключаем библиотеку для работы с шиной OneWire
// Термометр будет подключен на Pin2
#include <OneWire.h>
OneWire oneWire(2);
// настраиваем энкодер - указываем пины
#define CLK 10
#define DT 9
#define SW 8
#include <GyverEncoder.h>
Encoder enc(CLK, DT, SW);
//Подключаем библиотеку для работы с термометром
#include <DallasTemperature.h>
//Создаем объект sensors, подключенный по OneWire
DallasTemperature sensors(&oneWire);
//Создаем переменные для работы с термометром
DeviceAddress temp1DeviceAddress;//переменная для хранения адреса датчика
DeviceAddress temp2DeviceAddress; //второй информационный датчик
float temp1=0; //переменная для текущего значения температуры 1
float temp2=0; //переменная для текущего значения температуры 2
int setTmp=0; // переменная для заданного значения температуры
//Подключаем LCD-дисплей
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
//Подсветка управляется через пин D10
#define BACKLIGHT_PIN 10
//Создаем переменную для хранения состояния подсветки
boolean backlightStatus = 1;
// Подключаем библиотеку для работы с ARDUINO EEPROM
//Заданная температура будет храниться по адресу 0
#include <EEPROM.h>
//Реле подключено к пину D11
#define RELAY1 11
#define RELAY2 12
#define RELAY3 13
//Объявим переменную для хранения состояния реле
boolean relayStatus1=LOW;
boolean relayStatus2=LOW;
boolean relayStatus3=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() {
Serial.begin(9600);// подключаем порт
enc.setType(TYPE2); // указываем тип энкодера
//Настроим пин для управления реле
pinMode(RELAY1,OUTPUT);
pinMode(RELAY2,OUTPUT);
pinMode(RELAY3,OUTPUT);
digitalWrite(RELAY1,LOW);
digitalWrite(RELAY2,LOW);
digitalWrite(RELAY3,LOW);
//Считаем из постоянной памяти заданную температуру
setTmp=EEPROM_read_byte(0) ;
//Инициализируем термодатчик и установим разрешающую способность 12 бит
//(обычно она установлена по умолчанию, так что последнюю строчку
//можно опустить)
sensors.begin();
sensors.getAddress(temp1DeviceAddress, 0);
temp1=sensors.getTempC(temp1DeviceAddress);
sensors.getAddress(temp2DeviceAddress, 1);
temp2=sensors.getTempC(temp2DeviceAddress);
// sensors.setResolution(12);
//Настроим подсветку дисплея
pinMode(BACKLIGHT_PIN, OUTPUT);
digitalWrite(BACKLIGHT_PIN, backlightStatus);
//Выведем на дисплей стартовое сообщение на 2 секунды
lcd.begin(16, 2);
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);
}
}
//Определим процедуру редактирования заданной температуры
//Вызывается по нажатию клавиши Select, отображает на дисплее
//заданную температуру и позволяет изменять ее клавишами Up и Down
void setTemperature()
{
lcd.begin(16,2);
int (enc1.isClick());
//выводим на дисплей заданное значение температуры
lcd.setCursor(0, 0);
lcd.print(" Setting temp ");
lcd.setCursor(7, 1);
lcd.print(setTmp);
//Опрашиваем клавиатуру, если нажата клавиша Up увеличиваем
//значение на 1, если Down – уменьшаем на 1
//Если нажаты клавиши Select или Right – цикл опроса прерывается
//Задержки введены для борьбы с дребезгом, если клавиши срабатывают
//четко – можно уменьшить время задержек или вообще их убрать
do
{
if (enc1.isRight()){setTmp++;;lcd.setCursor(7, 1);lcd.print(setTmp);}
if (enc1.isLeft()){setTmp--;delay(150);lcd.setCursor(7, 1);lcd.print(setTmp);}
//lcd.begin(16,2);
}
while (enc1.isHolded());
delay(200);
//lcd.begin(16, 2);
//По клавише Select – созраняем в EEPROM измененное значение
//По клавише Right – восстанавливаем старое значение
if (enc1.isHolded()) {EEPROM_write_byte(0, setTmp);}
}
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);
sensors.getAddress(temp2DeviceAddress, 1);
temp2=sensors.getTempC(temp2DeviceAddress);
// Вывод текущего значения температуры на дисплей
lcd.setCursor(0, 0);
lcd.print("Current");
lcd.setCursor(0, 1);
lcd.print("T=");
lcd.print(temp1);
lcd.print("C");
lcd.setCursor(9, 1);
lcd.print("Ty");
lcd.print(temp2);
}
//Проверка условия включения/выключения нагревателя
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);
//Включение подсветки
if (Feature==1 )
{backlightStatus=1;digitalWrite(BACKLIGHT_PIN, backlightStatus);}
//Отключение подсветки
if (Feature==2 )
{backlightStatus=0;digitalWrite(BACKLIGHT_PIN, backlightStatus);}
//Переход к редактированию заданной температуры
if (Feature==5 )
{delay(200);setTemperature();
}
}
Приветствую всех. Товарищи, помогите пожалуйста разобраться в чем проблема с кодом и исправить. не работает. нашел исхлжный ранее описанныый код и переделал под энкодер. не работает
Почему объявлен Encoder enc; А работа в коде с enc1 ?
ИМХО это кто-то просто пытался склеить два скетча. нифига не понимая в процессе.
Автор - судя по коду. ваш уровень абсолютно нулевой. Боюсь единственный вариант решения Вашей проблемы - заказать готовый код в разделе "Ищу исполнителя" Тысячи за три готов попробовать разобраться
1 click - одно нажатие я подозреваю. Или так прописанов бибилиотеке автора. Хотя ругается не на это ругается на эту строку setTmp=EEPROM_read_byte(0) ;
Arduino: 1.8.12 (Windows 10), Плата:"Arduino Uno"
C:\Users\HOME\Documents\Arduino\temp_encoder\temp_encoder.ino: In function 'void setup()':
temp_encoder:80:10: error: cannot convert 'EEPROMClass' to 'int' in assignment
setTmp=EEPROM ;
^~~~~~
C:\Users\HOME\Documents\Arduino\temp_encoder\temp_encoder.ino: At global scope:
temp_encoder:118:1: error: expected declaration before '}' token
}
^
exit status 1
cannot convert 'EEPROMClass' to 'int' in assignment
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
про кривые ручки вы конечно правы. Ну не все родились гениями и не сразу все знали. Учусь, по тому и пришел к вам с проблемой и просьбой о помощи.
Так начните с изучения основ, а не сразу тырьте код, к тому же пахнущий дерьмом.
В котором автор либо использовал кривущую библиотеку ЕЕПРОМ , либо забыл функцию написать.
Да не факт, по мне гивер добавил а еепром свой функционал. Смотреть и тем более следить за тем говном, что он штампует нет ни желания ни времени
Вы не поняли, Гивер не причем. Посмотрите внимательнее мое сообщение чуть выше - сообщения об ошибках, которые цитирует ТС - не соответвуют приведенному им коду.
Вы не поняли, Гивер не причем. Посмотрите внимательнее мое сообщение чуть выше - сообщения об ошибках, которые цитирует ТС - не соответвуют приведенному им коду.
Ну у меня подобного функционала :
EEPROM_write_byte(0, setTmp);
В библиотеке нет, точно так же в коде функции такой не наблюдаю.
хватит умничать и строить из себя не понятно что, самоутверждаться за счет меня. и так понятно что я 0 в программировании. лучше уж помоги. или заткнись
хватит умничать и строить из себя не понятно что, самоутверждаться за счет меня. и так понятно что я 0 в программировании. лучше уж помоги. или заткнись
А какого хера "новичок", делает в проектах, да ещё и в чужой теме ?
Там целая ветка есть для таких как ты.
Их там гнобят не так сильно.(иногда)
Так читай и разбирайся.
От нас то тебе что надо ?
Что б добрые дяди поправили для тебя где то сжиженный код ? Лесом.
Таких ждут с распростёртыми объятьями в "Ищу исполнителя"
админам: думаю можно потереть все начиная с сообщения #111
ТС : - попробуйте завести новую тему в Песочнице и спросить еще раз, вежливо и с правильным кодом. Но это только в том случае. если готовы грызть учебники и разбираться в теории, иначе - в "Ищу исполнителя" или на юх
не доходит, что я написал выше? - тогда нет смысла продолжать.
Представь себе до меня доходит когда со мной нормально разговаривают без вызова и оскорблений. И да представляешь я посидел, подумал и переписал код, разобрался и все заработало. Без твоих трех тысяч! так что не такие уж и кривые у меня ручки и не тупца я. Прикинь!!!!!
Про кнопки и как их сканировать описанной в шапке темы
Подскажите пожалуйтса, как сделать чтобы реле срабатывало если температура ниже заданной (а не выше, как в скетче) - после того как сработает реле, было включено 5 минут потом отключалось, через 10 минут запрашивалась температура с датчика и повтор...?
Хочется данный скетч применить для обогрева воздуха в вентиляции (5 минут нужно чтобы трубы и обогрев не раскалялись), там рекупелятор стоит и 5 минут хватит чтобы обогревать постепенно воздух ...
Помогите поправить скетч:
Почему не настраивается температура ниже 100 градусов, что за это отвечает?
Всем здрасти.
Использовал вашу идею для своих нужд. Отлично работает. Пришлось правда скорректировать програмку, но в целом использовал оригинал.
Заменил мозг в конвекторе (родные мозги сгорели) и по накатанной сделал управление отоплением в дачном домике, на основе водяного с котлом. Планирую вписаться под газ. Но это пока только задумка.
Всем огромное спасибо за статью.
Мой код для конвектора:
Мой код для Отопления с котлом:
Решение с клавишами на управление:
Не компилируется скетч вер.1.2 библиотеки брал с этой темы.
ver_1.2_dht22:30: error: 'DHT22' was not declared in this scope
Добрый день!
Если не сложно, скиньте схемку.
Заранее благодарен!
Здравствуйте! Очень интересен ваш код под котел отопления. Если вас не затруднит,скиньте, пожалуйста,схему подключения и необходимые материалы.
Читайте комментарии в скетче, там всё расписано куда что подключать.
СПАСИБО,я уже начал разбираться,хотя есть несколько не очень понятных мне моментов
https://yadi.sk/d/kZBXIk5VsUpyv
с русским меню
Добрый день!
Почему не изменяються настройки температуры когда переходишь в настройки температуры для включения насоса, дома, нагрева котла?
Приветствую всех. Товарищи, помогите пожалуйста разобраться в чем проблема с кодом и исправить. не работает. нашел исхлжный ранее описанныый код и переделал под энкодер. не работает
У гивера и так все либы кривые, а тут ещё более кривыми лапками правленый код.
Почему объявлен Encoder enc;
А работа в коде с enc1 ?
Приветствую всех. Товарищи, помогите пожалуйста разобраться в чем проблема с кодом и исправить. не работает. нашел исхлжный ранее описанныый код и переделал под энкодер. не работает
Обратитесь на форум автора библиотеки энкодера - https://community.alexgyver.ru/
ИМХО это кто-то просто пытался склеить два скетча. нифига не понимая в процессе.
Автор - судя по коду. ваш уровень абсолютно нулевой. Боюсь единственный вариант решения Вашей проблемы - заказать готовый код в разделе "Ищу исполнителя" Тысячи за три готов попробовать разобраться
1 click - одно нажатие я подозреваю. Или так прописанов бибилиотеке автора. Хотя ругается не на это ругается на эту строку setTmp=EEPROM_read_byte(0) ;
Arduino: 1.8.12 (Windows 10), Плата:"Arduino Uno"
C:\Users\HOME\Documents\Arduino\temp_encoder\temp_encoder.ino: In function 'void setup()':
temp_encoder:80:10: error: cannot convert 'EEPROMClass' to 'int' in assignment
setTmp=EEPROM ;
^~~~~~
C:\Users\HOME\Documents\Arduino\temp_encoder\temp_encoder.ino: At global scope:
temp_encoder:118:1: error: expected declaration before '}' token
}
^
exit status 1
cannot convert 'EEPROMClass' to 'int' in assignment
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
про кривые ручки вы конечно правы. Ну не все родились гениями и не сразу все знали. Учусь, по тому и пришел к вам с проблемой и просьбой о помощи.
для чего? я научится хочу и понять а не просто машинно исправить код. Мне помощь нужна
вы правы по поводу знаний. к сожалению к вашему, я хочу разобраться, понять и научится. БЕСплатно!
Так начните с изучения основ, а не сразу тырьте код, к тому же пахнущий дерьмом.
В котором автор либо использовал кривущую библиотеку ЕЕПРОМ , либо забыл функцию написать.
вы пишете что
ругается на эту строку setTmp=EEPROM_read_byte(0) ;
а компилятор пишет, что строка не такая
и кто из вас врет? - я больше компилятору верю
не, все еще интереснее - судя по всему ТС нам выложил не тот код, который пытается компилировать
не, все еще интереснее - судя по всему ТС нам выложил не тот код, который пытается компилировать
Да не факт, по мне гивер добавил а еепром свой функционал. Смотреть и тем более следить за тем говном, что он штампует нет ни желания ни времени
Вы не поняли, Гивер не причем. Посмотрите внимательнее мое сообщение чуть выше - сообщения об ошибках, которые цитирует ТС - не соответвуют приведенному им коду.
Я бы не пользовался бибилитеками если обладал зананиями как обойтись. поможете?
"не умеем ходить, будем бегать")) с вашей помощью конечно
делать то что? исправить как?
тот
делать то что? исправить как?
Ну, если ни у кого не возникает желания чистить канализацию - что делать?
Вы не поняли, Гивер не причем. Посмотрите внимательнее мое сообщение чуть выше - сообщения об ошибках, которые цитирует ТС - не соответвуют приведенному им коду.
Ну у меня подобного функционала :
EEPROM_write_byte(0, setTmp);
В библиотеке нет, точно так же в коде функции такой не наблюдаю.
хватит умничать и строить из себя не понятно что, самоутверждаться за счет меня. и так понятно что я 0 в программировании. лучше уж помоги. или заткнись
делать то что? исправить как?
"Читать учебник, разбираться с кодом построчно", предлагать ?
ага) для того и пришел
хватит умничать и строить из себя не понятно что, самоутверждаться за счет меня. и так понятно что я 0 в программировании. лучше уж помоги. или заткнись
А какого хера "новичок", делает в проектах, да ещё и в чужой теме ?
Там целая ветка есть для таких как ты.
Их там гнобят не так сильно.(иногда)
ага) для того и пришел
Так читай и разбирайся.
От нас то тебе что надо ?
Что б добрые дяди поправили для тебя где то сжиженный код ? Лесом.
Таких ждут с распростёртыми объятьями в "Ищу исполнителя"
тот
расскажите это компилятору. Он показывает у вас ошибку в строке
такой строки в выложенном коде нет, сл-но код не тот.
Обсуждать ошибки в каком-то другом коде, который никто даже не видел - смысла нет.
Хотя, думаю, теперь даже если вы выложите правильный код - после вашего хамства вряд ли кто захочет его смотреть.
Удачи в поисках ошибок.
от тебя ничего.
вот и щиши лесом
админам: думаю можно потереть все начиная с сообщения #111
ТС : - попробуйте завести новую тему в Песочнице и спросить еще раз, вежливо и с правильным кодом. Но это только в том случае. если готовы грызть учебники и разбираться в теории, иначе - в "Ищу исполнителя" или на юх
да тот это код.
Хамства? а где это я хамил, и кто же первый то начал.? кто хамит тот и получил в ответ.
спасибо за совет. да готов. Трудно начать с 0 но готов помучится и высшать подсказки, разьяснения
да тот это код.
не доходит, что я написал выше? - тогда нет смысла продолжать.
да тот это код.
не доходит, что я написал выше? - тогда нет смысла продолжать.
Представь себе до меня доходит когда со мной нормально разговаривают без вызова и оскорблений. И да представляешь я посидел, подумал и переписал код, разобрался и все заработало. Без твоих трех тысяч! так что не такие уж и кривые у меня ручки и не тупца я. Прикинь!!!!!