Всем доброе время суток!
Появилась у меня идея сделать климат контроль для машины.
Буду использовать сервопривода, три датчика температуры, транзистор для двигателя печки, два реле, двухстрочный дисплей для вывода информации и энкодер для управления.
По электрической части все собрал, все работает в отдельных скетчах, все хорошо...
Но когда начала собирать все в один скетч, то начали проявляться проблеммы...
Уже пытаюсь сделать четвертый вариант и всегда одна и та же ошибка. При запуске скетча начинает тупить энкодер, то путает направления, то соовсем не срабатывает. Использовал уже четыре разных вида энкодеров, пробовал переделывать управление через кнопки, а результат один и тот же.
В програмировании C++, немного чайник (много чайник) использовал уже разные виды написания, а толку нет.
На данной стадии написания скетча уже проявляется данная ошибка:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
#define CLK 5
#define DT 6
#define SW 7
#include "GyverEncoder.h"
Encoder enc1(CLK, DT, SW);
byte programma = 1;
byte auto_hand = 0;
byte zadanietemp = 20;
byte stroka = 3;
byte air = 0;
byte procentair = 0;
void setup()
{
lcd.init(); // initialize the lcd
// Print a message to the LCD.
lcd.backlight();
enc1.setType(TYPE2);
}
void loop()
{
enc1.tick();
if (enc1.isRightH()){
if (programma+1 <= 3) programma=programma+1;
lcd.clear();}
if (enc1.isLeftH()){
if (programma-1 >= 1) programma=programma-1;
lcd.clear();}
if (programma == 1) rezhim_1();
if (programma == 2) rezhim_2();
if (programma == 3) rezhim_3();
}
void rezhim_1(){
if (enc1.isPress()) {
stroka=stroka+1;
lcd.clear();
if (stroka == 4) stroka = 1;}
if (stroka == 1) stroka_1();
if (stroka == 2) stroka_2();
if (stroka == 3) stroka_3();
if (auto_hand == 1) {
lcd.setCursor(9,0);
lcd.print("AUTO");
lcd.setCursor(14, 0);
lcd.print(zadanietemp, 1);}
if (auto_hand == 0) {
lcd.setCursor(9,0);
lcd.print("HAND");
if (stroka == 2) stroka = 3;
}
lcd.setCursor(0, 1);
lcd.print("Flow");
fillBar0(5, 1, 11, procentair);
}
void stroka_1() {
lcd.setCursor(8,0);
lcd.print(">");
if (enc1.isRight()) auto_hand = 1;
if (enc1.isLeft()) auto_hand = 0;
}
void stroka_2() {
lcd.setCursor(13,0);
lcd.print(">");
if (auto_hand == 1) {
if (enc1.isRight()) {
if (zadanietemp+1 <= 30){ zadanietemp=zadanietemp+1;}
}
enc1.tick();
if (enc1.isLeft()) {
if (zadanietemp-1 >= 15){ zadanietemp=zadanietemp-1;}
}
}
}
void stroka_3(){
lcd.setCursor(4,1);
lcd.print(">");
if (enc1.isRight()) {
if (procentair+5 <= 100){ procentair=procentair+5;
lcd.clear();}
}
if (enc1.isLeft()) {
if (procentair-5 >= 0){ procentair=procentair-5;
lcd.clear();}
}
}
void rezhim_2(){
lcd.setCursor(1,0);
lcd.print("rezhim 2");
}
void rezhim_3(){
lcd.setCursor(1,0);
lcd.print("rezhim 3");
}
void fillBar0(byte start_pos, byte row, byte bar_length, byte fill_percent) {
byte infill = round((float)bar_length * fill_percent / 100);
lcd.setCursor(start_pos, row);
if (infill == 0) lcd.write(16);
else lcd.write(255);
for (int n = 1; n < bar_length - 1; n++) {
if (n < infill) lcd.write(255); if (n >= infill) lcd.write(16);
}
if (infill == bar_length) lcd.write(255);
else lcd.write(16);
}
Подскажите кто чем может убогому....
Щас пошлют...читать правила размещения информации на форуме )))
Уже сходил, прочитал, понял что немного все неправильно)
При запуске скетча начинает тупить энкодер, то путает направления, то соовсем не срабатывает.
...
Ещё одна жертва гивера? Тебе вот сюда - http://community.alexgyver.ru
Щас пошлют...читать правила размещения информации на форуме )))
И не только, еще и форум почитать - тремя темами ниже.
Ещё одна жертва гивера? Тебе вот сюда - http://community.alexgyver.ru
надо сбросться форумом и Гайверу, как популяризатору магарыч поставить, от него все на форум ардуино прибегают )))