Помогите с кодом

TynuK
Offline
Зарегистрирован: 05.02.2017

Помогите понять в чем проблема, не заходит в меню вообще не реагирует на пульт, коды пульта прописаны,  вот код может кто увидит где ошибка

#include <DS1302.h>

DS1302 rtc(6, 5, 4);    // (RST, DAT, CLK)
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h> // датчики температуры 
#define ONE_WIRE_BUS 8 // следующая остановка автобуса 
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);// стартуем датчик температуры 
#include <EEPROM.h> // для записи данных во внутреннию память процессора 
 
#include <IRremote.h>// обработка дистанционного пульта
int RECV_PIN = 10 ;
IRrecv irrecv(RECV_PIN);
decode_results results;
 
 
#include <LCD_1602_RUS.h> // Библиотека работы с экраном 
LCD_1602_RUS lcd(0x27, 16, 2); 
 
 
#define MQ_PIN A0 // датчик mq9
 
// объявим датчики температуры
//barrel1_temp-температура 1 ферментера
// barrel2_temp - температура второго ферментара
// room_temp - температура в помещении 
DeviceAddress barrel1_temp, barrel2_temp, room_temp;
 
// Режимы работы биогазовой установки
#define mix_button  12 // порт кнопки на вызов принудительного перемешивания
#define mix  11 // порт управления термореле на перемешивание по расписанию
const int alarm=9; // порт включения сигнала аварии 
float mix_period = 90; // интервал между перемешиваниями, мин
float mix_time = 10; // время перемешивания в секундах  180
boolean mix_status = false; // состояние перемешивания
int Sound_control = 1; // работа контроллера со звуковым сигналом
 
// контроль налива объема биомассы в бочках  
float v1=0.0;
float v2=0.0;
float v1_correct=1; //корректирующие коэффициенты налива 1 емкости
float v2_correct=1; //корректирующие коэффициенты налива 2 емкости
int mix_count=0; // количество циклов перемешивания
long previousMillis = 0; // стек переменной времени
int parameters_show=3; // время показа на экране информации,с 
int count_IR = 0; // счетчик для вывода на экран параметров при настройке 
 
int ch4_volume=10; // значение датчика утечек метана 
float mqValue;// переменная для хранения значения, полученного с датчика MQ9
float ch4; // переменная для хранения уровня газа в процентах
 
 
void setup() {
Serial.begin(9600); // открываем порт на вывод информации
  
// перемешивание
pinMode(mix_button, INPUT_PULLUP); // Инициируем порт кнопки перемешивания
pinMode(mix, OUTPUT); // термореле на включение насосов перемешивания
pinMode (MQ_PIN, INPUT);// порт датчика газа (MQ9)
 
//Установка  часов для запуска-
rtc.halt(false);
rtc.writeProtect(false);
//rtc.setTime(18, 00, 00);     // ставим время
//rtc.setDate(05, 02, 2017); // ставим дату
 
// инициируем экран
 lcd.init(); // инициализируем экран
  lcd.backlight();
  // Приветствие
  lcd.clear();
  lcd.setCursor(1, 1);
lcd.print("UMIUM BCS-01");
delay (1000);
lcd.clear();// очищаем экран 
 
// инициируем температурные датчики с высоким разрешением
sensors.begin(); // стартуем библиотеку ДАЛЛАС
  
  // присвоим соответствующие адреса температурным датчикам 
  sensors.getAddress(barrel1_temp, 0); // ? УТОЧНИТЬ!!!
  sensors.getAddress(barrel2_temp, 2); // ?
  sensors.getAddress(room_temp, 1); //    ?
 
 // установим максимальную точность снятия температуры 12 бит  
  sensors.setResolution(barrel1_temp, 12);
  sensors.setResolution(barrel2_temp, 12);
  sensors.setResolution(room_temp, 12); // Для комнатной температуры 9 бит 
  
  EEPROM.write(2,int(mix_period));// период перемешивания
  delay(50);
  EEPROM.write(3,int(mix_time)); // время перемешивания
  delay(50);
  EEPROM.write(4,int(parameters_show));// период показа данных на экран
  delay(50);
  EEPROM.write(5,int(Sound_control));// звуковой сигнал 
  delay(50);
if(EEPROM.read(10)==90){
 
mix_period=EEPROM.read(2); // период перемешивания
delay(100);
mix_time=EEPROM.read(3); // время перемешивания
delay(100);
parameters_show=EEPROM.read(4); // время показа данных на экране
delay(100);
Sound_control=EEPROM.read(5); //звуковой сигнал 
delay(100);
v1_correct=EEPROM.read(6)/100; // корректирующий коэффициент первого ферментера
delay(100);
v2_correct=EEPROM.read(7)/100; // корректирующий коэффициент второго ферментера
delay(100);
ch4_volume=EEPROM.read(8); // предельное значение датчика утечек газа
}    
 
    // инициируем пульт дистанционного управления
    irrecv.enableIRIn(); // Start the receiver
}
 
//++++++++++++++++Обработка аварий 
 
  //+++++++++++++++++++++++Программа управления перемешиванием+++++++
 
  void mix_process(float time_mixing, float period_mixing){
 
 unsigned long currentMillis = millis(); // промежуточная переменная для фиксации времени работы программы с 
   // начала старта работы контроллера 
 
  if(currentMillis - previousMillis > period_mixing*60*1000) {
    
    previousMillis = currentMillis;  // 
 
     // вызываем процесс перемешивания
    digitalWrite(mix, HIGH);// включаем перемешивание
    mix_status = true;// статус перемешивания - включено
    lcd.clear();// очищаем экран
    lcd.setCursor(4, 1);
    lcd.print("MIX PROCESS!");
    delay(time_mixing*1000); // перемешиваем установленное время 
    mix_count++; // прибавляем счетчик числа процессов перемешивания
    digitalWrite(mix, LOW);// выключаем перемешивание
    mix_status = false; // статус перемешивания - выключено 
   lcd.clear();
    previousMillis = millis(); // Важно! Скорректируем время, так как перемешивание скрадывает время!
  }
    // Принудительное перемешивание
 
    if(digitalRead(mix_button)==LOW){
      digitalWrite(mix, HIGH);// включаем перемешивание
    mix_status = true;// статус перемешивания - включено
      lcd.clear();// очищаем экран 
    lcd.setCursor(4, 1);
    lcd.print("MIX PROCESS!");
    delay(time_mixing*1000); // перемешиваем  в установленное время
    digitalWrite(mix, LOW);// выключаем перемешивание
    mix_count++; // прибавляем счетчик числа процессов перемешивания
    mix_status = false; // статус перемешивания - выключено 
     lcd.clear();
      previousMillis = millis(); // Важно! Скорректируем время, так как перемешивание скрадывает время!
      }   
    }
 
    // Обработка данных по заполнению ферментеров 
     void volume_barrels(){
     
      }
  // ++++++++++++обработка дистанционного пульта
  void IR_setup(boolean volume_save){
 
 digitalWrite(mix, LOW);// выключаем  принудительно и перемешивание
 
 do { // зацикливаемся в режиме 
 
 lcd.clear();// очищаем экран 
 
 
   // накапливаем счетчик позиции на вывод на экран
    Serial.println(results.value, DEC);
    Serial.println("Ок");
    
    if(results.value == 16736925) {count_IR++;} // прибавляем счетчик на единицу
    if(results.value == 16754775) {count_IR--;} // уменьшаем счетчик на единицу
    if(count_IR<=0) {count_IR=1;} // если счетчик меньше нуля, присваиваем 1
    if(count_IR<=0) {count_IR>7;} // если счетчик больше семи, присваиваем 1
    Serial.println(String(count_IR));
 
 
//++++++++++++++++++++++++++++++++++++ начинаем обработку
   
    switch (count_IR) {
 
     case 1:
      //Температура биогазового процесса 
     lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Biogas temperature");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Biogas temperature");
    delay(100); 
 
do
{
 irrecv.resume();
lcd.setCursor(5, 2);
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=1);
      
      break;
 
//++++++++++++++++++++++++++++++++++++
      case 2:
      //Температура котла предельная
     lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Heating boller, C");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Heat temperature");
    delay(100); 
 
do
{
 irrecv.resume();
 
 
lcd.setCursor(5, 2);
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=2);     
      break;
 
//++++++++++++++++++++++++++++++++++++
      case 3:
      //Интервал перемешивания, мин mix_period
     lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Mix period, min");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Mix period");
    delay(100); 
 
do
{
 irrecv.resume();
if(results.value == 16761405) {mix_period=+5;} // шаг - пять минут
if(results.value == 16720605) {mix_period=-5;}
 
if(mix_period>240) {mix_period=240;} //зададим пределы параметра 
if(mix_period<15) {mix_period=15;}
 
lcd.setCursor(5, 2);
 lcd.print(mix_period);
 Serial.println("Mix period"+ String(mix_period,4));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=3);   
      break;
 
//+++++++++++++++++++++++++++++++++++++
      case 4:
      // Время перемешивания, сек mix_time
   lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Mix time, s");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Mix period");
    delay(100); 
 
do
{
 irrecv.resume();
if(results.value == 16761405) {mix_time=+5;} // шаг - пять секунд
if(results.value == 16720605) {mix_time=-5;}
 
if(mix_time>240) {mix_time=240;} //зададим пределы параметра 
if(mix_time<15) {mix_time=15;}
 
lcd.setCursor(5, 2);
 lcd.print(mix_time);
 Serial.println("Mix time"+ String(mix_time,4));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=4);     
      break;
 
//++++++++++++++++++++++++++++++++++++++
      case 5:
      //Время вывода на экран информации, parameters_show
        lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("LCD show, s");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("LCD Show");
    delay(100); 
 
