Некорректные показания lcd дисплея

Всем привет. Решил собрать счетчик оборотов на оптопаре для стенда взамен механического. На просторах интернета нашел схему и скетч. Проблема в следующем, при считывании оборотов оптопарой на дисплее последовательно меняются цифры с 1 до 9, далее вместо цифры 10 появляется цифра 1, мигает десять раз (проходит 10 оборотов) и загорается цифра 2, хотя должно быть 20, далее мигает 10 раз и загорается цифра 3, должно 30 и так далее. В чем причина не могу разобраться.

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

int x = 0;
int input = A0;
int state = 0;

LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display

void setup()
{
  lcd.init(); // initialize the lcd

  // Print a message to the LCD.
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("  Turn counter ");
  lcd.setCursor(0, 1);
  lcd.print(x);
  lcd.print("     =turn  ");
}
void loop()
{
  int counter = digitalRead(A0);
  if (state == 0)
  {
    switch (counter) {

      case 1 : state = 1; lcd.setCursor (0, 1); x = x + 1; lcd.print(x); break;
      case 0 : state = 0; break;

    }
  }

  if (counter == LOW) {
    state = 0;
  }
}

сейчас начнется про вставку кода…)))

Для начала вставьте код правильно

Да ты колдун, не иначе ))

1 лайк

ну так вы повторяетесь, а новенькое что то будет ?)))

Dima24 а что означают волнистые линии ?

Основные проблемы:

  1. Неправильное использование цифрового чтения аналогового пина - digitalRead(A0) для аналогового входа

  2. Очистка одного символа вместо всей строки - при обновлении числа

  3. Логика счета - неправильное отображение десятков

Зачеркнутые элементы и волнистые линии означают что в моей схеме они отсутствуют. Схему собирал из видео ролика, а это картинка из интернета для наглядности.

ты сам, хоть что то можешь посоветовать?
без ИИ?

2 лайка

Мог бы - не советовал))

конечно, подключить к цифровому пину… но это позже, когда будет видно что ему реально нужна помощь)))
сделать внутреннюю подтяжку, и сделать антибребезг!

вот видите как много я сам подсказал… но это не точно)))

то есть для механического у вас есть код и он работает, можно взглянуть?

А0 это эквивалент D14. Пин цифровой.

а по схеме не похоже)))

ты своему ИИ задай вопрос

A0 на Arduino можно использовать как цифровой вывод

позоришься ведь

опередили))

не не, я не хочу чтоб мой ии отупел, лучше вы скажите что не так ?)))

хотя есть ии онлайн!

ну одно и тоже имя, 14 и A0 и что ?))) я по прежнему говорю что лучше использовать обычный цифровой пин

А этот пин какой? Волшебный? Или золотой? :smiley:

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

с какого перепугу, аргументируй.
А0 и есть обычный цифровой правда иногда может быть аналоговым.

балабол

 НЕТ pinMode(A0, INPUT_PULLUP) или pinMode(A0, INPUT)! 

я ии попросил проверить, говорит нет такого… найдите

xDriver
от сюда вы утверждаете что его не надо объявлять или что ?)))
а заодно можете показать как антибребезг на нем делать ?)))

У МК все пины изначально цифровые настроенные на ввод. (Про А6 А7 гусары молчать!) Некоторые пины имеют альтернативные функции и что бы AF заработали надо их настроить. Всё это описано в документации и МК. Почитай что ли на досуге.

3 лайка