#1 18-12-2020 04:01:14

IvanAltay
Administrator
Зарегистрирован: 03-05-2018
Сообщений: 4,586

Distiller_CPU

Самогонный компьютер.

160823903278012765772975463416.jpg

#define CLK 2
#define DT 3
#define SW 4
#include "GyverEncoder.h"
Encoder enc1(CLK, DT, SW);  // для работы c кнопкой
#define SCR_WD 128
#define SCR_HT 160
#include <SPI.h>
#include <Adafruit_GFX.h>
#define TFT_CS 9
#define TFT_DC  10
#define TFT_RST 8
#include <Arduino_ST7735_Fast.h>
#include <DallasTemperature.h>
#include <OneWire.h>
unsigned last_time;
int a=0;
int VENT12V=150;
int dymogen=0;
int convekciya=0;
int StartYES=1;
int STARTMenuPos=1;
int STARTMenuPosLAST=0;
int TempCam =50;
int TempStab = 5;
int TempCamOFF =1;
float timesec =0;
int TIMEm=50;
int timemin =50;
int timechas =0;
float tempC =0;
float tempCC =0;
float tempC1 =0;
int tempCstab = 50;
#define ONE_WIRE_BUS_1 7//ВХОД DS18B20
OneWire oneWire_in(ONE_WIRE_BUS_1);
DallasTemperature sensor_inhouse(&oneWire_in);
uint16_t temp;
Arduino_ST7735 tft = Arduino_ST7735(TFT_DC, TFT_RST, TFT_CS);
// Начало функции обработки кириллических символов
String utf8rus(String source)     // Функция для конвертации русских символов из кодировки CP1251 в UTF8
{
  int i,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;
 
    if (n >= 0xBF){
      switch (n) {
        case 0xD0: {
          n = source[i]; i++;
          if (n == 0x81) { n = 0xA8; break; }
          if (n >= 0x90 && n <= 0xBF) n = n + 0x2F;
          break;
        }
        case 0xD1: {
          n = source[i]; i++;
          if (n == 0x91) { n = 0xB7; break; }
          if (n >= 0x80 && n <= 0x8F) n = n + 0x6F;
          break;
        }
      }
    }
    m[0] = n; target = target + String(m);
  }
  return target;
}
// Конец функции обработки кириллических симоволов
void setup()
{
  Serial.begin(115200);
  pinMode(A4, OUTPUT);//симистор
 digitalWrite(A4, LOW);  
pinMode(A0, OUTPUT);//реле конвекции
 digitalWrite(A0, LOW); //выключить  реле конвекции
 pinMode(A1, OUTPUT);//пищалка
 digitalWrite(A1, LOW);   
 pinMode(A5, OUTPUT);//пищалка
 digitalWrite(A5, LOW);   
 pinMode(5, OUTPUT);//порт вентилятора 12В
 attachInterrupt(0, isrCLK, CHANGE);    // прерывание на 2 пине! CLK у энка
  attachInterrupt(1, isrDT, CHANGE);    // прерывание на 3 пине! DT у энка
 enc1.setType(TYPE2);        // тип энкодера TYPE1 одношаговый, TYPE2 двухшаговый. Если ваш энкодер работает странно, смените тип\=
  enc1.setFastTimeout(20);    // таймаут на скорость isFastR. По умолч. 50
  //ds18b20
  sensor_inhouse.begin();
tft.init();
 tft.setRotation(1);
 tft.setFont(0);
 tft.fillScreen(BLACK);
  tft.setTextSize(2);
  tft.setTextColor(WHITE);
tft.fillRect(0, 0, 160, 20, 28);
menuStart();
for(int i=0;i<10;i++) {
tft.drawLine(0,2+i*18,160,2+i*18, 480);  
}
}
void isrCLK() {
  enc1.tick();  // отработка в прерывании
}
void isrDT() {
  enc1.tick();  // отработка в прерывании
}
void menuTempCam()///МЕНЮ ИЗМЕНЕНИЯ ТЕМПЕРАТУРЫ КАМЕРЫ/////////
{
  tft.fillRect(1, 1, 160, 36, 28);
 tft.setTextColor(WHITE);
  tft.setCursor(1, 1);
  tft.print(utf8rus("Нагрев камеры"));
  tft.setTextColor(GREEN);
  if (TempCam>39){
  tft.print("+");
  tft.print(TempCam);
  tft.print("`C"); 
  } 
  else tft.print(utf8rus("  ВЫКЛ")); 
}
void Start()///////////////функция меню подтверждения начала работы ДА/НЕТ
{
tft.fillScreen(BLACK);
tft.setCursor(1,10);
 tft.fillRect(10, 80, 68,34 , 28);
  tft.setTextColor(WHITE);
  tft.print(utf8rus("Начать работу   с этими    параметрами?"));
  tft.setTextColor(RED);
 tft.setTextSize(4);
  tft.setCursor(10, 80);
  tft.print(utf8rus("   НЕТ"));
 tft.setTextColor(GREEN);
  tft.setCursor(10, 80);
  tft.print(utf8rus("ДА/"));
// while (!enc1.isSingle()){
 while (!enc1.isDouble()){
enc1.tick();
if (enc1.isRight()) {
  StartYES=0;
  tft.fillRect(10, 80, 68,34 , 0);
  tft.fillRect(78, 80, 70,34 , 28);
 tft.setCursor(10, 80);
  tft.setTextColor(RED);
  tft.print(utf8rus("   НЕТ"));
 tft.setTextColor(GREEN);
  tft.setCursor(10, 80);
  tft.print(utf8rus("ДА/")); 
}
if (enc1.isLeft()) {
 StartYES=1;
  tft.fillRect(10, 80, 68,34 , 28);
  tft.fillRect(78, 80, 70,34 , 0);
 tft.setCursor(10, 80);
  tft.setTextColor(RED);
  tft.print(utf8rus("   НЕТ"));
  tft.setTextColor(GREEN);
  tft.setCursor(10, 80);
  tft.print(utf8rus("ДА/")); 
}
}   
}
void menuStart()//////////////////стартовое меню//////////     
{
 tft.setTextSize(2);
 tft.setTextColor(WHITE);
  tft.setCursor(1, 2);
  tft.print(utf8rus("ГРАДУСНИК"));
  tft.setCursor(1, 20);
  tft.print(utf8rus("ТЕРМОСТАТ"));
  tft.setCursor(1, 38);
  tft.print(utf8rus("Дистилляция"));
  tft.setCursor(1, 56);
  tft.print(utf8rus("Ректификация")) ; 
  
} 
void pik()
{
  digitalWrite(A1, HIGH);   //включить пищалку
delay(50);//время сигнала
digitalWrite(A1, LOW);   
}
void Rabota()///////////ФУНКЦИЯ РЕЖИМА РАБОТЫ//////////////////////////////////////////////////////////////////////
{ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////

if (convekciya==1) digitalWrite(A0,   HIGH);    //включить реле конвекции
if (TempCam>39) digitalWrite(A4,   HIGH);    //включить симистор
digitalWrite(A1, HIGH);   //включить пищалку
delay(50);//время сигнала
digitalWrite(A1, LOW);   
 tft.setFont(0);
 tft.fillScreen(BLACK);
 tft.setCursor(5, 78);
  tft.setTextColor(WHITE);
  tft.setTextSize(2);
  tft.println(utf8rus("Температура  стабилтзации:"));
  tft.fillRect(1, 111, 160, 16, 28);
tft.setTextSize(2);
tft.setCursor(5, 111);
   tft.setTextColor(RED);
 tft.print(TempCam);
  tft.setCursor(41, 111);
  tft.print("`C ");
   tft.setTextColor(GREEN);
   tft.print(timechas+utf8rus("ч"));
  tft.print(timemin+utf8rus("м"));
// tft.print(60-timesec);
 tft.setCursor(5, 5);
  tft.setTextColor(WHITE);
  tft.setTextSize(2);
  tft.println(utf8rus("Температура  камеры:"));
   sensor_inhouse.requestTemperatures();
     tempC = sensor_inhouse.getTempCByIndex(0); 
  if (tempC != DEVICE_DISCONNECTED_C){
    tft.fillRect(1, 40, 160, 30, 28);
  tft.setTextSize(4);
  tft.setCursor(5, 40);
  tft.setTextColor(GREEN); 
  tft.print(tempC);
    } 

if (VENT12V>150){ //запуск вентилятора дымогенератора 12В на форсаже
analogWrite(5, 255);
delay(1000);
analogWrite(5, VENT12V);//работа вентилятора дымогенератора 12В в заданном режиме
}
while (TIMEm!=0){
if (millis() - last_time>=1000){
 last_time=millis();
 timesec++;
if (timesec==59){
  timesec=0;
  if (timemin==0) {
    timemin = 59;
    timechas--;
  }
  timemin--;
 
 TIMEm--;

tft.fillRect(1, 111, 160, 16, 28);
tft.setTextSize(2);
tft.setCursor(5, 111);
tft.setTextColor(RED);
tft.print(TempCam);
tft.setCursor(41, 111);
tft.print("`C ");
tft.setTextColor(GREEN);
tft.print(timechas+utf8rus("ч"));
tft.print(timemin+utf8rus("м"));
  }
 
}

 //ds18b20//
    sensor_inhouse.requestTemperatures();
     tempC = sensor_inhouse.getTempCByIndex(0); 
  if (tempC != DEVICE_DISCONNECTED_C)
  {    
  }
  else Serial.print("DEVICE1 ds18b20 DISCONNECTED");
 sensor_inhouse.requestTemperatures();
 tempC1 = sensor_inhouse.getTempCByIndex(0);  
  if (tempC1 !=tempC){
  tft.fillRect(1, 40, 160, 30, 28); 
  tft.setTextSize(4);
  tft.setCursor(5, 40);
  tft.setTextColor(GREEN); 
  tft.print(tempC1);
 /////////////////////термостат камеры/////////////////////////// 
  if (tempC1>TempCam and TempCam>39) {
    digitalWrite(A4, LOW );    //выключить симистор 
digitalWrite(A1, HIGH);   //включить пищалку
delay(15);//время сигнала
digitalWrite(A1, LOW);   
  } 
if (tempC1<TempCam and TempCam>39) {//гистерезис включения термостата 0 градусов
// if (tempC1<TempCam-1) {//гистерезис включения термостата 1 градус
  digitalWrite(A4,   HIGH);    //включить симистор
  }
  }
//enc1.tick();
//////////// нажатие кнопки //////
//if (enc1.isClick())//isDouble())
//{ 
//tft.fillRect(1, 1, 160, 30, 0);
//tft.setCursor(5, 5);
//  tft.setTextColor(WHITE);
//  tft.setTextSize(3);
//  tft.println(utf8rus("ПУЗА."));
//digitalWrite(A1, HIGH);   //включить пищалку
//delay(1500);//время сигнала
//digitalWrite(A1, LOW);      
//  }
}
 //////////завершение работы////
 digitalWrite(A0,   LOW);    //выключить реле конвекции
 digitalWrite(A4,   LOW);    //выключить симистор
digitalWrite(A1, HIGH);   //включить пищалку
delay(2000);//время сигнала
digitalWrite(A1, LOW);    
analogWrite(5, 0);//выключить вентилятора дымогенератора 12В 
}
void menuTime()
{
tft.fillRect(1, 54, 160, 20, 28);
tft.setCursor(1, 54);
  tft.setTextColor(GREEN);
  tft.print(timechas+utf8rus("ч"));
  tft.print(timemin+utf8rus("м"));
}  
///////////////////////////ФУНКЦИЯ ТЕРМОСТАТ 12в/////////////////////
void Termostat()
{
 tft.fillScreen(BLACK);
 tft.setCursor(5, 5);
  tft.setTextColor(WHITE);
  tft.setTextSize(2);
  tft.println(utf8rus("Температура:"));
  tft.setCursor(5, 72);
  tft.println(utf8rus("Температура  стабилизации:"));
  tft.setTextColor(GREEN); 
  tft.setTextSize(3);
  tft.print("  ");
  tft.print(TempStab);
  tft.println("`C");
 sensor_inhouse.requestTemperatures();
 tempC = sensor_inhouse.getTempCByIndex(0);  
    tft.fillRect(1, 25, 160, 45, 28);
  tft.setTextSize(5);
  tft.setCursor(5, 29);
  tft.setTextColor(GREEN); 
  tft.print(tempC); 
while (a!=200){
 enc1.tick();
 /////////////в лево/////
 if (enc1.isRight()) {
  TempStab--;
  tft.fillRect(1, 102, 160, 25, 28);
  tft.setTextSize(2);
  tft.setCursor(5, 72);
  tft.println(utf8rus("Температура  стабилизации:"));
  tft.setTextColor(GREEN); 
  tft.setTextSize(3);
  tft.print(" ");
  tft.print(TempStab);
  tft.println("`C");
  }
 if (enc1.isLeft()) {
  TempStab++;
  tft.fillRect(1, 102, 160, 25, 28);
  tft.setTextSize(2);
  tft.setCursor(5, 72);
  tft.println(utf8rus("Температура  стабилизации:"));
  tft.setTextColor(GREEN); 
  tft.setTextSize(3);
  tft.print(" ");
  tft.print(TempStab);
  tft.println("`C");
  }
 //ds18b20//
    sensor_inhouse.requestTemperatures();
     tempC = sensor_inhouse.getTempCByIndex(0); 
  if (tempC != DEVICE_DISCONNECTED_C)
  {    
  }
  else Serial.print("DEVICE1 ds18b20 DISCONNECTED");
 sensor_inhouse.requestTemperatures();
 tempC1 = sensor_inhouse.getTempCByIndex(0);  
  if (tempC1 !=tempC){
    tft.fillRect(1, 25, 160, 45, 28);
  tft.setTextSize(5);
  tft.setCursor(5, 29);
  tft.setTextColor(GREEN); 
  tft.print(tempC);
    }  
if (tempC<TempStab)
{
 analogWrite(5, 255);//включить 12В  
}else {
analogWrite(5, 0);//выключить  12В   
}

}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void loop(void)/////////////////////////////////////////////////////////////////////////////////////////////////
{ 
 enc1.tick();
//////////// нажатие кнопки //////
if (enc1.isClick()and (STARTMenuPos==2)){
  Termostat();
  }
////////////двойное нажатие кнопки //////
if (enc1.isDouble()){  
}
//enc1.tick();
///////////ПОВОРОТ В ПРАВО С НАЖАТОЙ КНОПКОЙ настройка конвекции ВКЫЛ/ВЫКЛ //////////
if (enc1.isRightH() and (STARTMenuPos==3)){
convekciya=1;
tft.fillRect(1, 72, 160, 16, 28);
 menuStart(); 
}
//enc1.tick();
///////////ПОВОРОТ В лево С НАЖАТОЙ КНОПКОЙ настройка конвекции ВКЫЛ/ВЫКЛ //////////
if (enc1.isLeftH() and (STARTMenuPos==3)){
convekciya=0;
tft.fillRect(1, 72, 160, 16, 28);
 menuStart(); 
}
//enc1.tick();
///////////ПОВОРОТ В ПРАВО С НАЖАТОЙ КНОПКОЙ настройка дымогенератора ВКЫЛ/ВЫКЛ //////////
if (enc1.isRightH() and (STARTMenuPos==4)){

dymogen=1;
tft.fillRect(1, 88, 160, 35, 28);
///////////////////////////
VENT12V=VENT12V+5;
if ( VENT12V>255)  VENT12V=255;
tft.setCursor(1, 90);
  tft.setTextColor(WHITE);
  tft.print(utf8rus("Дымогенератор"));
 
tft.setCursor(2, 108);
  tft.setTextColor(WHITE);
  tft.print(utf8rus("включен: ")) ; 
  tft.setTextColor(GREEN);
  tft.print(VENT12V);
}
//enc1.tick();
///////////ПОВОРОТ В лево С НАЖАТОЙ КНОПКОЙ настройка дымогенератора ВКЫЛ/ВЫКЛ //////////
if (enc1.isLeftH() and (STARTMenuPos==4)){
dymogen=0;
tft.fillRect(1, 88, 160, 35, 28);
///////////////////////////
VENT12V=VENT12V-5;
if ( VENT12V<140)  VENT12V=140;
tft.setCursor(1, 90);
  tft.setTextColor(WHITE);
  tft.print(utf8rus("Дымогенератор"));
  tft.setTextColor(GREEN);
  tft.setCursor(112, 108); 
  tft.print(VENT12V);
////////////////////////////
}
//enc1.tick();
///////////ПОВОРОТ В ПРАВО С НАЖАТОЙ КНОПКОЙ настройка температуры//////////
if (enc1.isRightH() and (STARTMenuPos==1)){
if (TempCam<121) TempCam=TempCam+5;
menuTempCam();  
}
//enc1.tick();
///////////ПОВОРОТ В ЛЕВО С НАЖАТОЙ КНОПКОЙ настройка температур//////////
if (enc1.isLeftH() and (STARTMenuPos==1)){
if (TempCam>39) TempCam=TempCam-5;
menuTempCam();  
}
// enc1.tick();
///////////ПОВОРОТ В ПРАВО С НАЖАТОЙ КНОПКОЙ настройка времени//////////
if (enc1.isRightH() and (STARTMenuPos==2)){
 timemin=timemin+10;
if (timemin>59) {
 timechas++;
 timemin=0; 
}
TIMEm=timemin+timechas*60;
menuTime(); 
}
// enc1.tick();
///////////ПОВОРОТ В ЛЕВО С НАЖАТОЙ КНОПКОЙ настройка времени//////////
if (enc1.isLeftH() and (STARTMenuPos==2) and (timemin>11) and (timechas>=0)){
 timemin=timemin-10;
if ((timemin<9) and (timechas>0)){
 timechas--;
 timemin=60; 
}
//if ((timemin<9) and (timechas==0)) timemin=10 ;
TIMEm=timemin+timechas*60;
menuTime(); 
}
/////////////в лево/////
 if (enc1.isRight()) {
 pik(); 
   if (STARTMenuPos==1){
   tft.fillRect(0, 0, 160, 20 ,0);  
   tft.fillRect(0, 20, 160, 18, 28);
 menuStart();
 }
if (STARTMenuPos==2){
  tft.fillRect(0, 20, 160, 18, 0);
  tft.fillRect(0, 38, 160, 18 ,28);  
   
 menuStart();
 }
if (STARTMenuPos==3){  
  tft.fillRect(0, 38, 160, 18 ,0);  
   tft.fillRect(0, 56, 160,18 , 28);
 menuStart();
 }
 if (STARTMenuPos<4) STARTMenuPos++;
}
  /////////////в право/////
  if (enc1.isLeft()) {
    pik(); 
   if (STARTMenuPos==2){ 
  tft.fillRect(0, 0, 160, 20 ,28);  
   tft.fillRect(0, 20, 160, 18, 0);
 menuStart();
 }
if (STARTMenuPos==3){
  tft.fillRect(0, 20, 160, 18, 28);
  tft.fillRect(0, 38, 160, 18 ,0);
 menuStart();
 }
if (STARTMenuPos==4){
   tft.fillRect(0, 38, 160, 18 ,28);  
   tft.fillRect(0, 56, 160,18 , 0);
 menuStart();
 }
if (STARTMenuPos>1) STARTMenuPos--;
} 
 
  }

Не в сети

Подвал раздела

Работает на FluxBB (перевод Laravel.ru)