электроника для котла на твердом топливе Arduino

shapkin
Offline
Зарегистрирован: 17.10.2016

здорово народ! недавно мне пришла с китая  вот такая железка.

летом я собрался варить котел длительного горения. и купил я ее специально что бы собрать на ней электронику для управления котлом, но до лета далеко поэтому решил заняться сейчас самой электроникой.
 
для сборки я решил использовать Arduino UNO R3, термопару на max6675 два однолинейных реле и эту железку TM1638
в итоге после четырех вечеров непосильного труда получилось вот что 
1 кнопка розжиг загарается 7 светодиод на дисплее отображается РОЗ и температура котла
 2 кнопка нажимая на кнопку по очереди будут включатся 4 пунката натройки
      1 настройка рабочей температуры горит 3 светодиод на дисплее отображается ПР1 и настраеваемая рабочая температура
                 
   2 настройка времини продувки в секундах горит 4 светодиод на дисплее отображается ПР2 и настраевоемое значение
                 
 3 настройка перерыва продувки в минутах горит 5 светодиод на дисплее отображается ПР3 и настраевоемое значение
               
  4 настройка температуры отключения насоса если кончилось топливо горит 6 светодиод на дисплее отображается ПР4 и настраевоемое значение
 3-4 кнопки +,-
 если температура ниже температуры отключения насоса горит 1 светодиод  на дисплее отображается НЕР и температура котла
 если температура выше температуры отключения насоса горит 2 светодиод на дисплее отображается РАБ и температура котла
при включении вместо задержки такой запуск на 3 секунды
  сам код еще сырой, протестировал все кроме таймера на продувку котла, для этого нужно уйма времени. займусь этим завтра, если будут какие косяки допинаю и выкину ниже.
в коде коменты делал в каждой строчке потому что даже сам запутывался
вот сам код может кому пригодится. если в каментах есть ошибки, это нормально по клаве бамбил быстро на монитор не смотрел.
//* 1 кнопка розжиг загарается 7 светодиод на дисплее отображается РОЗ и температура котла
//* 2 кнопка нажимая на кнопку по очереди будут включатся 4 пунката натройки
                   //1 настройка рабочей температуры горит 3 светодиод на дисплее отображается ПР1 и настраеваемое значение
                   //2 настройка времини продувки в секундах горит 4 светодиод на дисплее отображается ПР2 и настраеваемое значение
                   //3 настройка перерыва продувки в минутах горит 5 светодиод на дисплее отображается ПР3 и настраеваемое значение
                   //4 настройка температуры отключения насоса если кончилось топливо горит 6 светодиод на дисплее отображается ПР4 и настраеваемое значение
//* 3-4 кнопки +,-
//* если температура ниже температуры отключения насоса горит 1 светодиод  на дисплее отображается НЕР и температура котла
//* если температура выше температуры отключения насоса горит 2 светодиод на дисплее отображается РАБ и температура котла 
//***************************************************************************************************************************                
#include <EEPROM.h>
#include <TM1638.h> //библиотека дисплея
#include "max6675.h"//библиотека дачика температуры
//**************8-DIO/9-CLK/10-STB подключам пины дисплей
TM1638 module(8, 9, 10);
//**************************подключаем дачик температуры
int thermoDO = 2;  // SO
 int thermoCS = 3;//CS
  int thermoCLK = 4;  // SCK
MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);//инициализируем наш датчик
//**************************подключаем реле
int rele1 = 7;// подключаем одноленейное реле1 насос
 int rele2 = 6;// подключаем одноленейное реле2 потдув
 //**************************обЪявляем пременные
 unsigned long vremy1; // переменая таймера
unsigned long vremy2; // переменая таймера
  int temper; // переменая для отображения дачика температуры
  int temperd;// переменая для отображения на дисплее програмируемой температуры
 int temper1; // переменая рабочая температура
 int tempernas; // переменая  температура отключения насоса
  int vremyprod; // переменая  время продувки
  int pererivprod; // переменая  перерыв продува
  int tempernas1; //  переменая для отображения на дисплее програмируемой температуры
   int start; // переменая для режимов старта
  int prog;// переменая для выбора програм номер програмы 
