/**************************************************************************
This is a library for several Adafruit displays based on ST77* drivers.
Works with the Adafruit 1.8" TFT Breakout w/SD card
----> http://www.adafruit.com/products/358
The 1.8" TFT shield
----> https://www.adafruit.com/product/802
The 1.44" TFT breakout
----> https://www.adafruit.com/product/2088
The 1.14" TFT breakout
----> https://www.adafruit.com/product/4383
The 1.3" TFT breakout
----> https://www.adafruit.com/product/4313
The 1.54" TFT breakout
----> https://www.adafruit.com/product/3787
The 1.69" TFT breakout
----> https://www.adafruit.com/product/5206
The 2.0" TFT breakout
----> https://www.adafruit.com/product/4311
as well as Adafruit raw 1.8" TFT display
----> http://www.adafruit.com/products/618
Check out the links above for our tutorials and wiring diagrams.
These displays use SPI to communicate, 4 or 5 pins are required to
interface (RST is optional).
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
MIT license, all text above must be included in any redistribution
**************************************************************************/
#include <Arduino.h>
#include <SPI.h>
//#include "Arduino_DebugUtils.h"
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
//#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
//#include <SPI.h>
#include "encMinim.h"
//#include "img.h"
#include "microDS18B20.h"
#include "driver.h"
// For the breakout board, you can use any 2 or 3 pins.
// These pins will also work for the 1.8" TFT shield.
#define TFT_CS 10
#define TFT_RST 9
#define TFT_DC 8
#define TFT_MOSI 11
#define TFT_SCLK 13
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC,TFT_MOSI,TFT_SCLK,TFT_RST);
// color definitions
const uint16_t Display_Color_Black = 0x0000;
const uint16_t Display_Color_Blue = 0x001F;
const uint16_t Display_Color_Red = 0xF800;
const uint16_t Display_Color_Green = 0x07E0;
const uint16_t Display_Color_Cyan = 0x07FF;
const uint16_t Display_Color_Magenta = 0xF81F;
const uint16_t Display_Color_Yellow = 0xFFE0;
const uint16_t Display_Color_White = 0xFFFF;
// The colors we actually want to use
uint16_t Display_Text_Color = Display_Color_Red ;
uint16_t Display_Backround_Color = Display_Color_Black;
// датчик температуры
//#define pin_18b20 14
//MicroDS18B20 sensor1(pin_18b20); // датчик на пине А0
//DallasTemperature sensor1(&onewire);
#define delay_18b20 500 // время опроса датчика
#define N_mass 6// количество элементов массива
float mass[N_mass] = {0, 0,0, 0, 0, 0};// массив для усреднения значений с таймера
int8_t i=0; //указатель массива
float Temperature=0;
float usr (float *p,int a)//функция подсчета среднего значения
{ float srednee, summa=0;
for (int i = 0; i < a; i = i + 1) {
summa=summa+*(p+i);//считаем сумму
}
srednee=summa/a;//находим среднее
return(srednee);
}
// переменные для дисплея
volatile uint8_t index_menu=0; // выбор пункта редактирумого параметра
//Температура в салоне
//float T_salon_prev;//измеренное в прошлый раз
//float T_salon_nov;//измеренное сейчас
//общее для задвижек
#define k_mashtab_ap 7
#define k_mashtab_hot 7
//кран теплоносителя
//uint8_t kran_hot=0;// текущее положение
//uint8_t new_kran_hot;// новое положение
//uint8_t const st_kran_hot=46;// диапазон 0-79 начальное положение
//задвижка воздух вверх\вниз
bool status_ap=false; //статус не обнулен
uint8_t zadv_ap=75;// текущее положение
uint8_t new_zadv_ap=75;// новое положение
//uint8_t const st_zadv_ap=10;// положение после обну
//задвижка воздух холодный\горячий
bool status_hot=false; //положение двигателя при обнулении 0-7 или 255 если обнуления не произошло
uint8_t zadv_hot=90;// текущее положение
uint8_t new_zadv_hot=90; // новое положение
//uint8_t const st_zadv_hot=20;// диапазон 0-79 начальное положение
// счетчик временных задержек
uint16_t currentTime;
uint16_t loopTime;
//коды ошибок
//uint8_t kod_arr=0;// код ошибки 0-нет ошибок
// 4-неисправность
// 5-неисправность
// 6-неисправность
// 1-неисправность драйвера ap привод не обнулился
// 2-неисправность обоих драйверов ap,hot привод не обнулился
// 3-неисправность драйвера hot привод не обнулился
//энкодер
#define SW 4
#define DT 6
#define CLK 5
// пин clk, пин dt, пин sw, направление (0/1)
encMinim enc(CLK, DT, SW, 1);
// вентилятор
#define pin_fan 3 // pin вентилятора
int8_t fan= 50; // мощность вентилятора, начинаем с половины
uint8_t fadeAmount = 1; // шаг изменения параметра
uint8_t hfadeAmount = 10; // быстрый шаг изменения параметра
//задвижки и концевики
//концевик для обнуления
#define KONZ_ap 4
#define KONZ_hot 4
//#define KONZ_kran A4 //А4
// Определение пинов для управления двигателем задвижки вверх вниз
#define IN1_ap 16
#define IN2_ap 17
#define IN3_ap 18
#define IN4_ap 19
// Определение пинов для управления двигателем задвижки горячий холодный
#define IN1_hot 12
#define IN2_hot 7
#define IN3_hot 2
#define IN4_hot 15
// Определение пинов для управления двигателем задвижки кран теплоносителя
//#define STEP_kran 6
//#define DIR_kran 7
Driver zaslonka_ap(IN1_ap,IN2_ap,IN3_ap,IN4_ap,KONZ_ap); // создаём ОБЪЕКТ zaslonka_ap КЛАССА Driver
Driver zaslonka_hot(IN1_hot,IN2_hot,IN3_hot,IN4_hot,KONZ_hot); // создаём ОБЪЕКТ zaslonka_hot КЛАССА Driver
//Driver zaslonka_kran(DIR_kran,STEP_kran,KONZ_kran); // создаём ОБЪЕКТ zaslonka_kran КЛАССА Driver
// функции
// static void dummy_process(){
// static const char PROGRESS[] PROGMEM = {'|','/','-','\\'};
//uint8_t progress=0;
//for (uint32_t i=0;i<1000000U; ++i){
// if ((i&1023)==0) {
// DEBUG_INFO("index= %d",index_menu);
// DEBUG_INFO("FAN= %d", fan);
// Serial.write('\n');
// Serial.write(pgm_read_byte(&PROGRESS[progress]));
// if (++progress>=sizeof(PROGRESS)/sizeof(PROGRESS[0])) progress=0;
// }
// }
// }
void init_tft (){ // инициализация дисплея и нижняя картинка
tft.initR(INITR_BLACKTAB); //инициализация
// tft.fillScreen(COL_GRAY);//заливка цветом весь дисплей
// tft.setRotation(3);//поворот экрана от 0 до 3
//tft.drawRGBBitmap(0, 96, console,160, 128);
// tft.initR(INITR_MINI160x80); // Init ST7735S chip, black tab
tft.setTextWrap(true);// перенос текста на новую строку если длинная
tft.setRotation(3);
}
void erase_rect(uint8_t index) {//стираем старое окно
switch (index) {
case 0: tft.drawFastHLine(0, 89, 32, Display_Backround_Color);
tft.drawFastVLine(0, 89, 5, Display_Backround_Color);
tft.drawFastHLine(0, 95, 32, Display_Backround_Color);
tft.drawFastVLine(32, 89, 5, Display_Backround_Color);
break;
case 1: tft.drawFastHLine(32, 89, 32, Display_Backround_Color);
tft.drawFastVLine(32, 89, 5, Display_Backround_Color);
tft.drawFastHLine(32, 95,32, Display_Backround_Color);
tft.drawFastVLine(64, 89, 5, Display_Backround_Color);
break;
case 2: tft.drawFastHLine(64, 89, 32, Display_Backround_Color);
tft.drawFastVLine(64, 89, 5, Display_Backround_Color);
tft.drawFastHLine(64, 95,32, Display_Backround_Color);
tft.drawFastVLine(96, 89, 5, Display_Backround_Color);
break;
case 3: tft.drawFastHLine(96, 89, 32, Display_Backround_Color);
tft.drawFastVLine(96, 89, 5, Display_Backround_Color);
tft.drawFastHLine(96, 95,32, Display_Backround_Color);
tft.drawFastVLine(128, 89, 5, Display_Backround_Color);
break;
case 4: tft.drawFastHLine(128, 89, 32, Display_Backround_Color);
tft.drawFastVLine(128, 89, 5, Display_Backround_Color);
tft.drawFastHLine(128, 95,32, Display_Backround_Color);
tft.drawFastVLine(160, 89, 5, Display_Backround_Color);
break;
}
}
void print_rect(uint8_t index) {//рисуем новое окно
switch (index) {
case 0: tft.drawFastHLine(0,89, 32, Display_Text_Color );
tft.drawFastVLine(0,89, 5, Display_Text_Color );
tft.drawFastHLine(0, 95, 32, Display_Text_Color );
tft.drawFastVLine(32, 89, 5, Display_Text_Color );
break;
case 1: tft.drawFastHLine(32, 89, 32, Display_Text_Color );
tft.drawFastVLine(32, 89, 5, Display_Text_Color );
tft.drawFastHLine(32, 95, 32, Display_Text_Color );
tft.drawFastVLine(64, 89, 5, Display_Text_Color) ;
break;
case 2: tft.drawFastHLine(64, 89, 32, Display_Text_Color );
tft.drawFastVLine(64, 89, 5, Display_Text_Color );
tft.drawFastHLine(64, 95, 32, Display_Text_Color );
tft.drawFastVLine(96, 89, 5, Display_Text_Color );
break;
case 3: tft.drawFastHLine(96, 89, 32, Display_Text_Color );
tft.drawFastVLine(96, 89, 5, Display_Text_Color );
tft.drawFastHLine(96, 95, 32, Display_Text_Color );
tft.drawFastVLine(128, 89, 5, Display_Text_Color );
break;
case 4: tft.drawFastHLine(128, 89, 32, Display_Text_Color );
tft.drawFastVLine(128, 89, 5, Display_Text_Color );
tft.drawFastHLine(128, 95, 32, Display_Text_Color );
tft.drawFastVLine(160, 89, 5, Display_Text_Color );
break;
}
}
void volume_release ( uint8_t a) {
tft.setTextColor(Display_Text_Color);
tft.setCursor(80,10);
tft.setTextSize(2);
tft.fillRect(110,10,132,16, Display_Backround_Color );//очистка области для вывода значения
tft.setCursor(110,10);
tft.print(a);
}
void volume_rect ( volatile uint8_t a) { uint8_t b;
b=(a*8)/5;
tft.fillRect(0,70,b, 12,Display_Text_Color);
tft.fillRect(b,70, (160-b), 12,Display_Backround_Color);
}
void setup() { //SP=RAMEND;
// pinMode(4, INPUT_PULLUP);
// pinMode(5, INPUT_PULLUP);
// pinMode(6, INPUT_PULLUP);
Serial.begin(115200);
//Debug.timestampOn();
init_tft ();
tft.fillRect(0,0, 160, 128,Display_Backround_Color);// очистка экрана
// DEBUG_INFO("SP = %d", (SPL+(SPH<<8)));
index_menu=0;// указатель меню на 0 рисуем рамку
//print_rect(index_menu);
// заслонка потока воздуха вверх вниз
zaslonka_ap.setSpeed(2);
status_ap=zaslonka_ap.set_zero(); // ищем нулевую позицию фунция возвращает положение двигателя при котором
if (status_ap==false) {
tft.setCursor(37,99); //выбор положения курсора для ввода текста
tft.setTextSize(1);//выбор размера шрифта
tft.setTextColor(Display_Text_Color);//выбор цвета текста
tft.print(F("ERROR ZERRO DRIVE1 "));//вводим сам текст
tft.setTextSize(2);
}
if (status_ap==true) { tft.setCursor(37,99); //выбор положения курсора для ввода текста
tft.setTextSize(1);//выбор размера шрифта
tft.setTextColor(Display_Text_Color);//выбор цвета текста
tft.print(F("DRIVE1 position:"));
zaslonka_ap.stepper(((0-zadv_ap)<<k_mashtab_ap)); //установка позиции по умолчанию
// zaslonka_ap.stepper(0-zadv_ap);
new_zadv_ap=zadv_ap;
tft.print(zaslonka_ap._steps);
tft.setTextSize(2);
}
// заслонка горячий холодный
zaslonka_hot.setSpeed(2);
status_hot=zaslonka_hot.set_zero(); // ищем нулевую позицию фунция возвращает положение двигателя при котором
//произошло обнуление или ошибку=255
if (status_hot==false) {
tft.setCursor(37,110); //выбор положения курсора для ввода текста
tft.setTextSize(1);//выбор размера шрифта
tft.setTextColor(Display_Text_Color);//выбор цвета текста
tft.print(F("ERROR ZERRO DRIVE2 "));//вводим сам текст
tft.setTextSize(2);
}
if (status_hot==true) { tft.setCursor(37,110); //выбор положения курсора для ввода текста
tft.setTextSize(1);//выбор размера шрифта
tft.setTextColor(Display_Text_Color);//выбор цвета текста
tft.print(F("DRIVE2 position:"));
// zaslonka_ap.set_direct(false);
zaslonka_hot.stepper(((0-zadv_hot)<<k_mashtab_hot)); //установка позиции по умолчанию
// zaslonka_hot.stepper(0-zadv_hot);
new_zadv_hot=zadv_hot;
tft.print(zaslonka_hot._steps);
tft.setTextSize(2);
}
//вентилятор
// pinMode(pin_fan, OUTPUT); // устанавливаем pin fan как выход для вентилятора
tft.setTextSize(2);//выбор размера шрифта
tft.setCursor(15,10);
tft.setTextColor(Display_Text_Color);
tft.print(index_menu);
tft.print(" FAN");
tft.setTextSize(2);//выбор размера шрифт
tft.setCursor(0,50);
tft.print("<<-");
tft.setCursor(120,50);
tft.print("+>>");
volume_release(fan);
volume_rect (fan);
//задвижки
// tft.fillRect(81,110, kran_hot, 12,ST7735_MAGENTA);
// tft.fillRect(81+kran_hot,110, 80-kran_hot, 12,COL_RECT);// рисуем положение крана подачи горячего теплоносителя
//loopTime =millis();// перед входом в основной цикл запоминаем текущее значение таймера Т0
// для отсчета времени до конца преобразования
//sensor1.setResolution(9); // разрешение термометра
}
void loop() {
// put your main code here, to run repeatedly:
//sensor1.requestTemperatures();
//sensor1.requestTemp();
//Serial.println(info registers);
//DEBUG_INFO("mass[0]= %d", fan);
// DEBUG_INFO("mass[1]= %d",volume);
// DEBUG_INFO("mass[2]= %d", mass[2]);
// DEBUG_INFO("mass[3]= %d", mass[3]);
// DEBUG_INFO("mass[4]= %d", mass[4]);
// DEBUG_INFO("mass[5]= %d", mass[5]);
// DEBUG_INFO("FAN= %d", fan);
//энкодер и вентилятор
enc.tick();//опрос энкодера
// Serial.println(index_menu);
// Serial.println(fan);
//if (enc.isTurn()) Serial.println("turn");
if (enc.isLeft()) { //Serial.print("left");
switch (index_menu) {
case 0:{ if (fan<99) { ++fan;
volume_release(fan);
volume_rect(fan);
// Serial.print(" fan=");
// Serial.println(fan);
}
break;
}
// case 1: if ((zadv_ap<99)&&(zero_step_ap!=255)) {
case 1:{if (zadv_ap<99) {
++new_zadv_ap;
zaslonka_ap.stepper((new_zadv_ap-zadv_ap)<<k_mashtab_ap);//масштабируем в разы
// zaslonka_ap.stepper(new_zadv_ap-zadv_ap);
zadv_ap=new_zadv_ap;
volume_release(new_zadv_ap);
volume_rect(new_zadv_ap);
if (status_ap==false) {//kod_arr=1;
tft.setCursor(37,99); //выбор положения курсора для ввода текста
tft.setTextSize(1);//выбор размера шрифта
tft.setTextColor(Display_Text_Color);//выбор цвета текста
tft.print(F("ERROR ZERRO DRIVE1 "));//вводим сам текст
tft.setTextSize(2);
}
if (status_ap==true) {
tft.setCursor(37,99); //выбор положения курсора для ввода текста
tft.setTextSize(1);//выбор размера шрифта
tft.fillRect(131,99, 141, 110,Display_Backround_Color);
tft.setCursor(132,99);
tft.print(zaslonka_ap._steps);
tft.setTextSize(2);
// zaslonka_ap.stepper((zadv_ap<<k_mashtab_ap)); //установка позиции по умолчанию
}
}
break;
}
// case 2: if (zadv_hot>0&&(zero_step_hot!=255)) {new_zadv_hot=zadv_hot+1;
case 2: { if(zadv_hot<99) { ++new_zadv_hot;
zaslonka_hot.stepper((new_zadv_hot-zadv_hot)<<k_mashtab_hot);//масштабируем в разы
// zaslonka_hot.stepper(new_zadv_hot-zadv_hot);
zadv_hot=new_zadv_hot;
volume_release(new_zadv_hot);
volume_rect(new_zadv_hot);
if (status_hot==false) {//kod_arr=1;
tft.setCursor(37,99); //выбор положения курсора для ввода текста
tft.setTextSize(1);//выбор размера шрифта
tft.setTextColor(Display_Text_Color);//выбор цвета текста
tft.print(F("ERROR ZERRO DRIVE2 "));//вводим сам текст
tft.setTextSize(2);
}
if (status_hot==true) {
tft.setCursor(37,99); //выбор положения курсора для ввода текста
tft.setTextSize(1);//выбор размера шрифта
tft.fillRect(131,99, 141, 110,Display_Backround_Color);
tft.setCursor(132,99);
tft.print(zaslonka_hot._steps);
tft.setTextSize(2);
// zaslonka_ap.stepper((zadv_ap<<k_mashtab_ap)); //установка позиции по умолчанию
} // Serial.println(new_zadv_hot);
}
break;
}
// case 3: if (kran_hot>0) {new_kran_hot=kran_hot-fadeAmount;
// // zaslonka_kran.Set_pozition(kran_hot,new_kran_hot);
// kran_hot=new_kran_hot;
// tft.fillRect(81,110, kran_hot, 12,ST7735_MAGENTA);
// tft.fillRect(81+kran_hot,110, 80-kran_hot, 12,COL_RECT);// рисуем положение крана подачи горячего теплоносителя
// break;
// }
default:break;
}
}
if (enc.isRight()) {
// Serial.print("right");
switch (index_menu) {
case 0: {if (fan>0) { --fan;
volume_release(fan);
volume_rect(fan);
}
break;
}
// case 1: if (zadv_ap>0&&(zero_step_ap!=255))
case 1: {if (zadv_ap>0) {--new_zadv_ap;
//zaslonka_ap.stepper(new_zadv_ap-zadv_ap);
zaslonka_ap.stepper((new_zadv_ap-zadv_ap)<<k_mashtab_ap);
zadv_ap=new_zadv_ap;
volume_release(new_zadv_ap);
volume_rect(new_zadv_ap);
if (status_ap==false) {//kod_arr=1;
tft.setCursor(37,99); //выбор положения курсора для ввода текста
tft.setTextSize(1);//выбор размера шрифта
tft.setTextColor(Display_Text_Color);//выбор цвета текста
tft.print(F("ERROR ZERRO DRIVE1 "));//вводим сам текст
tft.setTextSize(2);
}
if (status_ap==true) {
tft.setCursor(37,99); //выбор положения курсора для ввода текста
tft.setTextSize(1);//выбор размера шрифта
tft.fillRect(131,99, 141, 110,Display_Backround_Color);
tft.setCursor(132,99);
tft.print(zaslonka_ap._steps);
tft.setTextSize(2);
// zaslonka_ap.stepper((zadv_ap<<k_mashtab_ap)); //установка позиции по умолчанию
}
}
break;
}
// case 2: if (zadv_hot>0&&(zero_step_hot!=255)) {new_zadv_hot=zadv_hot-fadeAmount;
case 2: {if (zadv_hot>0) {--new_zadv_hot;
// zaslonka_hot.stepper(new_zadv_hot-zadv_hot);
zaslonka_hot.stepper((new_zadv_hot-zadv_hot)<<k_mashtab_hot);
zadv_hot=new_zadv_hot;
// DEBUG_INFO("zadv_ap= %d",w);
volume_release(new_zadv_hot);
volume_rect(new_zadv_hot);
if (status_hot==false) {//kod_arr=1;
tft.setCursor(37,99); //выбор положения курсора для ввода текста
tft.setTextSize(1);//выбор размера шрифта
tft.setTextColor(Display_Text_Color);//выбор цвета текста
tft.print(F("ERROR ZERRO DRIVE2 "));//вводим сам текст
tft.setTextSize(2);
}
if (status_hot==true) {
tft.setCursor(37,99); //выбор положения курсора для ввода текста
tft.setTextSize(1);//выбор размера шрифта
tft.fillRect(131,99, 141, 110,Display_Backround_Color);
tft.setCursor(132,99);
tft.print(zaslonka_hot._steps);
tft.setTextSize(2);
// zaslonka_ap.stepper((zadv_ap<<k_mashtab_ap)); //установка позиции по умолчанию
}
}
break;
}
// case 3: if (kran_hot<79) {new_kran_hot=kran_hot+fadeAmount;
// zaslonka_kran.Set_pozition(kran_hot,new_kran_hot);
// kran_hot=new_kran_hot;
// tft.fillRect(81,110, kran_hot, 12,ST7735_MAGENTA);
// tft.fillRect(81+kran_hot,110, 80-kran_hot, 12,COL_RECT);// рисуем положение крана подачи горячего теплоносителя
// break;
// }
default:break;
}
}
if (enc.isLeftH()) { switch (index_menu) {
case 0: {if (fan<90) {
fan=fan+hfadeAmount;
volume_release(fan);
volume_rect(fan);
}
break;
}
case 1: {if (zadv_ap<90) {new_zadv_ap=zadv_ap+hfadeAmount;
// zaslonka_ap.stepper(new_zadv_ap-zadv_ap);
zaslonka_ap.stepper((new_zadv_ap-zadv_ap)<<k_mashtab_ap);
zadv_ap=new_zadv_ap;
volume_release(new_zadv_ap);
volume_rect(new_zadv_ap);
if (status_ap==false) {//kod_arr=1;
tft.setCursor(37,99); //выбор положения курсора для ввода текста
tft.setTextSize(1);//выбор размера шрифта
tft.setTextColor(Display_Text_Color);//выбор цвета текста
tft.print(F("ERROR ZERRO DRIVE1 "));//вводим сам текст
tft.setTextSize(2);
}
if (status_ap==true) {
tft.setCursor(37,99); //выбор положения курсора для ввода текста
tft.setTextSize(1);//выбор размера шрифта
tft.fillRect(131,99, 141, 110,Display_Backround_Color);
tft.setCursor(132,99);
tft.print(zaslonka_ap._steps);
tft.setTextSize(2);
// zaslonka_ap.stepper((zadv_ap<<k_mashtab_ap)); //установка позиции по умолчанию
}
}
break;
}
case 2: {if (zadv_hot<90) {new_zadv_hot=zadv_hot+hfadeAmount;
// zaslonka_hot.stepper(new_zadv_hot+zadv_hot);
zaslonka_hot.stepper((new_zadv_hot-zadv_hot)<<k_mashtab_hot);
zadv_hot=new_zadv_hot;
volume_release(new_zadv_hot);
volume_rect(new_zadv_hot);
if (status_hot==false) {//kod_arr=1;
tft.setCursor(37,99); //выбор положения курсора для ввода текста
tft.setTextSize(1);//выбор размера шрифта
tft.setTextColor(Display_Text_Color);//выбор цвета текста
tft.print(F("ERROR ZERRO DRIVE2 "));//вводим сам текст
tft.setTextSize(2);
}
if (status_hot==true) {
tft.setCursor(37,99); //выбор положения курсора для ввода текста
tft.setTextSize(1);//выбор размера шрифта
tft.fillRect(131,99, 141, 110,Display_Backround_Color);
tft.setCursor(132,99);
tft.print(zaslonka_hot._steps);
tft.setTextSize(2);
// zaslonka_ap.stepper((zadv_ap<<k_mashtab_ap)); //установка позиции по умолчанию
}
}
break;
}
// case 3: if (kran_hot>5) {new_kran_hot=kran_hot-hfadeAmount;
// // zaslonka_kran.Set_pozition(kran_hot,new_kran_hot);
// kran_hot=new_kran_hot;
// tft.fillRect(81,110, kran_hot, 12,ST7735_MAGENTA);
// tft.fillRect(81+kran_hot,110, 80-kran_hot, 12,COL_RECT);// рисуем положение крана подачи горячего теплоносителя
// break;
// }
default:break;
}
}
if (enc.isRightH()) { switch (index_menu) {
case 0:{ if (fan>10) {
fan=fan-hfadeAmount;
volume_release(fan);
volume_rect(fan);
// tft.fillRect(0,70,map(fan,0,100,0,160), 12,ST7735_MAGENTA);
// tft.fillRect(0+map(fan,0,100,0,160),70, 160-map(fan,0,100,0,160), 12,COL_RECT);
}
break;
}
case 1: {if (zadv_ap>10) {new_zadv_ap=zadv_ap-hfadeAmount;
// zaslonka_ap.stepper(new_zadv_ap-zadv_ap);
zaslonka_ap.stepper((new_zadv_ap-zadv_ap)<<k_mashtab_ap);
zadv_ap=new_zadv_ap;
volume_release(new_zadv_ap);
volume_rect(new_zadv_ap);
if (status_ap==false) {//kod_arr=1;
tft.setCursor(37,99); //выбор положения курсора для ввода текста
tft.setTextSize(1);//выбор размера шрифта
tft.setTextColor(Display_Text_Color);//выбор цвета текста
tft.print(F("ERROR ZERRO DRIVE1 "));//вводим сам текст
tft.setTextSize(2);
}
if (status_ap==true) {
tft.setCursor(37,99); //выбор положения курсора для ввода текста
tft.setTextSize(1);//выбор размера шрифта
tft.fillRect(131,99, 141, 110,Display_Backround_Color);
tft.setCursor(132,99);
tft.print(zaslonka_ap._steps);
tft.setTextSize(2);
// zaslonka_ap.stepper((zadv_ap<<k_mashtab_ap)); //установка позиции по умолчанию
}
}
break;
}
// case 2: if (zadv_hot<75&&(zero_step_hot!=255)) {new_zadv_hot=zadv_hot+hfadeAmount;
case 2: {if (zadv_hot>10) {new_zadv_hot=zadv_hot-hfadeAmount;
zaslonka_hot.stepper((new_zadv_hot-zadv_hot)<<k_mashtab_hot);
zadv_hot=new_zadv_hot;
volume_release(new_zadv_hot);
volume_rect(new_zadv_hot);
if (status_hot==false) {//kod_arr=1;
tft.setCursor(37,99); //выбор положения курсора для ввода текста
tft.setTextSize(1);//выбор размера шрифта
tft.setTextColor(Display_Text_Color);//выбор цвета текста
tft.print(F("ERROR ZERRO DRIVE2 "));//вводим сам текст
tft.setTextSize(2);
}
if (status_hot==true) {
tft.setCursor(37,99); //выбор положения курсора для ввода текста
tft.setTextSize(1);//выбор размера шрифта
tft.fillRect(131,99, 141, 110,Display_Backround_Color);
tft.setCursor(132,99);
tft.print(zaslonka_hot._steps);
tft.setTextSize(2);
// zaslonka_ap.stepper((zadv_ap<<k_mashtab_ap)); //установка позиции по умолчанию
}
}
break;
}
// case 3: if (kran_hot<75) {new_kran_hot=kran_hot+hfadeAmount;
// zaslonka_kran.Set_pozition(kran_hot,new_kran_hot);
// kran_hot=new_kran_hot;
// tft.fillRect(81,110, kran_hot, 12,ST7735_MAGENTA);
// tft.fillRect(81+kran_hot,110, 80-kran_hot, 12,COL_RECT);// рисуем положение крана подачи горячего теплоносителя
// break;
// }
default:break;
}
}
if (enc.isClick()) {
erase_rect(index_menu); // перемещение по меню при нажатии на энкодер
index_menu++;
// if (index_menu==1&&status_ap==false) index_menu=2;
Serial.print("click");
Serial.println(index_menu);
if (index_menu >= 5) index_menu = 0; // ограничиваем позицию курсора
tft.fillRect(0,0, 160, 85,Display_Backround_Color);// очистка экрана
print_rect(index_menu) ;
switch (index_menu) {
case 0:{
tft.fillRect(0,10,79,60,Display_Backround_Color);
tft.setCursor(15,10);
tft.print(F(" "));
tft.setCursor(15,10);
tft.setTextColor(Display_Text_Color);
tft.print(index_menu);
tft.print(F(" FAN"));
// tft.setTextSize(2);//выбор размера шрифт
tft.setCursor(0,50);
tft.print("<<-");
tft.setCursor(120,50);
tft.print("+>>");
volume_release(fan);
volume_rect(fan);
// volume_release(fan);
break;
}
case 1:{ tft.fillRect(10,10,79,60,Display_Backround_Color);//заливка цветом весь дисплей);
tft.setCursor(5,10);
tft.setTextColor(Display_Text_Color);
tft.print(index_menu);
tft.print(F(" STOVE"));
// tft.setTextSize(2);//выбор размера шрифт
tft.setCursor(0,50);
tft.print(F("down"));
tft.setCursor(120,50);
tft.print(F("app"));
volume_release(new_zadv_ap);
volume_rect(new_zadv_ap);
tft.fillRect(0,99, 160, 120,Display_Backround_Color);
if (status_ap==false) {//kod_arr=1;
tft.setCursor(37,99); //выбор положения курсора для ввода текста
tft.setTextSize(1);//выбор размера шрифта
tft.setTextColor(Display_Text_Color);//выбор цвета текста
tft.print(F("ERROR ZERRO DRIVE1 "));//вводим сам текст
tft.setTextSize(2);
}
if (status_ap==true) { Serial.println(zaslonka_ap._steps);
tft.setCursor(37,99); //выбор положения курсора для ввода текста
tft.setTextSize(1);//выбор размера шрифта
tft.setTextColor(Display_Text_Color);//выбор цвета текста
tft.print(F("DRIVE1 position:"));
tft.print(zaslonka_ap._steps);
tft.setTextSize(2);
}
break;
}
case 2:{ tft.fillRect(10,10,79,60,Display_Backround_Color);//заливка цветом весь дисплей);
tft.setCursor(5,10);
tft.setTextColor(Display_Text_Color);
tft.print(index_menu);
tft.print(F(" Heater"));
// tft.setTextSize(2);//выбор размера шрифт
tft.setCursor(0,50);
tft.print(F("Less"));
tft.setCursor(110,50);
tft.print(F("More"));
volume_release(new_zadv_hot);
volume_rect(new_zadv_hot);
tft.fillRect(0,99, 160, 120,Display_Backround_Color);
if (status_hot==false) {//kod_arr=1;
tft.setCursor(37,99); //выбор положения курсора для ввода текста
tft.setTextSize(1);//выбор размера шрифта
tft.setTextColor(Display_Text_Color);//выбор цвета текста
tft.print(F("ERROR ZERRO DRIVE2 "));//вводим сам текст
tft.setTextSize(2);
}
if (status_hot==true) { tft.setCursor(37,99); //выбор положения курсора для ввода текста
tft.setTextSize(1);//выбор размера шрифта
tft.setTextColor(Display_Text_Color);//выбор цвета текста
tft.print(F("DRIVE2 position:"));
tft.print(zaslonka_hot._steps);
tft.setTextSize(2);
}
break;
}
case 3:{ tft.fillRect(0,0,160,60,Display_Backround_Color);//заливка цветом весь дисплей);
tft.fillRect(0,99, 160, 120,Display_Backround_Color);
tft.setCursor(5,10);
tft.setTextColor(Display_Text_Color);
tft.print(index_menu);
tft.print(F(" T1="));
// tft.setTextSize(2);//выбор размера шрифт
//DEBUG_INFO("T= %d",volume);
// tft.print(F("Less"));
// tft.setCursor(120,50);
// tft.print(F("More"));
// volume_release(new_zadv_hot);
break;
}
case 4:{ tft.fillRect(0,0,160,60,Display_Backround_Color);//заливка цветом весь дисплей);
tft.setCursor(5,10);
tft.setTextColor(Display_Text_Color);
tft.print(index_menu);
tft.print(F(" T2="));
// tft.setTextSize(2);//выбор размера шрифт
//DEBUG_INFO("T= %d",volume);
// tft.print(F("Less"));
// tft.setCursor(120,50);
// tft.print(F("More"));
// volume_release(new_zadv_hot);
break;
}
default:break;
}
}
// if (enc.isHolded()) Serial.println("hold");
if (index_menu==3 ) {tft.setCursor(5,10);
tft.setTextColor(Display_Text_Color);
tft.print(index_menu);
tft.print(F(" T1= "));
tft.print(Temperature);
}
//analogWrite(pin_fan, map(fan,0,99,0,255)); // устанавливаем мощность вентилятора
currentTime = millis();//сколько времени прошло с начала преобразования
//if (currentTime-loopTime >= delay_18b20) { loopTime =currentTime;// событие произошло меняем время отсчета в переменной looptime
// mass[i] =sensor1.getTemp();
// //mass[i] =sensor1.getTempCByIndex(0); //заполняем массив для усреднения значений
i++; // увеличиваем номер элемента в массиве
// zaslonka_ap.set_steps(8); // заодно снимаем напряжение с заслонок ( и так никуда не денутся)
Temperature=usr(mass,N_mass);
// DEBUG_INFO("T= %d",Temperature);
// DEBUG_INFO("mass0 %d", mass[0]);
// DEBUG_INFO("mass1 %d", mass[1]);
// DEBUG_INFO("mass2 %d", mass[2]);
// DEBUG_INFO("mass3 %d", mass[3]);
// DEBUG_INFO("mass4 %d", mass[4]);
// DEBUG_INFO("mass5 %d", mass[5]);
if (i>=6) i=0; // после заполнения буфера из 6 ти элементов
// DEBUG_INFO("T= %d",mass[i]);
// }
//dummy_process();
}