Разное о выращивании табака на Алтае
Вы не вошли.
Страницы 1
Самогонный компьютер.
#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--;
}
}
Не в сети
Страницы 1