BABOS
03.Февраль.2026 12:45:33
62
работает ?)))
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Попробуйте разные адреса: 0x27, 0x3F, 0x20
LiquidCrystal_I2C lcd( 0x27, 16, 2); // 16 символов, 2 строки
void setup()
{
lcd.init(); // инициализация LCD
lcd.backlight(); // включение подсветки
// Первая строка
lcd.setCursor(0, 0); // столбец 0, строка 0
lcd.print("Hello, world!");
// Вторая строка
lcd.setCursor(0, 1); // столбец 0, строка 1
lcd.print("Arduino LCD");
}
void loop()
{
// пустой цикл
}
я кстате не давно узнал что такое мутизм, а так же знаю о людях которые либо не отвечают на поставленные им вопросы, либо отвечают, но не по сути))) я не на что не намекаю, просто делюсь забавным фактом!)))
p.s. двояко получается, вы просто почитайте если интересно, и посмотрите потом на тех кто задает вопросы, или особенно размещает заказы в разделе ищу исполнителя)))
Dima24
03.Февраль.2026 14:22:03
68
Завтра попробую. Все проверки и так пока на столе происходят, смысла устанавливать на стенд пока нет
Dima24
03.Февраль.2026 14:24:33
69
Тахометр на ардуино и оптопаре уже есть, работает отлично. Осталось со счётчиком разобраться
xDriver
03.Февраль.2026 15:46:56
71
что с ним разбираться то?
вообще эти вещи делаются на прерываниях, в вашем случае выход от датчика, чтобы не морочится, надо перекинуть на пин D3.
и залить код.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
volatile uint32_t cnt = 0;
uint32_t old_cnt = 0;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void btnIsr() {
cnt++;
}
void setup()
{
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(" Turn counter ");
attachInterrupt(1, btnIsr, RISING);
}
void loop()
{
if (old_cnt != cnt) {
old_cnt = cnt;
lcd.setCursor (0, 1);
lcd.print(cnt);
}
}
демо тут
Run IoT and embedded projects in your browser: ESP32, STM32, Arduino, Pi Pico, and more. No installation required!
это минимум что нужно.
надо хоть раз в неделю, помочь хоть кому то
шобы в пятницу не стыдно было)
1 лайк
Это, да, надо. Тем более, что мы ведь, в отличие от Фомы Аквинского, отлично знаем, что ни одно доброе дело не останется безнаказанным.
2 лайка
MMM
03.Февраль.2026 16:04:37
73
лучше бабушку через дорогу…
2 лайка
BABOS
03.Февраль.2026 16:26:06
74
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
volatile uint32_t cnt = 0;
uint32_t old_cnt = 0;
// Для оптического датчика дребезг меньше, но можно оставить защиту
volatile unsigned long lastInterruptTime = 0;
const unsigned long debounceDelay = 5;
void sensorIsr() {
unsigned long interruptTime = millis();
if (interruptTime - lastInterruptTime > debounceDelay) {
cnt++;
}
lastInterruptTime = interruptTime;
}
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(" Optic counter ");
// Настройка пина
pinMode(3, INPUT); // Без подтяжки, если датчик уже имеет подтяжку иначе INPUT_PULLUP
// В зависимости от логики датчика:
// - Если датчик выдает HIGH при препятствии: RISING
// - Если датчик выдает LOW при препятствии: FALLING
attachInterrupt(1, sensorIsr, RISING); // Или FALLING //CHANGE
}
void loop() {
if (old_cnt != cnt) {
old_cnt = cnt;
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(cnt);
}
}
только ради 1го дела в месяц!)))
xDrivеr
03.Февраль.2026 16:34:32
75
господи, непроходимый…
зачем это?
а это зачем?
неужели не очевидно, что каждый последующий cnt больше предыдущего и по значению и по кол-ву символов?
BABOS
03.Февраль.2026 16:38:56
76
1 нужно!
второе может и нет)))
а зачем не могу объяснить,))) должны быть на 1000 оборотах ложные срабатывания….
BABOS
03.Февраль.2026 16:41:54
79
если это реально нужно, то Dima24 вам скажет)))
а я считаю что просто нужно))) и объяснить это не могу)))
xDrivеr
03.Февраль.2026 16:44:59
80
а я считаю, что тебе хоть кол на голове теши!
прочитай медленно
BOOM
03.Февраль.2026 16:49:55
81
Причём лучше сразу топором!!!
4 лайка
Pyotr
03.Февраль.2026 18:16:00
82
@BABOS , скажи своему ИИ чтоб следующий раз вот так писал на случай если счетчик переполнится
lcd.setCursor(0, 1);
byte posCursor = lcd.print(cnt);
while(posCursor < 16) posCursor += lcd.print(' ');
BABOS
03.Февраль.2026 18:23:18
83
Pyotr
while(posCursor < 16) posCursor = lcd.print(' '); ???
Pyotr
03.Февраль.2026 18:55:12
84
Посмотри внимательней на мой код)
BABOS
03.Февраль.2026 19:13:10
85
Pyotr
просто так тащить в ии изменения и менять его незя!
а зачем так писать ?
а что будет если было 9999 а стало 99 ?))) 99 пробел 9 ?
для уменьшение мерцания
lcd.setCursor(0, 1);
byte posCursor = lcd.print(cnt); // Сразу вывод нового значения
while(posCursor < 16) posCursor = lcd.print(' '); // Правильная очистка хвоста
пока что я в терзаниях… и не думаю что надо вносить правки в его работу))) хотя может вы и докажете что надо))) только хотелось бы поподробнее узнать почему, только не говорите что сообщение выше на все отвечает)))
Pyotr
03.Февраль.2026 19:42:21
86
Вначале строки выводим n символов, а далее 16-n пробелов. Я думаю это правильней чем очищать строку, а затем заново делать вывод.
И да
BABOS
03.Февраль.2026 20:15:40
87
Pyotr выше сообщение мое отвечает или ваше ?))) вот тянешься тут к знаниям, а тебе не разжевывают…
вы скажите + там нужен или все таки нет ?
nik182
04.Февраль.2026 05:24:23
88
Да ладно? Обычно пишу что мне не понравилось в коде ИИ и он исправляется. Либо сам, либо пишу строку и спрашиваю - Так пойдёт?