do
{
 irrecv.resume();
if(results.value == 16761405) {parameters_show=+1;} // шаг - секунда
if(results.value == 16720605) {parameters_show=-1;}
 
if(parameters_show>5) {parameters_show=5;} //зададим пределы параметра 
if(parameters_show<1) {parameters_show=1;}
 
lcd.setCursor(5, 2);
 lcd.print(parameters_show);
 Serial.println("Mix show"+ String(parameters_show));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=5);     
     
      break;
//++++++++++++++++++++++++++++++
      case 6:
      //Сигнал звуковой АВАРИЯ
lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Sound control");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Sound");
    delay(100); 
 
do
{
 irrecv.resume();
if(results.value == 16761405) {Sound_control=+1;} // 0 - нет 1 - есть
if(results.value == 16720605) {Sound_control=-1;}
 
if(Sound_control>1) {Sound_control=1;} //зададим пределы параметра 
if(Sound_control<1) {Sound_control=0;}
 
lcd.setCursor(5, 2);
if(Sound_control=1){lcd.print("ON");}
if(Sound_control=0){lcd.print("OFF");}
 
 Serial.println("Sound control"+ String(Sound_control));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
while (count_IR=6);     
      
      break;
     
      case 7:
      //Сохранение результатов в память
 
  lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Save & Exit ");
    lcd.setCursor(1, 3);
    lcd.print("Press OK for save");
     lcd.setCursor(1, 3);
    lcd.print("For Exit press #");
    Serial.println("Save parameters?");
    delay(100); 
 
do
{
 irrecv.resume();
if(results.value == 16712445) { // нажата кнопка ОК пишем в память
  
  EEPROM.write(2,int(mix_period));// период перемешивания
  delay(50);
  EEPROM.write(3,int(mix_time)); // время перемешивания
  delay(50);
  EEPROM.write(4,int(parameters_show));// период показа данных на экран
  delay(50);
  EEPROM.write(5,int(Sound_control));// звуковой сигнал 
  delay(50);
  EEPROM.write(6,int(v1_correct*100));// коэффициенты коррекции объема ферментера 0..100 (от 0.01...1)
  delay(50);
  EEPROM.write(7,int(v2_correct*100));// коэффициенты коррекции объема ферментера 0..100 (от 0.01...1)
  delay(50);
  EEPROM.write(8, ch4_volume); // значение датчика утечек газа 
  
  EEPROM.write(10 , 90); // установим в десятой ячейке значение 90, чтобы можно
  // было бы загрузить значения из памяти при послебующем включении контроллера 
   
   lcd.setCursor(1, 3);
    lcd.print("Save - ok!");
    delay(3000); 
    volume_save=false;
    count_IR=0; 
    break; ///????
 }    
 
if(results.value == 16732845) { // если нажата решетка отменям все и выходим
lcd.clear();// очищаем экран 
    lcd.setCursor(4, 2);
    lcd.print("Not save in memory!");
    
    // устанавливаем заводские настройки параметров 
    mix_period = 90; // интервал между перемешиваниями, мин
    mix_time = 180; // время перемешивания в секундах 
    Sound_control = 1;// звуковой сигнал
    parameters_show=2; // время показа на экране информации,с
    ch4_volume=10; // значение датчика утечек газа 
    // корректирующие коэффициенты налива биомассы 
    v1_correct=1; 
    v2_correct=1; 
    
    delay(2000);
    volume_save=false;
    count_IR=0; 
    break; ///????
}
 
if(results.value == 16736925) {count_IR++;}
if(results.value == 16754775) {count_IR--;}  
 
} while (count_IR=7);     
      
      break;
 
       case 8:
      //корректирующий коэффициент первого ферментера 
     lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Correct V1");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Correct V1");
    delay(100); 
 
do
{
 irrecv.resume();
if(results.value == 16761405) {v1_correct=+0.01;} // шаг - сотая
if(results.value == 16720605) {v1_correct=-0.01;}
 
if(v1_correct>1) {v1_correct=1;} //зададим пределы параметра 
if(v1_correct<0.01) {v1_correct=0.01;}
 
lcd.setCursor(5, 2);
 lcd.print(v1_correct);
 Serial.println("V сорресt"+ String(v1_correct));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=8);
      
      break;
 
            case 9:
      //корректирующий коэффициент второго ферментера
     lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Correct V2");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Correct V2");
    delay(100); 
 
do
{
 irrecv.resume();
if(results.value == 16761405) {v2_correct=+0.01;} // шаг - сотая
if(results.value == 16720605) {v2_correct=-0.01;}
 
if(v2_correct>1) {v2_correct=1;} //зададим пределы параметра 
if(v2_correct<0.01) {v2_correct=0.01;}
 
lcd.setCursor(5, 2);
 lcd.print(v2_correct);
 Serial.println("V2 сорресt"+ String(v2_correct));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=9);
      break; 
 
                  case 10:
      //Значение датчика утечек газа 
     lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("CH4 control");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Correct V2");
    delay(100); 
 
do
{
 irrecv.resume();
if(results.value == 16761405) {ch4_volume++;} // шаг - сотая
if(results.value == 16720605) {ch4_volume--;}
 
if(ch4_volume>50) {ch4_volume=50;} //зададим пределы параметра 
if(ch4_volume<1) {ch4_volume=1;}
 
lcd.setCursor(5, 2);
 lcd.print(ch4_volume);
 Serial.println("CH4 volume"+ String(v2_correct));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=10);
      break; 
 
    default: 
  lcd.setCursor(1, 1);
lcd.print("SETUP Parameters");
lcd.setCursor(1, 2);
lcd.print("Press ^ or v for list");
delay(100); 
    break;
  }
 } while(volume_save=true);
      irrecv.resume();// запросим значение кнопки
    delay(300);  
   }          
 void loop() {
 irrecv.resume();// запросим значение кнопки на пульте управления 
 
// если нажали * то переходим в меню настроек 
if (results.value, DEC)
if(results.value ==  16728765){
  lcd.clear();// очищаем экран 
  lcd.setCursor(1, 1);
lcd.print("Please, wait");
delay(1000);
IR_setup(true);
}
 
// проверяем, не пора ли перемешивать
mix_process(mix_time, mix_period); // проверяем, не пора ли перемешивать
 
// вызываем на экран информацию 
//выводим время
 
lcd.setCursor(3, 0); // отступ первой строки слева 0 .
lcd.print(rtc.getTimeStr());    //  Время в формате    час:минуты:секунды
 lcd.setCursor(3, 2);
 lcd.print( rtc.getDateStr());
delay(parameters_show*1000);
 
//выводим температуру
lcd.setCursor(2, 2);
lcd.print(L"Температура:");
delay(parameters_show*1000);
lcd.clear();
 
// температура помещения 
sensors.requestTemperatures();
float tem=sensors.getTempC(barrel1_temp); 
 lcd.setCursor(1, 1);
lcd.print(L"В помещении");
lcd.setCursor(2, 2);
lcd.print(String(tem,4));
lcd.print(" C");
delay(parameters_show*1000);
lcd.clear();// очищаем экран
 
// температура 1 ферментера 
  lcd.setCursor(1, 1);
lcd.print(L"1 ферментер");
lcd.setCursor(2, 2);
float fer1=sensors.getTempC(barrel2_temp);
lcd.print(String(fer1,4));
lcd.print(" C");
delay(parameters_show*1000);
lcd.clear();
 
// температура 2 ферментера 
lcd.clear();// очищаем экран 
  lcd.setCursor(1, 1);
lcd.print(L"2 ферментер");
lcd.setCursor(2, 2);
float fer2=sensors.getTempC(room_temp);
lcd.print(String(fer2,4));
lcd.print(" C");
delay(parameters_show*1000);
lcd.clear();
 
// время до перемешивания
  lcd.setCursor(1, 1);
lcd.print("Time before mix");
lcd.setCursor(2, 2);
float time_before_mix=(mix_period*60*1000+previousMillis-millis())/60000; //?
Serial.println(int(time_before_mix)); // посмотрим в порту 
lcd.print(String(int(time_before_mix)) + " min.");
lcd.setCursor(1, 4);
lcd.print("Mix count is " + String(mix_count));
delay(parameters_show*1000);
lcd.clear();
 
// выведем объемы ферментеров 
  lcd.setCursor(1, 1);
lcd.print("Volume of barrels");
lcd.setCursor(2, 2);
volume_barrels(); // посмотрим объемы ферментеров
lcd.print("V1=" + String(int(v1)) + " l " + String(int((v1/5000)*100)) + " %");
lcd.setCursor(1, 3);
lcd.print("V2=" + String(int(v2)) + " l " + String(int((v2/5000)*100)) + " %");
delay(parameters_show*1000);
lcd.clear();
 
// выведем показания датчика утечек газа
  mqValue = analogRead(MQ_PIN);
      ch4 = mqValue/1024 * 100;
  lcd.setCursor(1, 1);
  lcd.print(L"CH4  Контроль");
  lcd.setCursor(2, 2);
  lcd.print(L"Volume ");
  lcd.setCursor(10, 2);
  lcd.print(ch4);
  Serial.println ((ch4));
  lcd.print(" %");
   lcd.setCursor(1, 4);
   if(ch4<ch4_volume){
   lcd.print("CH4 low. All OK!");
   }   
   else {lcd.print("CH4 HIGH!!!!!");
   }
  delay(parameters_show*1000);
lcd.clear();
}
vvadim
Онлайн
Зарегистрирован: 23.05.2012

без обид, но вряд ли кто захочет в такой длинной простыне разбираться...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Блин, новичков пускать на форум под подпись кровью, что с темой о вставке кода ознакомлен.

TynuK
Offline
Зарегистрирован: 05.02.2017
#include <DS1302.h>

DS1302 rtc(6, 5, 4);    // (RST, DAT, CLK)
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h> // датчики температуры 
#define ONE_WIRE_BUS 8 // следующая остановка автобуса 
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);// стартуем датчик температуры 
#include <EEPROM.h> // для записи данных во внутреннию память процессора 
 