byte knopka;//Переменная для считывания значений кнопок
void setup()
{
  pinMode (rele1, OUTPUT); // ГОВОРИМ ПРОГРАММЕ ЧТО ПОРТ БУДЕТ РАБОТАТЬ КАК ВЫХОД
 pinMode (rele2, OUTPUT); // ГОВОРИМ ПРОГРАММЕ ЧТО ПОРТ БУДЕТ РАБОТАТЬ КАК ВЫХОД
digitalWrite (rele1, HIGH);
digitalWrite (rele2, HIGH);//выключаем оба реле.
  // ***************************запуск используется вмето задержки чтобы дачики начали работать стобильно
module.setDisplayToString("-", false,0);//тере "-"
module.setDisplayToString("-", false,1);//тере "-"
module.setDisplayToString("-", false,2);//тере "-"
module.setDisplayToString("-", false,4);//тере "-"
module.setDisplayToString("-", false,5);//тере "-"
module.setDisplayToString("-", false,6);//тере "-"
module.setDisplayToString("-", false,7);//тере "-"
module.setDisplayDigit(1,3, false);
delay(1000);
module.setDisplayDigit(2,3, false);
delay(1000);
module.setDisplayDigit(3,3, false);
delay(1000);

// ***************************запуск конец

// ***************************запись EEPROM *******************
// ВНИМАНИЕ ЭТУ СТРОКУ НУЖНО РАСКАМЕНТИРОВАТЬ ТОЛЬКО ПРИ ПЕРВОМ ЗАПУСКЕ ПРИ РАБОЧЕЙ ЗАГРУЗЕ СТРОКА ОНА ДОЛЖНА БЫТЬ ЗАКАМЕНТИРОВАНА
// EEPROM.write(1, 45); EEPROM.write(2, 15); EEPROM.write(3, 15); EEPROM.write(4, 26);
// ***************************EEPROM *******************
prog = 0;// программа вне програмирования
start = 0;// розжиг отключен
}
void loop()
{
 nastroika:// точка безусловного перехода начало цикла
   temper = thermocouple.readCelsius()*100 ;// смещаем делитель на 2 знека для правельного отображения на дисплее
    temperd = temper1*100 ;// смещаем делитель на 2 знека для правельного отображения на дисплее
   tempernas1 = tempernas*100 ;
 knopka=module.getButtons();//подключаем кнопки 1-1,2-2,3-4,4-8,5-16,6-32,7-64,8-128
 //****************ПРОГРАММИРОВАНИЕ*************************************************************
 
 if(knopka == 2){ //если нажата вторая кнопка то к переменой prog прибавляем 1 и делаем задержку в 1 с
   prog = prog+1;
   delay(1000);
   } 
   if ( prog > 4){ //ели prog перешла границу 4 то начинаем выполнять основную программу 
    prog = 0;
     }
     
  
//*********************************программирование  1 устанавливаем рабочию температуру 
  if ( prog == 1){
    module.setLED(TM1638_COLOR_RED, 2);//включаем светодиод символизирующий програмирование 3 светодиод
    module.setDisplayToDecNumber(temperd,4,false);//отображаем даные температуры на десплее
    module.setDisplayToString("NP1", false,0);//выводим на дисплей ПР1
//отключаем светоды символизирующие програмирование
   module.setLED(0, 3);
   module.setLED(0, 4); 
    module.setLED(0, 5);
    if(knopka == 4){ //если нажата третия кнопка то добовляем к показаниям 1
   temper1 = temper1+1;
     }
    if(knopka == 8){ //если нажата четвертая кнопка то отнимаем от показаний 1
   temper1 = temper1-1;
     }
     if(temper1 < 40 ){ //ставим ограничение низкой температуры
   temper1 = 40;
     }
     if(temper1 > 80 ){ //ставим ограничение высокой температуры
   temper1 = 80;
     }
    EEPROM.write(1, temper1); // ЗАПИСЫВАЕМ ДАНЫЕ В EEPROM 
 }
 //******************программирование 2 устанавливаем время продувки в секундах
   if ( prog == 2){
    module.setLED(TM1638_COLOR_RED, 3);//включаем светодиод символизирующий програмирование 3 светодиод 
         
     module.setDisplayToDecNumber(vremyprod,0,false);//отображаем даные температуры на десплее
     module.setDisplayToString("NP2", false,0);//выводим на дисплей ПР2 
     //отключаем светоды символизирующие програмирование
 
   module.setLED(0, 2);
   module.setLED(0, 4); 
    module.setLED(0, 5);
    if(knopka == 4){ //если нажата третия кнопка то добовляем к показаниям 1
   vremyprod = vremyprod+1;
     }
    if(knopka == 8){ //если нажата четвертая кнопка то отнимаем от показаний 1
   vremyprod = vremyprod-1;
     }
     if(vremyprod < 10 ){ //ставим ограничение короткого времени продува в секундах
   vremyprod = 10;
     }
     if(vremyprod > 60 ){ //ставим ограничение длительного времени продува в секундах
   vremyprod = 60;
     }
   EEPROM.write(2, vremyprod);  // ЗАПИСЫВАЕМ ДАНЫЕ В EEPROM 
 }
 //******************программирование 3 устанавливаем перерыв продувки в минутах
   if ( prog == 3){
    module.setLED(TM1638_COLOR_RED, 4);//включаем светодиод символизирующий програмирование 3 светодиод 
         
     module.setDisplayToDecNumber(pererivprod,0,false);//отображаем даные температуры на десплее
     module.setDisplayToString("NP3", false,0);//выводим на дисплей ПР3
     //отключаем светоды символизирующие програмирование
   module.setLED(0, 2);
   module.setLED(0, 3);
    module.setLED(0, 5);
    if(knopka == 4){ //если нажата третия кнопка то добовляем к показаниям 1
   pererivprod = pererivprod+1;
     }
    if(knopka == 8){ //если нажата четвертая кнопка то отнимаем от показаний 1
   pererivprod = pererivprod-1;
     }
     if(pererivprod < 5 ){ //ставим ограничение короткого времени перерыва продува в минутах
   pererivprod = 5;
     }
     if(pererivprod > 60 ){ //ставим ограничение длительного времени перерыва продува в минутах
   pererivprod = 60;
     }
      EEPROM.write(3, pererivprod); // ЗАПИСЫВАЕМ ДАНЫЕ В EEPROM 
 }
 //******************программирование 4 устанавливаем температуру отключения насоса если закончится топливо
   if ( prog == 4){
    module.setLED(TM1638_COLOR_RED, 5);//включаем светодиод символизирующий програмирование 3 светодиод 
         
     module.setDisplayToDecNumber(tempernas1,4,false);//отображаем даные температуры на десплее
     module.setDisplayToString("NP4", false,0);//выводим на дисплей ПР4
     //отключаем светоды символизирующие програмирование
     module.setLED(0, 2);
   module.setLED(0, 3);
   module.setLED(0, 4);
    if(knopka == 4){ //если нажата третия кнопка то добовляем к показаниям 1
   tempernas = tempernas+1;
     }
    if(knopka == 8){ //если нажата четвертая кнопка то отнимаем от показаний 1
   tempernas = tempernas-1;
     }
     if(tempernas < 20 ){ //ставим ограничение низкой температуры
   tempernas = 20;
     }
     if(tempernas > 50 ){ //ставим ограничение низкой температуры
   tempernas = 50;
     }  
    EEPROM.write(4, tempernas);// ЗАПИСЫВАЕМ ДАНЫЕ В EEPROM 
 }
  //******************программирование конец
if ( prog == 0){
    module.setLED(0, 5);//отключаем светоды символизирующие програмирование
  
    }
    // это условие проедназначено для того чтобы програмированию не мешала основная программа  
if ( prog > 0){
    goto nastroika;// отправляем програму выполнять цикл loop сначала.

    } 
    //**************** конец программирование
    
    //**************** ЧИТАЕМ ДАНЫЕ С EEPROM************************* 
    temper1 = EEPROM.read(1); 
     vremyprod = EEPROM.read(2);
       pererivprod = EEPROM.read(3);
           tempernas = EEPROM.read(4);
      //**************** СТАРТ*************************запускаем розжиг      
     if(knopka == 1){ //если нажата первая кнопка то запускаем режим старт
   start = start+1;
    delay(1000);
     }
      if ( start > 1){ //ели старт запущен то вторым нажатием отключаем его 
   start = 0;
   
     }
     if ( start == 1&& (thermocouple.readCelsius() < tempernas)){
  module.setLED(TM1638_COLOR_RED, 6);//  зажигаем 7 светодиод символизирующий розжиг
module.setDisplayToDecNumber(temper,4,false);//отображаем даные температуры на десплее
 module.setDisplayToString("P03", false,0);//отображаем на десплее РОЗ розжиг
digitalWrite (rele1, LOW);// насос включен
digitalWrite (rele2, LOW);//подув включен 
  }
    //****************конец СТАРТ*************************
//**********************ОСНОВНАЯ ПРОГРАММА******************************
//если температура меньше чем рабочая температура включаем потдув
if ( (thermocouple.readCelsius() <= temper1-2) && (thermocouple.readCelsius() > tempernas+1) ){
  module.setLED(0, 0);  // если температура больше чем темература установленая отключения насоса тушим 1 светодиод
  module.setLED(TM1638_COLOR_RED, 1);// если температура больше чем темература установленая отключения насоса зажигаем 2 светодиод
module.setDisplayToDecNumber(temper,4,false);//отображаем даные температуры на десплее
 module.setDisplayToString("PA6", false,0);//отображаем на десплее РАБ режим работы
  module.setLED(0, 6);// отключаем светодиод символизирующий розжиг
digitalWrite (rele1, LOW);// насос включен
digitalWrite (rele2, LOW);//потдув включен 
  }
  //*************ТАЙМЕР*******
   
if ( thermocouple.readCelsius() == temper1+2){
    vremy1 = millis();   
   }
    
  //*************в этом условии отображаются 4 градуса разницы рабочей температуры и выполняется продувка*******pererivprod
  if (  (thermocouple.readCelsius() <= temper1+2) && (thermocouple.readCelsius() >= temper1-2)){
       module.setDisplayToDecNumber(temper,4,false);//отображаем даные температуры на десплее
 module.setDisplayToString("PA6", false,0);//отображаем на десплее РАБ режим работы
 
    if ( ((vremy1*1000)*60)+pererivprod == millis() ){
      vremy2 = millis();
      digitalWrite (rele2, LOW);//потдув включен
     if ( (vremy2*1000)+vremyprod == millis() ){ 
      digitalWrite (rele2, HIGH);//потдув включен 
     }
    }
    vremy1 = millis();
  }
    //*********************************************************************************
    //если температура больше чем рабочая температура выключаем потдув
  if (  (thermocouple.readCelsius() >= temper1+2) && (thermocouple.readCelsius() > tempernas)){
   module.setLED(0, 0);  // если температура больше чем темература установленая отключения насоса тушим 1 светодиод
  module.setLED(TM1638_COLOR_RED, 1);// если температура больше чем темература установленая отключения насоса зажигаем 2 светодиод
module.setDisplayToDecNumber(temper,4,false);//отображаем даные температуры на десплее
 module.setDisplayToString("PA6", false,0);//отображаем на десплее РАБ режим работы
 start = 0;// если старт был запущен то отключаем его
 module.setLED(0, 6);// отключаем светодиод символизирующий розжиг
digitalWrite (rele1, LOW);// насос включен
digitalWrite (rele2, HIGH);//подув выключен HIGH
  }
  
  //*************в этом условии отображаются 2 градуса разницы отключения насоса и не каких действий не выполняется что бы реле не щелкало туда сюда*******
 if((thermocouple.readCelsius() >= tempernas-1) && (thermocouple.readCelsius() <= tempernas+1)){
   module.setDisplayToDecNumber(temper,4,false);//отображаем даные температуры на десплее
 module.setDisplayToString("PA6", false,0);//отображаем на десплее РАБ режим работы
 }
    
  
  if((thermocouple.readCelsius() <= tempernas-1) && (start == 0)){
  module.setLED(TM1638_COLOR_RED, 0);  // 1 цвет светодиода, 2 номер  светодиода от 0 до 7
 module.setLED(0, 1);//если температура меньше чем темература установленая отключения насоса тушим 2 светодиод
module.setDisplayToDecNumber(temper,4,false);//отображаем даные температуры на десплее
module.setDisplayToString("HEP", false,0);//отображаем на десплее НЕР неработает закончилось топливо
digitalWrite (rele1, HIGH);
digitalWrite (rele2, HIGH);//выключаем оба реле.
}

delay(1000);
 module.clearDisplay();// очищаем дисплей 
}

