Перейти к содержанию

Глюк LCD+Encoder


Гость NameIS

Рекомендуемые сообщения

Здравствуйте. Подскажите пожалуйста почему данный ниже код работает с глюком.

Глюк заключается в том, что если выводить на LCD дисплей так: lcd.print("Param: "); lcd.print(myparam); то в этих строках:

if (encoder.isRight() && myparam < 35) myparam++;
  if (encoder.isLeft()  && myparam > 10) myparam--;

myparam меняется, но не так как нужно. Я пробовал в сериал выводить myparam сразу после этих строк для сравнения с отображением на LCD но и там и там одинаково и неправильно. Если так: lcd.print(myparam); (без предварительного lcd.print("Param: ");) то все нормально.

Неправильно - это меняется ели ели, как-то медленно, т.е. несколько щелчков энкодера что бы сменилось на единицу. И еще при повороте ручки в одну сторону значение myparam может(или нет) меняться и в ту и в другую сторону).

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

Из-за чего такой неприятный глюк? Может это связано с конкретным моим железом или библиотеками. Название библиотек и их версии я в коде указал.

Скрытый текст

#include <LiquidCrystal_I2C.h>
//name=LiquidCrystal_I2C
//version=1.1.4
//author=Frank de Brabander
//maintainer=Marco Schwartz <marcolivier.schwartz@gmail.com>
//sentence=A library for I2C LCD displays.
//paragraph= The library allows to control I2C displays with functions extremely similar to LiquidCrystal library. THIS LIBRARY MIGHT NOT BE COMPATIBLE WITH EXISTING SKETCHES.
//category=Display
//url=https://github.com/marcoschwartz/LiquidCrystal_I2C
//architectures=avr
#include <GyverEncoder.h>
//name=GyverEncoder
//version=4.8
//author=AlexGyver <beragumbo@ya.ru>
//maintainer=AlexGyver <beragumbo@ya.ru>
//sentence=Advanced library for encoder.
//paragraph=Allows to get maximum uses of encoder: turns, holded turns, fast turns and more.
//category=Sensors
//url=https://github.com/AlexGyver/GyverLibs
//architectures=*

#define CLK 4
#define DT 5
#define SW 3

Encoder encoder(CLK, DT, SW);
LiquidCrystal_I2C lcd(0x27, 20, 4);

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

byte myparam = 10;
#define FLASH_MS 400
uint32_t ms = 0;
bool f = true;
void loop() {

  encoder.tick();
  if (encoder.isRight() && myparam < 35) myparam++;
  if (encoder.isLeft()  && myparam > 10) myparam--;

  if (millis() - ms >= FLASH_MS) {
    f = !f; ms += FLASH_MS;
  }

  lcd.setCursor(0, 0);
  //      lcd.print(myparam);                                 // Работает
        if (!f) lcd.print("   "); else lcd.print(myparam);    // Работает
  //      lcd.print("Param: "); lcd.print(myparam);           // НЕ работает
  //      lcd.print("Param: "); if (!f) lcd.print("   "); else lcd.print(myparam); // НЕ работает

}

 

Или я чего-то не знаю про связку lcd.print и encoder :(

Ссылка на комментарий
Поделиться на другие сайты

I2c и энкодер не работают в паре нормально! Подключайте дисп на 6 проводов и меняйте код. Тогда все должно заработать нормально. В flprog есть такая возможность подключения. И прежде, чем приводить чужой код - читайте там, где вы его взяли! 

Никогда СЮДА не нажимай!!!

надоело из каждого вытаскивать информацию, поэтому:

А ПОДРОБНЕЕ? ГДЕ ФОТО? ГДЕ СХЕМА? ЧТО ЗНАЕШЬ? ЧТО УМЕЕШЬ?

мощные выходные транзисторы перегорают, предохраняя от перегорания плавкие предохранители....

Школа учит читать и писать, институт - пользоваться справочниками и искать ответы

Ссылка на комментарий
Поделиться на другие сайты

43 минуты назад, sanbi4 сказал:

I2c и энкодер не работают в паре нормально!

Если это так, то печально :(

43 минуты назад, sanbi4 сказал:

И прежде, чем приводить чужой код - читайте там, где вы его взяли!

С чего решили что это чужой код? Этот код, который я привел в первом посте, я сделал минимальным для демонстрации ситуации(глюка).

Изначально я начал делать скеч, в которм идет работа с энкодером и дисплеем, но наткнулся на данный глюк. Сначала думал, что это я чего намудрил в своем коде, долго искал и выявил "причину". Код упростил и задал тут вопрос. Так же задал его еще на одном форуме. И там немного прояснилось, что энкодер нужно использовать с прерываниями, но все равно пока нормальной работы не получается. Так же там сказали что библиотека от Гайвера не есть хорошо... Буду пробовать с другими... Или самому мудрить...

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...