#include <IRremote.h>// обработка дистанционного пульта
int RECV_PIN = 10 ;
IRrecv irrecv(RECV_PIN);
decode_results results;
 
 
#include <LCD_1602_RUS.h> // Библиотека работы с экраном 
LCD_1602_RUS lcd(0x27, 16, 2); 
 
 
#define MQ_PIN A0 // датчик mq9
 
// объявим датчики температуры
//barrel1_temp-температура 1 ферментера
// barrel2_temp - температура второго ферментара
// room_temp - температура в помещении 
DeviceAddress barrel1_temp, barrel2_temp, room_temp;
 
// Режимы работы биогазовой установки
#define mix_button  12 // порт кнопки на вызов принудительного перемешивания
#define mix  11 // порт управления термореле на перемешивание по расписанию
const int alarm=9; // порт включения сигнала аварии 
float mix_period = 90; // интервал между перемешиваниями, мин
float mix_time = 10; // время перемешивания в секундах  180
boolean mix_status = false; // состояние перемешивания
int Sound_control = 1; // работа контроллера со звуковым сигналом
 
// контроль налива объема биомассы в бочках  
float v1=0.0;
float v2=0.0;
float v1_correct=1; //корректирующие коэффициенты налива 1 емкости
float v2_correct=1; //корректирующие коэффициенты налива 2 емкости
int mix_count=0; // количество циклов перемешивания
long previousMillis = 0; // стек переменной времени
int parameters_show=3; // время показа на экране информации,с 
int count_IR = 0; // счетчик для вывода на экран параметров при настройке 
 
int ch4_volume=10; // значение датчика утечек метана 
float mqValue;// переменная для хранения значения, полученного с датчика MQ9
float ch4; // переменная для хранения уровня газа в процентах
 
 
void setup() {
Serial.begin(9600); // открываем порт на вывод информации
  
// перемешивание
pinMode(mix_button, INPUT_PULLUP); // Инициируем порт кнопки перемешивания
pinMode(mix, OUTPUT); // термореле на включение насосов перемешивания
pinMode (MQ_PIN, INPUT);// порт датчика газа (MQ9)
 
//Установка  часов для запуска-
rtc.halt(false);
rtc.writeProtect(false);
//rtc.setTime(18, 00, 00);     // ставим время
//rtc.setDate(05, 02, 2017); // ставим дату
 
// инициируем экран
 lcd.init(); // инициализируем экран
  lcd.backlight();
  // Приветствие
  lcd.clear();
  lcd.setCursor(1, 1);
lcd.print("UMIUM BCS-01");
delay (1000);
lcd.clear();// очищаем экран 
 
// инициируем температурные датчики с высоким разрешением
sensors.begin(); // стартуем библиотеку ДАЛЛАС
  
  // присвоим соответствующие адреса температурным датчикам 
  sensors.getAddress(barrel1_temp, 0); // ? УТОЧНИТЬ!!!
  sensors.getAddress(barrel2_temp, 2); // ?
  sensors.getAddress(room_temp, 1); //    ?
 
 // установим максимальную точность снятия температуры 12 бит  
  sensors.setResolution(barrel1_temp, 12);
  sensors.setResolution(barrel2_temp, 12);
  sensors.setResolution(room_temp, 12); // Для комнатной температуры 9 бит 
  
  EEPROM.write(2,int(mix_period));// период перемешивания
  delay(50);
  EEPROM.write(3,int(mix_time)); // время перемешивания
  delay(50);
  EEPROM.write(4,int(parameters_show));// период показа данных на экран
  delay(50);
  EEPROM.write(5,int(Sound_control));// звуковой сигнал 
  delay(50);
if(EEPROM.read(10)==90){
 
mix_period=EEPROM.read(2); // период перемешивания
delay(100);
mix_time=EEPROM.read(3); // время перемешивания
delay(100);
parameters_show=EEPROM.read(4); // время показа данных на экране
delay(100);
Sound_control=EEPROM.read(5); //звуковой сигнал 
delay(100);
v1_correct=EEPROM.read(6)/100; // корректирующий коэффициент первого ферментера
delay(100);
v2_correct=EEPROM.read(7)/100; // корректирующий коэффициент второго ферментера
delay(100);
ch4_volume=EEPROM.read(8); // предельное значение датчика утечек газа
}    
 
    // инициируем пульт дистанционного управления
    irrecv.enableIRIn(); // Start the receiver
}
 
//++++++++++++++++Обработка аварий 
 
  //+++++++++++++++++++++++Программа управления перемешиванием+++++++
 
  void mix_process(float time_mixing, float period_mixing){
 
 unsigned long currentMillis = millis(); // промежуточная переменная для фиксации времени работы программы с 
   // начала старта работы контроллера 
 
  if(currentMillis - previousMillis > period_mixing*60*1000) {
    
    previousMillis = currentMillis;  // 
 
     // вызываем процесс перемешивания
    digitalWrite(mix, HIGH);// включаем перемешивание
    mix_status = true;// статус перемешивания - включено
    lcd.clear();// очищаем экран
    lcd.setCursor(4, 1);
    lcd.print("MIX PROCESS!");
    delay(time_mixing*1000); // перемешиваем установленное время 
    mix_count++; // прибавляем счетчик числа процессов перемешивания
    digitalWrite(mix, LOW);// выключаем перемешивание
    mix_status = false; // статус перемешивания - выключено 
   lcd.clear();
    previousMillis = millis(); // Важно! Скорректируем время, так как перемешивание скрадывает время!
  }
    // Принудительное перемешивание
 
    if(digitalRead(mix_button)==LOW){
      digitalWrite(mix, HIGH);// включаем перемешивание
    mix_status = true;// статус перемешивания - включено
      lcd.clear();// очищаем экран 
    lcd.setCursor(4, 1);
    lcd.print("MIX PROCESS!");
    delay(time_mixing*1000); // перемешиваем  в установленное время
    digitalWrite(mix, LOW);// выключаем перемешивание
    mix_count++; // прибавляем счетчик числа процессов перемешивания
    mix_status = false; // статус перемешивания - выключено 
     lcd.clear();
      previousMillis = millis(); // Важно! Скорректируем время, так как перемешивание скрадывает время!
      }   
    }
 
    // Обработка данных по заполнению ферментеров 
     void volume_barrels(){
     
      }
  // ++++++++++++обработка дистанционного пульта
  void IR_setup(boolean volume_save){
 
 digitalWrite(mix, LOW);// выключаем  принудительно и перемешивание
 
 do { // зацикливаемся в режиме 
 
 lcd.clear();// очищаем экран 
 
 
   // накапливаем счетчик позиции на вывод на экран
    Serial.println(results.value, DEC);
    Serial.println("Ок");
    
    if(results.value == 16736925) {count_IR++;} // прибавляем счетчик на единицу
    if(results.value == 16754775) {count_IR--;} // уменьшаем счетчик на единицу
    if(count_IR<=0) {count_IR=1;} // если счетчик меньше нуля, присваиваем 1
    if(count_IR<=0) {count_IR>7;} // если счетчик больше семи, присваиваем 1
    Serial.println(String(count_IR));
 
 
//++++++++++++++++++++++++++++++++++++ начинаем обработку
   
    switch (count_IR) {
 
     case 1:
      //Температура биогазового процесса 
     lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Biogas temperature");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Biogas temperature");
    delay(100); 
 
do
{
 irrecv.resume();
lcd.setCursor(5, 2);
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=1);
      
      break;
 
//++++++++++++++++++++++++++++++++++++
      case 2:
      //Температура котла предельная
     lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Heating boller, C");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Heat temperature");
    delay(100); 
 
do
{
 irrecv.resume();
 
 
lcd.setCursor(5, 2);
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=2);     
      break;
 
//++++++++++++++++++++++++++++++++++++
      case 3:
      //Интервал перемешивания, мин mix_period
     lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Mix period, min");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Mix period");
    delay(100); 
 
do
{
 irrecv.resume();
if(results.value == 16761405) {mix_period=+5;} // шаг - пять минут
if(results.value == 16720605) {mix_period=-5;}
 
if(mix_period>240) {mix_period=240;} //зададим пределы параметра 
if(mix_period<15) {mix_period=15;}
 
lcd.setCursor(5, 2);
 lcd.print(mix_period);
 Serial.println("Mix period"+ String(mix_period,4));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=3);   
      break;
 
//+++++++++++++++++++++++++++++++++++++
      case 4:
      // Время перемешивания, сек mix_time
   lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Mix time, s");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Mix period");
    delay(100); 
 
do
{
 irrecv.resume();
if(results.value == 16761405) {mix_time=+5;} // шаг - пять секунд
if(results.value == 16720605) {mix_time=-5;}
 
if(mix_time>240) {mix_time=240;} //зададим пределы параметра 
if(mix_time<15) {mix_time=15;}
 
lcd.setCursor(5, 2);
 lcd.print(mix_time);
 Serial.println("Mix time"+ String(mix_time,4));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=4);     
      break;
 
//++++++++++++++++++++++++++++++++++++++
      case 5:
      //Время вывода на экран информации, parameters_show
        lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("LCD show, s");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("LCD Show");
    delay(100); 
 
do
{
 irrecv.resume();
if(results.value == 16761405) {parameters_show=+1;} // шаг - секунда
if(results.value == 16720605) {parameters_show=-1;}
 
if(parameters_show>5) {parameters_show=5;} //зададим пределы параметра 
if(parameters_show<1) {parameters_show=1;}
 
lcd.setCursor(5, 2);
 lcd.print(parameters_show);
 Serial.println("Mix show"+ String(parameters_show));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=5);     
     
      break;
//++++++++++++++++++++++++++++++
      case 6:
      //Сигнал звуковой АВАРИЯ
lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Sound control");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Sound");
    delay(100); 
 
