электроника для котла на твердом топливе Arduino
- Войдите на сайт для отправки комментариев
Чт, 19/01/2017 - 22:29
здорово народ! недавно мне пришла с китая вот такая железка.
летом я собрался варить котел длительного горения. и купил я ее специально что бы собрать на ней электронику для управления котлом, но до лета далеко поэтому решил заняться сейчас самой электроникой.
для сборки я решил использовать 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();// очищаем дисплей
}если кому не лень посмотрите таймер
вот так вот вроде все работает
#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
не критикую, если работает как вам нужно то и отлично.
только как по мне lcd дисплей всё таки информативнее, удобнее и привычнее
ТМ1638 имеет 8 кнопок 8 светодиодных индикаторов и 8 семисигментых индикаоров, я думаю что это самый удобный модуль для реализации таких проектов.
как по мне lcd дисплей всё таки ... привычнее
Это смотря у кого какие привычки :)
Все хорошо ! Только непонятно как точки отобразить ?
Наверно как-то так:
В TM1638.h ?
Вадимм, девайс у Вас физически есть? Или вопрос типа
потрындетьтеоретический?Если есть и Вам реально надо, дайте мне ссылку на библиотеку, которую Вы используете, и я попробую либо найти точку там, либо подсказать Вам как её найти "методом тыка" на живом устройстве.
В этом скетче как точка выводится на 6(5) месте ?
http://www.google.ru/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uac...
Искал в TM1638.cpp , не нашол или не там ищу !
Искал в TM1638.cpp , не нашол или не там ищу !
плохо искали, последняя функция в файле, параметр dot (может вы английского не знаете? :)
void TM1638::sendChar(byte pos, byte data, boolean dot) { sendData(pos << 1, data | (dot ? 0b10000000 : 0)); }