если кому не лень посмотрите таймер

 

 

shapkin
Offline
Зарегистрирован: 17.10.2016

вот так вот вроде все работает

#include <EEPROM.h>
#include <TM1638.h> //библиотека дисплея
#include "max6675.h"//библиотека дачика температуры
//**************8-DIO/9-CLK/10-STB подключам пины дисплей
TM1638 module(8, 9, 10);
//**************************подключаем дачик температуры
int thermoDO = 2;  // SO
 int thermoCS = 3;//CS
  int thermoCLK = 4;  // SCK
MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);//инициализируем наш датчик
//**************************подключаем реле
int rele1 = 7;// подключаем одноленейное реле1 насос
 int rele2 = 6;// подключаем одноленейное реле2 потдув
 //**************************обЪявляем пременные
 unsigned long vremy1; // переменая таймера
unsigned long vremy2; // переменая таймера
  int temper; // переменая для отображения дачика температуры
  int temperd;// переменая для отображения на дисплее програмируемой температуры
 int temper1; // переменая рабочая температура
 int tempernas; // переменая  температура отключения насоса
  int vremyprod; // переменая  время продувки
  int pererivprod; // переменая  перерыв продува
  int tempernas1; //  переменая для отображения на дисплее програмируемой температуры
   int start; // переменая для режимов старта
  int prog;// переменая для выбора програм номер програмы
   int taymer;// переменая для запуска таймера 