do
{
 irrecv.resume();
if(results.value == 16761405) {Sound_control=+1;} // 0 - нет 1 - есть
if(results.value == 16720605) {Sound_control=-1;}
 
if(Sound_control>1) {Sound_control=1;} //зададим пределы параметра 
if(Sound_control<1) {Sound_control=0;}
 
lcd.setCursor(5, 2);
if(Sound_control=1){lcd.print("ON");}
if(Sound_control=0){lcd.print("OFF");}
 
 Serial.println("Sound control"+ String(Sound_control));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} 
while (count_IR=6);     
      
      break;
     
      case 7:
      //Сохранение результатов в память
 
  lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Save & Exit ");
    lcd.setCursor(1, 3);
    lcd.print("Press OK for save");
     lcd.setCursor(1, 3);
    lcd.print("For Exit press #");
    Serial.println("Save parameters?");
    delay(100); 
 
do
{
 irrecv.resume();
if(results.value == 16712445) { // нажата кнопка ОК пишем в память
  
  EEPROM.write(2,int(mix_period));// период перемешивания
  delay(50);
  EEPROM.write(3,int(mix_time)); // время перемешивания
  delay(50);
  EEPROM.write(4,int(parameters_show));// период показа данных на экран
  delay(50);
  EEPROM.write(5,int(Sound_control));// звуковой сигнал 
  delay(50);
  EEPROM.write(6,int(v1_correct*100));// коэффициенты коррекции объема ферментера 0..100 (от 0.01...1)
  delay(50);
  EEPROM.write(7,int(v2_correct*100));// коэффициенты коррекции объема ферментера 0..100 (от 0.01...1)
  delay(50);
  EEPROM.write(8, ch4_volume); // значение датчика утечек газа 
  
  EEPROM.write(10 , 90); // установим в десятой ячейке значение 90, чтобы можно
  // было бы загрузить значения из памяти при послебующем включении контроллера 
   
   lcd.setCursor(1, 3);
    lcd.print("Save - ok!");
    delay(3000); 
    volume_save=false;
    count_IR=0; 
    break; ///????
 }    
 
if(results.value == 16732845) { // если нажата решетка отменям все и выходим
lcd.clear();// очищаем экран 
    lcd.setCursor(4, 2);
    lcd.print("Not save in memory!");
    
    // устанавливаем заводские настройки параметров 
    mix_period = 90; // интервал между перемешиваниями, мин
    mix_time = 180; // время перемешивания в секундах 
    Sound_control = 1;// звуковой сигнал
    parameters_show=2; // время показа на экране информации,с
    ch4_volume=10; // значение датчика утечек газа 
    // корректирующие коэффициенты налива биомассы 
    v1_correct=1; 
    v2_correct=1; 
    
    delay(2000);
    volume_save=false;
    count_IR=0; 
    break; ///????
}
 
if(results.value == 16736925) {count_IR++;}
if(results.value == 16754775) {count_IR--;}  
 
} while (count_IR=7);     
      
      break;
 
       case 8:
      //корректирующий коэффициент первого ферментера 
     lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Correct V1");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Correct V1");
    delay(100); 
 
do
{
 irrecv.resume();
if(results.value == 16761405) {v1_correct=+0.01;} // шаг - сотая
if(results.value == 16720605) {v1_correct=-0.01;}
 
if(v1_correct>1) {v1_correct=1;} //зададим пределы параметра 
if(v1_correct<0.01) {v1_correct=0.01;}
 
lcd.setCursor(5, 2);
 lcd.print(v1_correct);
 Serial.println("V сорресt"+ String(v1_correct));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=8);
      
      break;
 
            case 9:
      //корректирующий коэффициент второго ферментера
     lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Correct V2");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Correct V2");
    delay(100); 
 
do
{
 irrecv.resume();
if(results.value == 16761405) {v2_correct=+0.01;} // шаг - сотая
if(results.value == 16720605) {v2_correct=-0.01;}
 
if(v2_correct>1) {v2_correct=1;} //зададим пределы параметра 
if(v2_correct<0.01) {v2_correct=0.01;}
 
lcd.setCursor(5, 2);
 lcd.print(v2_correct);
 Serial.println("V2 сорресt"+ String(v2_correct));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=9);
      break; 
 
                  case 10:
      //Значение датчика утечек газа 
     lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("CH4 control");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Correct V2");
    delay(100); 
 
do
{
 irrecv.resume();
if(results.value == 16761405) {ch4_volume++;} // шаг - сотая
if(results.value == 16720605) {ch4_volume--;}
 
if(ch4_volume>50) {ch4_volume=50;} //зададим пределы параметра 
if(ch4_volume<1) {ch4_volume=1;}
 
lcd.setCursor(5, 2);
 lcd.print(ch4_volume);
 Serial.println("CH4 volume"+ String(v2_correct));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=10);
      break; 
 
    default: 
  lcd.setCursor(1, 1);
lcd.print("SETUP Parameters");
lcd.setCursor(1, 2);
lcd.print("Press ^ or v for list");
delay(100); 
    break;
  }
 } while(volume_save=true);
      irrecv.resume();// запросим значение кнопки
    delay(300);  
   }          
 void loop() {
 irrecv.resume();// запросим значение кнопки на пульте управления 
 
// если нажали * то переходим в меню настроек 
if (results.value, DEC)
if(results.value ==  16728765){
  lcd.clear();// очищаем экран 
  lcd.setCursor(1, 1);
lcd.print("Please, wait");
delay(1000);
IR_setup(true);
}
 
// проверяем, не пора ли перемешивать
mix_process(mix_time, mix_period); // проверяем, не пора ли перемешивать
 
// вызываем на экран информацию 
//выводим время
 
lcd.setCursor(3, 0); // отступ первой строки слева 0 .
lcd.print(rtc.getTimeStr());    //  Время в формате    час:минуты:секунды
 lcd.setCursor(3, 2);
 lcd.print( rtc.getDateStr());
delay(parameters_show*1000);
 
//выводим температуру
lcd.setCursor(2, 2);
lcd.print(L"Температура:");
delay(parameters_show*1000);
lcd.clear();
 
// температура помещения 
sensors.requestTemperatures();
float tem=sensors.getTempC(barrel1_temp); 
 lcd.setCursor(1, 1);
lcd.print(L"В помещении");
lcd.setCursor(2, 2);
lcd.print(String(tem,4));
lcd.print(" C");
delay(parameters_show*1000);
lcd.clear();// очищаем экран
 
// температура 1 ферментера 
  lcd.setCursor(1, 1);
lcd.print(L"1 ферментер");
lcd.setCursor(2, 2);
float fer1=sensors.getTempC(barrel2_temp);
lcd.print(String(fer1,4));
lcd.print(" C");
delay(parameters_show*1000);
lcd.clear();
 
// температура 2 ферментера 
lcd.clear();// очищаем экран 
  lcd.setCursor(1, 1);
lcd.print(L"2 ферментер");
lcd.setCursor(2, 2);
float fer2=sensors.getTempC(room_temp);
lcd.print(String(fer2,4));
lcd.print(" C");
delay(parameters_show*1000);
lcd.clear();
 
// время до перемешивания
  lcd.setCursor(1, 1);
lcd.print("Time before mix");
lcd.setCursor(2, 2);
float time_before_mix=(mix_period*60*1000+previousMillis-millis())/60000; //?
Serial.println(int(time_before_mix)); // посмотрим в порту 
lcd.print(String(int(time_before_mix)) + " min.");
lcd.setCursor(1, 4);
lcd.print("Mix count is " + String(mix_count));
delay(parameters_show*1000);
lcd.clear();
 
// выведем объемы ферментеров 
  lcd.setCursor(1, 1);
lcd.print("Volume of barrels");
lcd.setCursor(2, 2);
volume_barrels(); // посмотрим объемы ферментеров
lcd.print("V1=" + String(int(v1)) + " l " + String(int((v1/5000)*100)) + " %");
lcd.setCursor(1, 3);
lcd.print("V2=" + String(int(v2)) + " l " + String(int((v2/5000)*100)) + " %");
delay(parameters_show*1000);
lcd.clear();
 
// выведем показания датчика утечек газа
  mqValue = analogRead(MQ_PIN);
      ch4 = mqValue/1024 * 100;
  lcd.setCursor(1, 1);
  lcd.print(L"CH4  Контроль");
  lcd.setCursor(2, 2);
  lcd.print(L"Volume ");
  lcd.setCursor(10, 2);
  lcd.print(ch4);
  Serial.println ((ch4));
  lcd.print(" %");
   lcd.setCursor(1, 4);
   if(ch4<ch4_volume){
   lcd.print("CH4 low. All OK!");
   }   
   else {lcd.print("CH4 HIGH!!!!!");
   }
  delay(parameters_show*1000);
lcd.clear();
}

 

TynuK
Offline
Зарегистрирован: 05.02.2017

Приостите,но от куда же я мог знать?

И все же кто нить может подсказать?

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

TynuK пишет:

Приостите,но от куда же я мог знать?

Как откуда? Эта тема просто прикреплена сверху. Читать надо, прежде, чем писать.

TynuK пишет:

И все же кто нить может подсказать?

Подсказать-то можно, только вот есть серьёзные сомнения в том, что Вы поймёте подсказки.
 
Вы ведь это не сами писали, так? Более того, Вы абсолютно не понимаете. что там написано. Правильно?
 
Если я ошибся и Вы понимаете этот код, давайте поработаем с ним, если же я прав, и Вы ничего в этом коде не понимаете, то Вам нужна не подсказака, а просто переделка кода за Вас. В этом случае либо обратитесь к автору кода, либо закажите эту работу за деньги в разделе "Ищу исполнителя".
 
Для проверки понимаете ли Вы в этом коде хоть что-нибудь:
 
1. объясните пожалуйста, что делается в строках 91-114? Зачем надо сначала безусловно писать в EEPROM, а затем по условию оттуда же считывать?
 
2. Также объясните как Вы понимаете строку 636. Что по-Вашему там делается?
TynuK
Offline
Зарегистрирован: 05.02.2017

