Проблема с энкодером и потенциометром с дисплеем 16х2

GraviT0N

✩✩✩✩✩✩✩
10 Дек 2018
1
0
Добрый день.

Есть проблема с дисплеем 16х2 (подключен через I2C) и выводом на него показаний с потенциометра и энкодера. Суть в следующем: при одновременном выводе значений на экран, нормально отображается изменение показаний с энкодера , изменение показаний потенциометра отображается только при повороте энкодера. Да, вывод значений находится в enc1.isTurn(), но если вынести из условия вывод значений потенциометра, то изменение обоих значений на экране отображается нормально, только энкодер начинает вести себя странно - пропускать шаги и увеличивать (или не меняет) значение при вращении в любую сторону. Энкодер и потенциометр подключены правильно, т.к. в мониторе порта и энкодер и потенциометр по отдельности ведут себя нормально.

Собственно как быть ?

используемые библиотеки во вложении

#define CLK 7
#define DT 8
#define SW 9
#define potpin 0

#include "GyverEncoder.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

Encoder enc1(CLK, DT, SW);
LiquidCrystal_I2C lcd(0x27, 16, 2);

int value = 0;
int Fan = 0;

void setup() {
lcd.init();
lcd.backlight();
enc1.setType(TYPE2);
}

void loop() {

enc1.tick();

if (enc1.isRight()) value--;
if (enc1.isLeft()) value++;
if (enc1.isRightH()) value -= 5;
if (enc1.isLeftH()) value += 5;

value = constrain(value, 0 , 100);

Fan = analogRead(potpin);
Fan = map(Fan, 0, 1023, 0, 100);

if (enc1.isTurn()) {
lcd.setCursor(0, 0);
lcd.print("Time");
lcd.setCursor(5, 0);
lcd.print(value);
lcd.setCursor(0, 1);
lcd.print("Fan");
lcd.setCursor(5, 1);
lcd.print(Fan);
}
/*
lcd.setCursor(0, 1);
lcd.print("Fan");
lcd.setCursor(5, 1);
lcd.print(Fan);
*/
}
 

Вложения

  • 24.8 KB Просмотры: 0