byte knopka;//Переменная для считывания значений кнопок
void setup()
{
  pinMode (rele1, OUTPUT); // ГОВОРИМ ПРОГРАММЕ ЧТО ПОРТ БУДЕТ РАБОТАТЬ КАК ВЫХОД
 pinMode (rele2, OUTPUT); // ГОВОРИМ ПРОГРАММЕ ЧТО ПОРТ БУДЕТ РАБОТАТЬ КАК ВЫХОД
digitalWrite (rele1, HIGH);
digitalWrite (rele2, HIGH);//выключаем оба реле.
  // ***************************запуск используется вмето задержки чтобы дачики начали работать стобильно
module.setDisplayToString("-", false,0);//тере "-"
module.setDisplayToString("-", false,1);//тере "-"
module.setDisplayToString("-", false,2);//тере "-"
module.setDisplayToString("-", false,4);//тере "-"
module.setDisplayToString("-", false,5);//тере "-"
module.setDisplayToString("-", false,6);//тере "-"
module.setDisplayToString("-", false,7);//тере "-"
module.setDisplayDigit(1,3, false);
delay(1000);
module.setDisplayDigit(2,3, false);
delay(1000);
module.setDisplayDigit(3,3, false);
delay(1000);

// ***************************запуск конец

// ***************************запись EEPROM *******************
// ВНИМАНИЕ ЭТУ СТРОКУ НУЖНО РАСКАМЕНТИРОВАТЬ ТОЛЬКО ПРИ ПЕРВОМ ЗАПУСКЕ ПРИ РАБОЧЕЙ ЗАГРУЗЕ СТРОКА ОНА ДОЛЖНА БЫТЬ ЗАКАМЕНТИРОВАНА
// EEPROM.write(1, 45); EEPROM.write(2, 15); EEPROM.write(3, 15); EEPROM.write(4, 26);
// ***************************EEPROM *******************
prog = 0;// программа вне програмирования
start = 0;// розжиг отключен
}
void loop()
{
 nastroika:// точка безусловного перехода начало цикла
   temper = thermocouple.readCelsius()*100 ;// смещаем делитель на 2 знека для правельного отображения на дисплее
    temperd = temper1*100 ;// смещаем делитель на 2 знека для правельного отображения на дисплее
   tempernas1 = tempernas*100 ;
 knopka=module.getButtons();//подключаем кнопки 1-1,2-2,3-4,4-8,5-16,6-32,7-64,8-128
 //****************ПРОГРАММИРОВАНИЕ*************************************************************
 
 if(knopka == 2){ //если нажата вторая кнопка то к переменой prog прибавляем 1 и делаем задержку в 1 с
   prog = prog+1;
   delay(1000);
   } 
   if ( prog > 4){ //ели prog перешла границу 4 то начинаем выполнять основную программу 
    prog = 0;
     }
     
  
//*********************************программирование  1  
  if ( prog == 1){
    module.setLED(TM1638_COLOR_RED, 2);//включаем светодиод символизирующий програмирование 3 светодиод
    module.setDisplayToDecNumber(temperd,4,false);//отображаем даные температуры на десплее
    module.setDisplayToString("NP1", false,0);//выводим на дисплей ПР1
//отключаем светоды символизирующие програмирование
   module.setLED(0, 3);
   module.setLED(0, 4); 
    module.setLED(0, 5);
    if(knopka == 4){ //если нажата третия кнопка то добовляем к показаниям 1
   temper1 = temper1+1;
     }
    if(knopka == 8){ //если нажата четвертая кнопка то отнимаем от показаний 1
   temper1 = temper1-1;
     }
     if(temper1 < 38 ){ //ставим ограничение низкой температуры
   temper1 = 38;
     }
     if(temper1 > 80 ){ //ставим ограничение высокой температуры
   temper1 = 80;
     }
    EEPROM.write(1, temper1); // ЗАПИСЫВАЕМ ДАНЫЕ В EEPROM 
 }
 //******************программирование 2
   if ( prog == 2){
    module.setLED(TM1638_COLOR_RED, 3);//включаем светодиод символизирующий програмирование 3 светодиод 
         
     module.setDisplayToDecNumber(vremyprod,0,false);//отображаем даные температуры на десплее
     module.setDisplayToString("NP2", false,0);//выводим на дисплей ПР2 
     //отключаем светоды символизирующие програмирование
 
   module.setLED(0, 2);
   module.setLED(0, 4); 
    module.setLED(0, 5);
    if(knopka == 4){ //если нажата третия кнопка то добовляем к показаниям 1
   vremyprod = vremyprod+1;
     }
    if(knopka == 8){ //если нажата четвертая кнопка то отнимаем от показаний 1
   vremyprod = vremyprod-1;
     }
     if(vremyprod < 10 ){ //ставим ограничение короткого времени продува в секундах
   vremyprod = 10;
     }
     if(vremyprod > 60 ){ //ставим ограничение длительного времени продува в секундах
   vremyprod = 60;
     }
   EEPROM.write(2, vremyprod);  // ЗАПИСЫВАЕМ ДАНЫЕ В EEPROM 
 }
 //******************программирование 3
   if ( prog == 3){
    module.setLED(TM1638_COLOR_RED, 4);//включаем светодиод символизирующий програмирование 3 светодиод 
         
     module.setDisplayToDecNumber(pererivprod,0,false);//отображаем даные температуры на десплее
     module.setDisplayToString("NP3", false,0);//выводим на дисплей ПР3
     //отключаем светоды символизирующие програмирование
   module.setLED(0, 2);
   module.setLED(0, 3);
    module.setLED(0, 5);
    if(knopka == 4){ //если нажата третия кнопка то добовляем к показаниям 1
   pererivprod = pererivprod+1;
     }
    if(knopka == 8){ //если нажата четвертая кнопка то отнимаем от показаний 1
   pererivprod = pererivprod-1;
     }
     if(pererivprod < 10 ){ //ставим ограничение короткого времени перерыва продува в минутах
   pererivprod = 10;
     }
     if(pererivprod > 60 ){ //ставим ограничение длительного времени перерыва продува в минутах
   pererivprod = 60;
     }
      EEPROM.write(3, pererivprod); // ЗАПИСЫВАЕМ ДАНЫЕ В EEPROM 
 }
 //******************программирование 4
   if ( prog == 4){
    module.setLED(TM1638_COLOR_RED, 5);//включаем светодиод символизирующий програмирование 3 светодиод 
         
     module.setDisplayToDecNumber(tempernas1,4,false);//отображаем даные температуры на десплее
     module.setDisplayToString("NP4", false,0);//выводим на дисплей ПР4
     //отключаем светоды символизирующие програмирование
     module.setLED(0, 2);
   module.setLED(0, 3);
   module.setLED(0, 4);
    if(knopka == 4){ //если нажата третия кнопка то добовляем к показаниям 1
   tempernas = tempernas+1;
     }
    if(knopka == 8){ //если нажата четвертая кнопка то отнимаем от показаний 1
   tempernas = tempernas-1;
     }
     if(tempernas < 20 ){ //ставим ограничение низкой температуры
   tempernas = 20;
     }
     if(tempernas > 50 ){ //ставим ограничение низкой температуры
   tempernas = 50;
     }  
    EEPROM.write(4, tempernas);// ЗАПИСЫВАЕМ ДАНЫЕ В EEPROM 
 }
  //******************программирование конец
if ( prog == 0){
    module.setLED(0, 5);//отключаем светоды символизирующие програмирование
  
    }
    // это условие проедназначено для того чтобы програмированию не мешала основная программа  
if ( prog > 0){
    goto nastroika;// отправляем програму выполнять цикл loop сначала.

    } 
    //**************** конец программирование
  
    //**************** ЧИТАЕМ ДАНЫЕ С EEPROM************************* 
    temper1 = EEPROM.read(1); 
     vremyprod = EEPROM.read(2);
       pererivprod = EEPROM.read(3);
           tempernas = EEPROM.read(4);
           vremy1 = 60000*pererivprod;//первращаем перерыв продувки в милисикунды 
     if(knopka == 1){ //если нажата первая кнопка то запускаем режим старт
   start = start+1;
    delay(1000);
     }
      if ( start > 1){ //ели старт запущен то вторым нажатием отключаем его 
   start = 0;
    module.setLED(0, 6);// отключаем светодиод символизирующий розжиг
     }
     if ( start == 1){
  module.setLED(TM1638_COLOR_RED, 6);//  зажигаем 7 светодиод символизирующий розжиг
module.setDisplayToDecNumber(temper,4,false);//отображаем даные температуры на десплее
 module.setDisplayToString("P03", false,0);//отображаем на десплее РОЗ розжиг
 taymer=0;// выключаем таймер
digitalWrite (rele1, LOW);// насос включен
digitalWrite (rele2, LOW);//подув включен 
  }
    //****************конец СТАРТ*************************
//**********************ОСНОВНАЯ ПРОГРАММА******************************
//если температура меньше чем рабочай температура включаем потдув
if ( (thermocouple.readCelsius() <= temper1-2) && (thermocouple.readCelsius() >= tempernas+1) && (start == 0) ){
  module.setLED(0, 0);  // если температура больше чем темература установленая отключения насоса тушим 1 светодиод
  module.setLED(TM1638_COLOR_RED, 1);// если температура больше чем темература установленая отключения насоса зажигаем 2 светодиод
module.setDisplayToDecNumber(temper,4,false);//отображаем даные температуры на десплее
 module.setDisplayToString("PA6", false,0);//отображаем на десплее РАБ режим работы
 taymer=0;// выключаем таймер
digitalWrite (rele1, LOW);// насос включен
digitalWrite (rele2, LOW);//потдув включен 
  }
  //*************ТАЙМЕР*******
   if (thermocouple.readCelsius() == temper1+2){
      vremy2 = millis(); 
   }

    
  //*************в этом условии отображаются 4 градуса разницы рабочей температуры и выполняется продувка*******pererivprod
  if (  (thermocouple.readCelsius() <= temper1+2) && (thermocouple.readCelsius() >= temper1-2)&& (start == 0)){
     module.setDisplayToDecNumber(temper,4,false);//отображаем даные температуры на десплее
 module.setDisplayToString("PA6", false,0);//отображаем на десплее РАБ режим работы
 taymer=1;
    }
    if((millis() - vremy2 > vremy1) && (taymer == 1)){
    digitalWrite (rele2, LOW);//потдув включен
    delay(1000*vremyprod);
    digitalWrite (rele2, HIGH);
   vremy2 = millis();
     }
     
    
 
    //*********************************************************************************
    //если температура больше чем рабочая температура выключаем потдув
  if (  (thermocouple.readCelsius() >= temper1+2) && (thermocouple.readCelsius() >= tempernas)){
   module.setLED(0, 0);  // если температура больше чем темература установленая отключения насоса тушим 1 светодиод
  module.setLED(TM1638_COLOR_RED, 1);// если температура больше чем темература установленая отключения насоса зажигаем 2 светодиод
module.setDisplayToDecNumber(temper,4,false);//отображаем даные температуры на десплее
 module.setDisplayToString("PA6", false,0);//отображаем на десплее РАБ режим работы
 start = 0;// если старт был запущен то отключаем его
 taymer=0;// выключаем таймер
 module.setLED(0, 6);// отключаем светодиод символизирующий розжиг
digitalWrite (rele1, LOW);// насос включен
digitalWrite (rele2, HIGH);//подув выключен HIGH
  }
  
  //*************в этом условии отображаются 2 градуса разницы отключения насоса и не каких действий не выполняется что бы реле не щелкало туда сюда*******
 if((thermocouple.readCelsius() >= tempernas-1) && (thermocouple.readCelsius() <= tempernas+1)&& (start == 0)){
   module.setDisplayToDecNumber(temper,4,false);//отображаем даные температуры на десплее
 module.setDisplayToString("PA6", false,0);//отображаем на десплее РАБ режим работы
 taymer=0;// выключаем таймер
 }
    
  
  if((thermocouple.readCelsius() <= tempernas-1) && (start == 0)){
  module.setLED(TM1638_COLOR_RED, 0);  // 1 цвет светодиода, 2 номер  светодиода от 0 до 7
 module.setLED(0, 1);//если температура меньше чем темература установленая отключения насоса тушим 2 светодиод
module.setDisplayToDecNumber(temper,4,false);//отображаем даные температуры на десплее
module.setDisplayToString("HEP", false,0);//отображаем на десплее НЕР неработает закончилось топливо
digitalWrite (rele1, HIGH);
digitalWrite (rele2, HIGH);//выключаем оба реле.
taymer=0;// выключаем таймер
}


 
   
 delay(1000);
 module.clearDisplay();// очищаем дисплей  
  } 