Да ты прав код писал не я,а другой человек,понимаю не все в этом новичек, но все же как я понял то в EEPROM

пишется чтоб потом можно было востоновить настройки по умолчанию,в 114 строке не могу объяснить зачем там эта скопка, а строки 636 вообще не вижу здесь 

623
   lcd.print("CH4 low. All OK!");
624
   }  
625
   else {lcd.print("CH4 HIGH!!!!!");
626
   }
627
  delay(parameters_show*1000);
628
lcd.clear();
629
}

заканчивается на 629 строке, если конечно я прав и эти цифры с боку означают где какая строка\



 

 

TynuK
Offline
Зарегистрирован: 05.02.2017

да и вообще я прошу понять в чем может быть причина,а не переделывать за меня. Спасибо

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

TynuK пишет:

а строки 636 вообще не вижу здесь 

Виноват, 528.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

TynuK пишет:

да и вообще я прошу понять в чем может быть причина,а не переделывать за меня. Спасибо

Так в том и причина, что Вы взяли недоделанный код, смысла которого не понимаете. 

Вы лучше бы начали писать сами. Не такие большие коды для начала, понемножку. по шажочку, и научитесь.

TynuK
Offline
Зарегистрирован: 05.02.2017

почему это он не доделанный? он работал, и в меню заходил и настройки менял, но было это 3 года назад, потом от туда выдернули датчик который газ мерил и от пульта эту лампочку которая сигнал принимает, щас поставили ее обратно точно такой же пульт и коды теже, так же датчик газа щас стоит другой, да и вообще с этого кода планируется еще много что поубирать, но прежде хотел бы с пультом разобраться, потому что по странной причине он просто перестал работать.

 

TynuK
Offline
Зарегистрирован: 05.02.2017

в 528 строке насколько я понял это в какой кодировке код с пульта должен быть, но не нашел ни одного кода в интернете где что то подобное было бы написано

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

TynuK пишет:

почему это он не доделанный? он работал

Даже, если так, он всё равно недоделанный. Там торча ошмётки задумок, которые так и не доведены до ума и причём не одна и не две. А то, что работал - ну имеет право недоделанный код работать.

 

TynuK
Offline
Зарегистрирован: 05.02.2017
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h> // датчики температуры 
#define ONE_WIRE_BUS 9 // следующая остановка автобуса 
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);// стартуем датчик температуры 
#include <EEPROM.h> // для записи данных во внутреннию память процессора 

#include <IRremote.h> // обработка дистанционного пульта
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;


#include <LiquidCrystal_I2C.h> // Библиотека работы с экраном 
LiquidCrystal_I2C lcd(0x27,20,4); 


// объявим датчики температуры barrel1_temp-температура 1 ферментера
// barrel2_temp - температура второго ферментара,  heat_temp- температура котла
// room_temp - температура в помещении 
DeviceAddress barrel1_temp, barrel2_temp, heat_temp, room_temp;

// Режимы работы биогазовой установки
float t_heat = 70.00; // предельная температура нагрева котла, которая контролируется по температуре воды в котле
float t_process = 39.00; // температура биогазового процесса 
float delta_t = 0.15; // Точность поддержания температуры 
const int heat = 13; // порт контроллера на подачу сигнала на управление нагревом
const int mix_button = 12; // порт кнопки на вызов принудительного перемешивания
const int mix = 10; // порт управления термореле на перемешивание по расписанию
const int alarm=8; // порт включения сигнала аварии 
float mix_period = 90; // интервал между перемешиваниями, мин
float mix_time = 180; // время перемешивания в секундах 
boolean heat_status = false; // состояние нагрева  
boolean mix_status = false; // состояние перемешивания
int Sound_control = 0; // работа контроллера со звуковым сигналом
// контроль налива объема биомассы в бочках  
float v1=0.0;
float v2=0.0;
float v1_correct=1; //корректирующие коэффициенты налива 1 емкости
float v2_correct=1; //корректирующие коэффициенты налива 2 емкости
int mix_count=0; // количество циклов перемешивания
long previousMillis = 0; // стек переменной времени
int parameters_show=2; // время показа на экране информации,с 
int count_IR=0; // счетчик для вывода на экран параметров при настройке 
int ch4_volume=10; // значение датчика утечек метана 
boolean alarm_mode=false; // сотояние аварии



void setup() {
// нагрев котла
 pinMode(heat, OUTPUT); // Инициируем порт нагрева котла
 digitalWrite(heat, LOW); // в начале котел обязательно выключен! 

// перемешивание
pinMode(mix_button, OUTPUT); // Инициируем порт кнопки перемешивания
pinMode(mix, OUTPUT); // термореле на включение насосов перемешивания

// инициируем экран
 lcd.init(); // инициализируем экран
  lcd.backlight();

// инициируем температурные датчики с высоким разрешением
sensors.begin(); // стартуем библиотеку ДАЛЛАС
  
  // присвоим соответствующие адреса температурным датчикам 
  sensors.getAddress(barrel1_temp, 0); // ? УТОЧНИТЬ!!!
  sensors.getAddress(barrel2_temp, 2); // ?
  sensors.getAddress(heat_temp, 3); //    ?
  sensors.getAddress(room_temp, 1); //    ?
 
 // установим максимальную точность снятия температуры 12 бит  
  sensors.setResolution(barrel1_temp, 12);
  sensors.setResolution(barrel2_temp, 12);
  sensors.setResolution(heat_temp, 12);
  sensors.setResolution(room_temp, 12); // Для комнатной температуры 9 бит 

   //  запросы температуры, к примеру температуры комнаты 
  //   sensors.requestTemperatures();
  //   float t=sensors.getTempC(room_temp);
  //   delay(750);  
    Serial.begin(9600); // открываем порт на вывод информации
    
    /*
     EEPROM.write(0,int(t_process*10)); //температура процесса 
  delay(50);
  EEPROM.write(1,int(t_heat)); // температура котла
  delay(50);
  EEPROM.write(2,int(mix_period));// период перемешивания
  delay(50);
  EEPROM.write(3,int(mix_time)); // время перемешивания
  delay(50);
  EEPROM.write(4,int(parameters_show));// период показа данных на экран
  delay(50);
  EEPROM.write(5,int(Sound_control));// звуковой сигнал 
  delay(50);
     */
if(EEPROM.read(10)==90){

t_process=(EEPROM.read(0)+256)/10; // температура процесса 
delay(100);

t_heat=EEPROM.read(1); // температура котла
delay(100);

mix_period=EEPROM.read(2); // период перемешивания
delay(100);

mix_time=EEPROM.read(3); // время перемешивания
delay(100);

parameters_show=EEPROM.read(4); // время показа данных на экране
delay(100);

Sound_control=EEPROM.read(5); //звуковой сигнал 
delay(100);

v1_correct=EEPROM.read(6)/100; // корректирующий коэффициент первого ферментера
delay(100);

v2_correct=EEPROM.read(7)/100; // корректирующий коэффициент второго ферментера
delay(100);

ch4_volume=EEPROM.read(8); // предельное значение датчика утечек газа
}    

    // инициируем пульт дистанционного управления
    irrecv.enableIRIn(); 
}

/*/++++++++++++++++Обработка аварий 

void alarm(String message){
  digitalWrite(heat, LOW);// выключаем котел 
  digitalWrite(mix, LOW);// выключаем перемешивание
  alarm_mode=true;
  digitalWrite(alarm, HIGH);// включаем световую аварию
 // if 
  
  }
*/

