Прошу помощи для поиска ошибки....

Voropaev_Pavel
Offline
Зарегистрирован: 31.05.2019

Всем доброе время суток!

Появилась у меня идея сделать климат контроль для машины. 

Буду использовать сервопривода, три датчика температуры, транзистор для двигателя печки, два реле, двухстрочный дисплей для вывода информации и энкодер для управления.

По электрической части все собрал, все работает в отдельных скетчах, все хорошо...

Но когда начала собирать все в один скетч, то начали проявляться проблеммы...

Уже пытаюсь сделать четвертый вариант и всегда одна и та же ошибка. При запуске скетча начинает тупить энкодер, то путает направления, то соовсем не срабатывает. Использовал уже четыре разных вида энкодеров, пробовал переделывать управление через кнопки, а результат один и тот же.

В програмировании 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);
}
 
Подскажите кто чем может убогому....
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Щас пошлют...читать правила размещения информации на форуме )))

 

Voropaev_Pavel
Offline
Зарегистрирован: 31.05.2019

Уже сходил, прочитал, понял что немного все неправильно)

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Voropaev_Pavel пишет:

При запуске скетча начинает тупить энкодер, то путает направления, то соовсем не срабатывает.

...

#include "GyverEncoder.h"

 

 

 

Поделки от тов гайвера здесь очень нелюбят. За помощью обращайтесь на его форум.

 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Voropaev_Pavel пишет:

#include "GyverEncoder.h"

Ещё одна жертва гивера? Тебе вот сюда -  http://community.alexgyver.ru

bwn
Offline
Зарегистрирован: 25.08.2014

ua6em пишет:

Щас пошлют...читать правила размещения информации на форуме )))

И не только, еще и форум почитать - тремя темами ниже.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Ворота пишет:

Voropaev_Pavel пишет:

#include "GyverEncoder.h"

Ещё одна жертва гивера? Тебе вот сюда -  http://community.alexgyver.ru

надо сбросться форумом и Гайверу, как популяризатору магарыч поставить, от него все на форум ардуино прибегают )))