вот видео https://www.youtube.com/watch?v=jqTuK1zF_8s

vvadim
Offline
Зарегистрирован: 23.05.2012

не критикую, если работает как вам нужно то и отлично.

только как по мне lcd дисплей всё таки информативнее, удобнее и привычнее

shapkin
Offline
Зарегистрирован: 17.10.2016

ТМ1638 имеет 8 кнопок 8 светодиодных индикаторов и 8 семисигментых индикаоров, я думаю что это самый удобный модуль для реализации таких проектов.

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

vvadim пишет:

как по мне lcd дисплей всё таки ... привычнее

Это смотря у кого какие привычки :)

Вадимм
Offline
Зарегистрирован: 04.06.2020

Все хорошо ! Только непонятно как точки отобразить ?

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Наверно как-то так: 

lcd.print(“.”);

 

Вадимм
Offline
Зарегистрирован: 04.06.2020

 В TM1638.h ?

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

Вадимм, девайс у Вас физически есть? Или вопрос типа потрындеть теоретический?

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

Вадимм
Offline
Зарегистрирован: 04.06.2020

В этом скетче как точка выводится на 6(5) месте ?

http://www.google.ru/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uac...

Искал в TM1638.cpp , не нашол или не там ищу !

b707
Offline
Зарегистрирован: 26.05.2017

Вадимм пишет:

Искал в TM1638.cpp , не нашол или не там ищу !

плохо искали, последняя функция в файле, параметр dot (может вы английского не знаете? :)

void TM1638::sendChar(byte pos, byte data, boolean dot)
{
	sendData(pos << 1, data | (dot ? 0b10000000 : 0));
}