// +++++++++++++++++программа управления накревом
void heat_control(float t_biomass, float delta, float t_culler){

 // проверяем, нет ли перегрева котла
  while (t_culler>t_heat){
    digitalWrite(heat, LOW);// выключаем котел 
    heat_status = false; // статус нагрева изменен на отключено  
    lcd.clear(); // очистим экран и выведем на него сообщение об аварии на котле
  lcd.setCursor(4, 1);
lcd.print("HEAT PROBLEM!!!");
    }
 
  // управляем процессом нагрева 
  if (t_biomass-t_process<delta){
    digitalWrite(heat, HIGH);// включаем котел
    heat_status = true; // статус нагрева изменен на включено  
   }
   else {
    digitalWrite(heat, LOW);// выключаем котел 
    heat_status = false; // статус нагрева изменен на отключено  
    }
  }

  //+++++++++++++++++++++++Программа управления перемешиванием+++++++

  void mix_process(float time_mixing, float period_mixing){

 unsigned long currentMillis = millis(); // промежуточная переменная для фиксации времени работы программы с 
   // начала старта работы контроллера 
 
  if(currentMillis - previousMillis > period_mixing*60*1000) {
    
    previousMillis = currentMillis;  // 

     // вызываем процесс перемешивания
     digitalWrite(heat, LOW);// выключаем принудительно котел на время перемешивания  
    digitalWrite(mix, HIGH);// включаем перемешивание
    mix_status = true;// статус перемешивания - включено
    lcd.clear();// очищаем экран
    lcd.setCursor(4, 1);
    lcd.print("MIX PROCESS!");
    delay(time_mixing*1000); // перемешиваем установленное время 
    mix_count++; // прибавляем счетчик числа процессов перемешивания
    digitalWrite(mix, LOW);// выключаем перемешивание
    mix_status = false; // статус перемешивания - выключено 
    previousMillis = millis(); // Важно! Скорректируем время, так как перемешивание скрадывает время!
  }
    // Принудительное перемешивание

    if(digitalRead(mix_button)==HIGH){
      digitalWrite(heat, LOW);// выключаем принудительно котел на время перемешивания 
      digitalWrite(mix, HIGH);// включаем перемешивание
    mix_status = true;// статус перемешивания - включено
      lcd.clear();// очищаем экран 
    lcd.setCursor(4, 1);
    lcd.print("MIX PROCESS!");
    delay(time_mixing*1000); // перемешиваем  в установленное время
    digitalWrite(mix, LOW);// выключаем перемешивание
    mix_count++; // прибавляем счетчик числа процессов перемешивания
    mix_status = false; // статус перемешивания - выключено 
      previousMillis = millis(); // Важно! Скорректируем время, так как перемешивание скрадывает время!
      }   
    }

    // Обработка данных по заполнению ферментеров 
    
    void volume_barrels(){
      }


  
  // ++++++++++++обработка дистанционного пульта

  void IR_setup(boolean volume_save){



digitalWrite(heat, LOW);// выключаем принудительно котел
 digitalWrite(mix, LOW);// выключаем  принудительно и перемешивание
 
 do { // зацикливаемся в режиме 
 
 lcd.clear();// очищаем экран 


   // накапливаем счетчик позиции на вывод на экран
    Serial.println(results.value, DEC);
    Serial.println("Ок");
    
    if(results.value == 16736925) {count_IR++;} // прибавляем счетчик на единицу
    if(results.value == 16754775) {count_IR--;} // уменьшаем счетчик на единицу
    if(count_IR<=0) {count_IR=1;} // если счетчик меньше нуля, присваиваем 1
    if(count_IR<=0) {count_IR>7;} // если счетчик больше семи, присваиваем 1
    Serial.println(String(count_IR));


//++++++++++++++++++++++++++++++++++++ начинаем обработку
   
    switch (count_IR) {

     case 1:
      //Температура биогазового процесса 
     lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Biogas temperature");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Biogas temperature");
    delay(100); 

do
{
 irrecv.resume();
if(results.value == 16761405) {t_process=+0.5;} // шаг - полградуса 
if(results.value == 16720605) {t_process=-0.5;}

if(t_process>45) {t_process=45;} //зададим пределы параметра 
if(t_process<35) {t_process=35;}

lcd.setCursor(5, 2);
 lcd.print(t_process);
 Serial.println("tprocess volume1"+ String(t_process,4));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=1);
      
      break;



//++++++++++++++++++++++++++++++++++++
      case 2:
      //Температура котла предельная
     lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Heating boller, C");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Heat temperature");
    delay(100); 

do
{
 irrecv.resume();
if(results.value == 16761405) {t_heat=+1;} // шаг - градус 
if(results.value == 16720605) {t_heat=-1;}

if(t_heat>80) {t_heat=80;} //зададим пределы параметра 
if(t_heat<40) {t_heat=40;}

lcd.setCursor(5, 2);
 lcd.print(t_heat);
 Serial.println("Boller t_heat"+ String(t_heat,4));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=2);     
      break;

//++++++++++++++++++++++++++++++++++++
      case 3:
      //Интервал перемешивания, мин mix_period
     lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Mix period, min");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Mix period");
    delay(100); 

do
{
 irrecv.resume();
if(results.value == 16761405) {mix_period=+5;} // шаг - пять минут
if(results.value == 16720605) {mix_period=-5;}

if(mix_period>240) {mix_period=240;} //зададим пределы параметра 
if(mix_period<15) {mix_period=15;}

lcd.setCursor(5, 2);
 lcd.print(mix_period);
 Serial.println("Mix period"+ String(mix_period,4));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=3);   
      break;

//+++++++++++++++++++++++++++++++++++++
      case 4:
      // Время перемешивания, сек mix_time
   lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Mix time, s");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Mix period");
    delay(100); 

do
{
 irrecv.resume();
if(results.value == 16761405) {mix_time=+5;} // шаг - пять секунд
if(results.value == 16720605) {mix_time=-5;}

if(mix_time>240) {mix_time=240;} //зададим пределы параметра 
if(mix_time<15) {mix_time=15;}

lcd.setCursor(5, 2);
 lcd.print(mix_time);
 Serial.println("Mix time"+ String(mix_time,4));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=4);     
      break;

//++++++++++++++++++++++++++++++++++++++
      case 5:
      //Время вывода на экран информации, parameters_show
        lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("LCD show, s");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("LCD Show");
    delay(100); 

do
{
 irrecv.resume();
if(results.value == 16761405) {parameters_show=+1;} // шаг - секунда
if(results.value == 16720605) {parameters_show=-1;}

if(parameters_show>5) {parameters_show=5;} //зададим пределы параметра 
if(parameters_show<1) {parameters_show=1;}

lcd.setCursor(5, 2);
 lcd.print(parameters_show);
 Serial.println("Mix show"+ String(parameters_show));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=5);     
     
      break;
//++++++++++++++++++++++++++++++
      case 6:
      //Сигнал звуковой АВАРИЯ
lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Sound control");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Sound");
    delay(100); 

do
{
 irrecv.resume();
if(results.value == 16761405) {Sound_control=+1;} // 0 - нет 1 - есть
if(results.value == 16720605) {Sound_control=-1;}

if(Sound_control>1) {Sound_control=1;} //зададим пределы параметра 
if(Sound_control<1) {Sound_control=0;}

lcd.setCursor(5, 2);
if(Sound_control=1){lcd.print("ON");}
if(Sound_control=0){lcd.print("OFF");}

 Serial.println("Sound control"+ String(Sound_control));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} 
while (count_IR=6);     
      
      break;
     
      case 7:
      //Сохранение результатов в память

  lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Save & Exit ");
    lcd.setCursor(1, 3);
    lcd.print("Press OK for save");
     lcd.setCursor(1, 3);
    lcd.print("For Exit press #");
    Serial.println("Save parameters?");
    delay(100); 

do
{
 irrecv.resume();
if(results.value == 16712445) { // нажата кнопка ОК пишем в память
  EEPROM.write(0,int(t_process*10)-256); //температура процесса 
  delay(50);
  EEPROM.write(1,int(t_heat)); // температура котла
  delay(50);
  EEPROM.write(2,int(mix_period));// период перемешивания
  delay(50);
  EEPROM.write(3,int(mix_time)); // время перемешивания
  delay(50);
  EEPROM.write(4,int(parameters_show));// период показа данных на экран
  delay(50);
  EEPROM.write(5,int(Sound_control));// звуковой сигнал 
  delay(50);
  EEPROM.write(6,int(v1_correct*100));// коэффициенты коррекции объема ферментера 0..100 (от 0.01...1)
  delay(50);
  EEPROM.write(7,int(v2_correct*100));// коэффициенты коррекции объема ферментера 0..100 (от 0.01...1)
  delay(50);
  EEPROM.write(8, ch4_volume); // значение датчика утечек газа 
  
  EEPROM.write(10 , 90); // установим в десятой ячейке значение 90, чтобы можно
  // было бы загрузить значения из памяти при послебующем включении контроллера 
   
   lcd.setCursor(1, 3);
    lcd.print("Save - ok!");
    delay(3000); 
    volume_save=false;
    count_IR=0; 
    break; ///????
 }    

if(results.value == 16732845) { // если нажата решетка отменям все и выходим
lcd.clear();// очищаем экран 
    lcd.setCursor(4, 2);
    lcd.print("Not save in memory!");
    
    // устанавливаем заводские настройки параметров 
    t_heat = 70.00; // предельная температура нагрева котла, которая контролируется по температуре воды в котле
    t_process = 39.00; // температура биогазового процесса 
    mix_period = 90; // интервал между перемешиваниями, мин
    mix_time = 180; // время перемешивания в секундах 
    Sound_control = 0;// звуковой сигнал 
    parameters_show=2; // время показа на экране информации,с
    ch4_volume=10; // значение датчика утечек газа 
    // корректирующие коэффициенты налива биомассы 
    v1_correct=1; 
    v2_correct=1; 
    
    delay(2000);
    volume_save=false;
    count_IR=0; 
    break; ///????
}

if(results.value == 16736925) {count_IR++;}
if(results.value == 16754775) {count_IR--;}  

} while (count_IR=7);     
      
      break;

       case 8:
      //корректирующий коэффициент первого ферментера 
     lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Correct V1");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Correct V1");
    delay(100); 

do
{
 irrecv.resume();
if(results.value == 16761405) {v1_correct=+0.01;} // шаг - сотая
if(results.value == 16720605) {v1_correct=-0.01;}

if(v1_correct>1) {v1_correct=1;} //зададим пределы параметра 
if(v1_correct<0.01) {v1_correct=0.01;}

lcd.setCursor(5, 2);
 lcd.print(v1_correct);
 Serial.println("V сорресt"+ String(v1_correct));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=8);
      
      break;

            case 9:
      //корректирующий коэффициент второго ферментера
     lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Correct V2");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Correct V2");
    delay(100); 

do
{
 irrecv.resume();
if(results.value == 16761405) {v2_correct=+0.01;} // шаг - сотая
if(results.value == 16720605) {v2_correct=-0.01;}

if(v2_correct>1) {v2_correct=1;} //зададим пределы параметра 
if(v2_correct<0.01) {v2_correct=0.01;}

lcd.setCursor(5, 2);
 lcd.print(v2_correct);
 Serial.println("V2 сорресt"+ String(v2_correct));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=9);
      break; 

                  case 10:
      //Значение датчика утечек газа 
     lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("CH4 control");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Correct V2");
    delay(100); 

do
{
 irrecv.resume();
if(results.value == 16761405) {ch4_volume++;} // шаг - сотая
if(results.value == 16720605) {ch4_volume--;}

if(ch4_volume>50) {ch4_volume=50;} //зададим пределы параметра 
if(ch4_volume<1) {ch4_volume=1;}

lcd.setCursor(5, 2);
 lcd.print(ch4_volume);
 Serial.println("CH4 volume"+ String(v2_correct));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=10);
      break; 

    default: 
  lcd.setCursor(1, 1);
lcd.print("SETUP Parameters");
lcd.setCursor(1, 2);
lcd.print("Press ^ or v for list");
delay(100); 
    break;
  }
 } while(volume_save=true);
  
    irrecv.resume();// запросим значение кнопки
    delay(300);  
       
 }          
 
 
void loop() {
mix_process(mix_time, mix_period); // проверяем, не пора ли перемешивать
 irrecv.resume();// запросим значение кнопки на пульте управления 

// если нажали * то переходим в меню настроек 
if(results.value == 16736925) {
  lcd.clear();// очищаем экран 
  lcd.setCursor(1, 1);
lcd.print("Please, wait");
delay(1000);
IR_setup(true);
  }

// проверяем не пора ли подогреть биомассу
sensors.requestTemperatures();
float t_now=sensors.getTempC(barrel1_temp);
delay(750);  
t_now+=sensors.getTempC(barrel2_temp);
t_now=t_now/2;
delay(750);
heat_control(t_now, delta_t,t_heat); // вызываем программу нагрева  

// вызываем на экран информацию 
// температура биомассы 
lcd.clear();// очищаем экран 
  lcd.setCursor(1, 1);
lcd.print("Temperare of biomass");
lcd.setCursor(2, 2);
lcd.print(String(t_now,4));
delay(parameters_show*1000);


// температура котла
lcd.clear();// очищаем экран 
  lcd.setCursor(1, 1);
lcd.print("Temperare of boller");
lcd.setCursor(2, 2);
sensors.requestTemperatures();
float t_boller=sensors.getTempC(heat_temp);
delay(750);
lcd.print(String(t_boller,4));
lcd.setCursor(2, 3);
if (heat_status==true){
lcd.print("Now boller is ON");
}
else {
  lcd.print("Now boller is OFF");
}
delay(parameters_show*1000);


// время до перемешивания
lcd.clear();// очищаем экран 
  lcd.setCursor(1, 1);
lcd.print("Time before mix");
lcd.setCursor(2, 2);
float time_before_mix=(mix_period*60*1000+previousMillis-millis())/60000; //?
Serial.println(int(time_before_mix)); // посмотрим в порту 
lcd.print(String(int(time_before_mix)) + " min.");
lcd.setCursor(1, 4);
lcd.print("Mix count is " + String(mix_count));
delay(parameters_show*1000);

// выведем объемы ферментеров 
lcd.clear();// очищаем экран 
  lcd.setCursor(1, 1);
lcd.print("Volume of barrels");
lcd.setCursor(2, 2);
volume_barrels(); // посмотрим объемы ферментеров
lcd.print("V1=" + String(int(v1)) + " l " + String(int((v1/5000)*100)) + " %");
lcd.setCursor(1, 3);
lcd.print("V2=" + String(int(v2)) + " l " + String(int((v2/5000)*100)) + " %");
delay(parameters_show*1000);

// выведем показания датчика утечек газа
  int sensorValue;
  sensorValue = int((analogRead(A0)/1024)*100);
  lcd.clear();// очищаем экран 
  lcd.setCursor(1, 1);
  lcd.print("CH4  control");
  lcd.setCursor(2, 2);
  lcd.print("Volume ");
  lcd.setCursor(10, 2);
  lcd.print(sensorValue);
   lcd.setCursor(1, 4);
   if(sensorValue<ch4_volume){
   lcd.print("CH4 low. All OK!");
   }   
   else {lcd.print("CH4 HIGH!!!!");}
  delay(parameters_show*1000);

}

 

TynuK
Offline
Зарегистрирован: 05.02.2017

а вот исходник кода , не менялось еще ни чего здесь, но пульт все равно не работает

 

TynuK
Offline
Зарегистрирован: 05.02.2017

и здесь тоже ошметки торчат????

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

TynuK пишет:

в 528 строке насколько я понял это в какой кодировке код с пульта должен быть, но не нашел ни одного кода в интернете где что то подобное было бы написано

Ну. что-то подобное я и предполагал. В этой строке написан бред сивой кобылы, но Вы этого не понимаете потому, что не знаете языка, на котором он написан. Точно так же Вы не понимаете, что написано в тех строках, что мы обсуждали раньше. И не надо писать:

TynuK пишет:

да и вообще я прошу понять в чем может быть причина,а не переделывать за меня

Понять книгу на китайском может человек, знающий китайский. Также и здесь. Что Вы можете понять, если Вы не знаете языка на котором это написано?

Помогать Вам исправлять код бесполезно, т.к. Вы не знаете языка и никакие подсказки и советы не сработают - Вы не сможете их "воплотить в исправления". Можно только сделать всё за Вас. Но с этим обращайтесь в раздел "Ищу исполнителя".

TynuK
Offline
Зарегистрирован: 05.02.2017

ну так и не писал бы ни чего больше раз сам ни чего не можешь сделать, а просто подсказать от чего от талкиваться мог бы, а на счет 528 строки, я тебе и написал что ни чего подобного ни где не смог найти

и это еще не значит что это бред, так как человек писавший этот код  подправил библиотеку IRremote.h, и вот как раз там то эта строчка встречается и не раз, спасибо за зря потраченное время

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

1. Строка "if (results.value, DEC)" является бредом вре зависимости от того где и сколько раз она встречается.

2. Не припомню, чтобы мы с Вам пили на брудершафт.

3. Я дал Вам самый лучший совет который Вам только можно дать (см. пост №9). Благодарность - как всегда на этом форуме.

 

wdrakula
wdrakula аватар
Онлайн
Зарегистрирован: 15.03.2016

Код в сообщении 3 - набор бессмыслецы.

Код в сообщении 13 - скорее всего рабочий. Нужно подключить монитор порта и прочитать диагностику.

Нужно дополнительно вывести диагностику из loop().

Автор кода выводит диагностические сообщения. Там вы найдете свое счастье! Если, конечно, поняли, что я написал.

==============

Кстати, то, на что указал Евгений, это бессмыслеца - обломок диагностического сообщения, после того, как в коде кто-то покопался.

И Вопрос про строки с 91 по 114. В версии, опубликованной в сообщении 13 эта часть закомментирована, что и требуется. Версия в сообщении 3 - это же праздник какой-то!

---------------------

Мнение такое ТС - жадное ......, которое поругалось с автором кода и не хочет платить.

Расчитывая, что добрые дяди с форума ща на раз все решат.

Не, не раешат. Ибо с хрена ль? Цеховая солидарность. Пусть долечивает тот доктор, кто начал. ;) ;) ;)

Клапауций 823
Клапауций 823 аватар
Offline
Зарегистрирован: 13.01.2017

ЕвгенийП пишет:

Благодарность - как всегда на этом форуме.

благодарность - знаковая переменная.

TynuK
Offline
Зарегистрирован: 05.02.2017

Спасибо, в том то и дело что в монитор порта ничего не выводится кроме как оставшегося времени до начала перемешивания, а так спасибо за наводку буду пробовать дальше

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

начните с простого, залейте скетч определяющий коды вашего пульта, то-есть коды всех кнопок, без этого никуда дальше вы не двинитесь

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

wdrakula пишет:

Код в сообщении 3 - набор бессмыслецы.

Код в сообщении 13 - скорее всего рабочий. Нужно подключить монитор порта и прочитать диагностику.

Нужно дополнительно вывести диагностику из loop().

Автор кода выводит диагностические сообщения. Там вы найдете свое счастье! Если, конечно, поняли, что я написал.

==============

Кстати, то, на что указал Евгений, это бессмыслеца - обломок диагностического сообщения, после того, как в коде кто-то покопался.

И Вопрос про строки с 91 по 114. В версии, опубликованной в сообщении 13 эта часть закомментирована, что и требуется. Версия в сообщении 3 - это же праздник какой-то!

---------------------

Мнение такое ТС - жадное ......, которое поругалось с автором кода и не хочет платить.

Расчитывая, что добрые дяди с форума ща на раз все решат.

Не, не раешат. Ибо с хрена ль? Цеховая солидарность. Пусть долечивает тот доктор, кто начал. ;) ;) ;)

692 строки исходного кода это не доктор, это профессор )))

TynuK
Offline
Зарегистрирован: 05.02.2017

Автору кода пока не до этого, чтоб переделывать этот или писать новый,пробую я пока что, код из сообщении 13, 

точно так же работает как и код  выше указанный проблемма одна перестал работать пульт, хотел услышать мнение почему или может кто ошибку увидит, а не то чтоб мне тут вес расписали и зделали все за меня,  я и сам могу 

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

 

TynuK
Offline
Зарегистрирован: 05.02.2017

коды проверял, они одинаковые он не риагирует на пульт вообще ни как в этом коде, пытался в монитор порта вывести, просто из примера воткнул Serial.println(results.value, DEC); , но и так же ни какой реакции не было((

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

TynuK пишет:

коды проверял, они одинаковые он не риагирует на пульт вообще ни как в этом коде, пытался в монитор порта вывести, просто из примера воткнул Serial.println(results.value, DEC); , но и так же ни какой реакции не было((

Этого не может быть, дайте скрин с экрана кодов пульта и что за пульт покажите

TynuK
Offline
Зарегистрирован: 05.02.2017

692 строки тока из за того что, надо было следить за котлом, щас это не нужно, температура мерилась с котла и 2 реакторов и выводилась одна средняя, щас же нужно чтоб просто с 2 реакторов была температура, первый код который я сюда выложил это уже я начал там менять, но запарился с этим пультом, а так там много что уже не надо, и еще в планах подрубить 2 дальномера и с их помощью высчитывать колличество жидкости в реакторах, уже пробовал это делать но пока что разбираюсь как их 2 дальномера подключить.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

TynuK пишет:

692 строки тока из за того что, надо было следить за котлом, щас это не нужно, температура мерилась с котла и 2 реакторов и выводилась одна средняя, щас же нужно чтоб просто с 2 реакторов была температура, первый код который я сюда выложил это уже я начал там менять, но запарился с этим пультом, а так там много что уже не надо, и еще в планах подрубить 2 дальномера и с их помощью высчитывать колличество жидкости в реакторах, уже пробовал это делать но пока что разбираюсь как их 2 дальномера подключить.

"Тихо сам с собою я веду беседу..."???

Попросил дать дамп кодов пульта

TynuK
Offline
Зарегистрирован: 05.02.2017

это просто пример загрузил пульт не знаю как точно называется на нем просто написано внизу

KEYES могу фотку пульта выложить

 

TynuK
Offline
Зарегистрирован: 05.02.2017
qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Небоскребы, небоскребы , а я маленький такой. (Блин не то)

Чем больше шкаф (зачеркнуто) программа, тем больше она глючит.  Зачем писать такую длиную программу. или вы думаете, что ошибки испугаюся размера программы и сбегут.

ПС: Лучше переписать программу, да стуктуру вменяемую сделать.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

TynuK пишет:

это просто пример загрузил пульт не знаю как точно называется на нем просто написано внизу

KEYES могу фотку пульта выложить

Ну и откуда в KEYES коды, что в скетче используются?

Там такие кстати

KEYES
FFХХХХ










 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

qwone пишет:

Небоскребы, небоскребы , а я маленький такой. (Блин не то)

Чем больше шкаф (зачеркнуто) программа, тем больше она глючит.  Зачем писать такую длиную программу. или вы думаете, что ошибки испугаюся размера программы и сбегут.

ПС: Лучше переписать программу, да стуктуру вменяемую сделать.

Он скульптор, взял глыбу и отсекает всё ненужное

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Тогда я наверно "дровосек". Я бы ее под самый пенек отсек, что бы глаза не видели.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

qwone пишет:

Тогда я наверно "дровосек". Я бы ее под самый пенек отсек, что бы глаза не видели.

я вообще удивляюсь, как вы можете смотреть чужие коды более 10 строк )))
я б так не смог

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Ну я сразу код кидаю в среду и начинаю с Ctrl+T когда регистр Английский. А дальше начинаю формировать под свой стиль. Но здесь с этим do{}while() кривизна зашкаливает

TynuK
Offline
Зарегистрирован: 05.02.2017

ну да а если HEX изминить на DEC то как раз такие как та коды будут

TynuK
Offline
Зарегистрирован: 05.02.2017

Верно! Ане нужного там много.За котлом следить не надо, температуру надо отдельно выводить, а датчик газа вообще другой теперь,и в меню настроек вообще ничего не надо кроме как время перемешивания настроить.

TynuK
Offline
Зарегистрирован: 05.02.2017

Я пытался в таком виде "HEX" коды туда подставлять,но тогда ошибка, в разных видах пробовал ивсе равно ноль эфекта

TynuK
Offline
Зарегистрирован: 05.02.2017

пробовал так чтоб сразу в меню зашел, просто посмотреть ,но он заходит и виснет, не могу понять ведь работало из начально все и пульт с такими вот кадами

// если нажали * то переходим в меню настроек
 { вот сюда скопку убирал
if(results.value == 16736925)
  lcd.clear();// очищаем экран
  lcd.setCursor(1, 1);
lcd.print("Please, wait");
delay(1000);
IR_setup(true);
  }

 

TynuK
Offline
Зарегистрирован: 05.02.2017

do{}while() вот и я так подумал, поэтому и решил что надо вырезать по полной от туда

 // ++++++++++++обработка дистанционного пульта

  void IR_setup(boolean volume_save){
 digitalWrite(mix, LOW);// выключаем  принудительно перемешивание
 
 do { // зацикливаемся в режиме 
   lcd.clear();// очищаем экран 
   
   // накапливаем счетчик позиции на вывод на экран
   if (irrecv.decode(&results)) {
    Serial.println(results.value, DEC);
    Serial.println("Ок");
   }
 delay (100);
   
    if(results.value == 16736925) {count_IR++;} // прибавляем счетчик на единицу
   if(results.value == 16754775) {count_IR--;} // уменьшаем счетчик на единицу
 if(count_IR<=0) {count_IR=1;} // если счетчик меньше нуля, присваиваем 1
    if(count_IR<=0) {count_IR>7;} // если счетчик больше семи, присваиваем 1
    Serial.println(String(count_IR));
irrecv.resume();

//++++++++++++++++++++++++++++++++++++ начинаем обработку
 
   switch (count_IR) {
   
    
//++++++++++++++++++++++++++++++++++++
      case 1:
      //Интервал перемешивания, мин mix_period
lcd.clear();// очищаем экран 
   lcd.setCursor(1, 1);
    lcd.print("Mix period, min");
   lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Mix period");
    delay(100); 

do
{
 irrecv.resume();
if(results.value == 16761405) {mix_period=+5;} // шаг - пять минут
if(results.value == 16720605) {mix_period=-5;}

if(mix_period>240) {mix_period=240;} //зададим пределы параметра 
if(mix_period<15) {mix_period=15;}

lcd.setCursor(5, 2);
 lcd.print(mix_period);
 Serial.println("Mix period"+ String(mix_period,4));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=3);   
      break;

//+++++++++++++++++++++++++++++++++++++
      case 2:
      // Время перемешивания, сек mix_time
   lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Mix time, s");
    lcd.setCursor(1, 4);
    lcd.print("Press < > for correct");
    Serial.println("Mix period");
    delay(100); 

do
{
 irrecv.resume();
if(results.value == 16761405) {mix_time=+5;} // шаг - пять секунд
if(results.value == 16720605) {mix_time=-5;}

if(mix_time>240) {mix_time=240;} //зададим пределы параметра 
if(mix_time<15) {mix_time=15;}

lcd.setCursor(5, 2);
 lcd.print(mix_time);
 Serial.println("Mix time"+ String(mix_time,4));
 delay(200);
 if(results.value == 16736925) {count_IR++;}
 if(results.value == 16754775) {count_IR--;}  
} while (count_IR=4);     
      break;
     
      case 5:
      //Сохранение результатов в память

  lcd.clear();// очищаем экран 
    lcd.setCursor(1, 1);
    lcd.print("Save & Exit ");
    lcd.setCursor(1, 3);
    lcd.print("Press OK for save");
     lcd.setCursor(1, 3);
    lcd.print("For Exit press #");
    Serial.println("Save parameters?");
    delay(100); 

do
{
 irrecv.resume();
if(results.value == 16712445) { // нажата кнопка ОК пишем в память
  EEPROM.write(1,int(mix_period));// период перемешивания
  delay(50);
  EEPROM.write(2,int(mix_time)); // время перемешивания
  delay(50);
  EEPROM.write(3,int(parameters_show));// период показа данных на экран
 delay(50);
  EEPROM.write(8 , 90); // установим в десятой ячейке значение 90, чтобы можно
  delay(50);
  // было бы загрузить значения из памяти при послебующем включении контроллера 
   
   lcd.setCursor(1, 3);
    lcd.print("Save - ok!");
    delay(3000); 
    volume_save=false;
    count_IR=0; 
    break; ///????
 }    
// если нажата решетка отменям все и выходим
if(results.value == 16732845) { 
lcd.clear();// очищаем экран 
lcd.setCursor(4, 2);
    lcd.print("Not save in memory!");
    
    // устанавливаем заводские настройки параметров 
    mix_period = 90; // интервал между перемешиваниями, мин
    mix_time = 180; // время перемешивания в секундах 
    
    delay(2000);
    volume_save=false;
    count_IR=0; 
    break; ///????
}

if(results.value == 16728765) {count_IR++;}
if(results.value == 16754775) {count_IR--;}  

} while (count_IR=7);     
      
      break;     
  }

 } while(volume_save=true);
  
 irrecv.enableIRIn();
    delay(300); 
    irrecv.resume();// запросим значение кнопки    
} 
void loop(){

  if (irrecv.decode(&results)) 
Serial.println(results.value, DEC );
irrecv.resume();
 // если нажали * то переходим в меню настроек 
if(results.value == 16728765){ // 16736925
  lcd.clear();// очищаем экран 
  lcd.setCursor(1, 1);
lcd.print("Please, wait");
delay(100);
IR_setup(true);
  } 

 

TynuK
Offline
Зарегистрирован: 05.02.2017

И еще возможно такое что пока весь цикл программы не пройдет реакции на кнопку пульта не будет? Подумал так потому что кнопка 

на принудительное перемешивание работает ,но как раз таким образом нажал и держишь пока вся инфа на дисплее не прокрутится и

не начнется с начала. В даный момент все работает на UNO щас же хочу поставить туда  NANO.

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

а вы уверены, что функция IRREMOTE отдает вам коды в десятичном виде?
Отпечатайте в консоль

TynuK
Offline
Зарегистрирован: 05.02.2017

Я что то не понял, IRREMOTE что за функция? Вернее где она? 

if (irrecv.decode(&results)) {
    Serial.println(results.value, DEC);

вот в таком виде коды совпадают на пульте,а если я просто этот кусок вставляю в этот код то опять тишина в монитор порта ни чего не показывает кроме таймера

 

TynuK
Offline
Зарегистрирован: 05.02.2017

даже еслиб были коды другие то все равно же должен впорт выводить те что с пульта приходят,а их нет

 

TynuK
Offline
Зарегистрирован: 05.02.2017
 irrecv.resume();// запросим значение кнопки на пульте управления 
 if (irrecv.decode(&results)) {
    Serial.println(results.value,  DEC);
 
// если нажали * то переходим в меню настроек 
//if(results.value == 16736925) {
  lcd.clear();// очищаем экран 
  lcd.setCursor(1, 1);
lcd.print("Please, wait");
delay(1000);
IR_setup(true);
  }

 

TynuK
Offline
Зарегистрирован: 05.02.2017

вот так же должен в монитор порта выводить если с пульта хоть что то приходит, или я не прав и что то не так?

TynuK
Offline
Зарегистрирован: 05.02.2017

Если должен, значит проблема где то в этой части   irrecv.enableIRIn(); ??

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Проблема может быть в библиотеке IR, качайте свежую версию

TynuK
Offline
Зарегистрирован: 05.02.2017

в первую очередь с библиотек начал пробовать, все равно тоже самое, да ипримеры то все работают нормально