Всех приветствую! Год назад я создавал тему, где мне здорово помогли, за что всем откликнувшимся огромное человеческое спасибо!
Наконец, дошли руки воплотить всё это дело в натуре. Всё собрал по схеме Родиона. Сначала залил тестовый blink-скетч — всё пучком, компиляция прошла, диодик на плате исправно замигал. А вот дальше дело, увы, не продвинулось. При попытках загрузить скетч Родиона сначала IDE ругался на отсутствие библиотеки экрана. Загрузил. Теперь компиляция проходит успешно, программа в девайс загружается, но… Ничего не происходит. Вообще ничего.

Успешно загружаю скетч, затем выдёргиваю USB, вставляю снова. Загорается подсветка экрана, на плате пару-тройку секунд моргает светодиод "L", плата определяется в винде и программе IDE. На этом всё. "L" перестаёт моргать, светится только диод питания. На экранчик так ничего и не выводится, диоды приёма/передачи также молчат. Для верности отключал оптодатчики — тот же эффект. Правильность подсоединения мониторчика проверил, перемычка также на месте.
Пните, пожалуйста, в нужном направлении.



Комментарии 28
Привет. Прежде всего, есть онлайн ардуйно симулятор. Пробуй там все ( скетч твой) а потом делать на стенде / колене. Дешевле будет и там в ошибке разберешся
так ссылка на скетч как раз и ведет на симулятор. В котором все работает.
ps Был в отпуске без доступа к инету, "подключиться " к решению не смог. Но очень рад, что коллективный разум помог в решении.
Как я объясняю студентам — подключили модуль, подключили библиотеку, залейте скетч из примеров, который гарантированно рабочий. И убедитесь, что всё работает на тестовом скетче. Отсюда идем по картинке. загружаем скетч, убеждаемся, что дисплей работает. Если нет — значит проблема либо в подключении, либо не правильный адрес дисплея. Далее разбираемся и пока на тестовом скетче не заработает ничего другое не заливаем.
p.s. естественно под свой дисплей поправим скетч.
#include <wire.h>
#include <liquidcrystal_I2C.h>
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
lcd.init();
// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Hello, world!");
}
void loop()
{
}
Тест зафурычил!
Отсюда вывод — мы исключили не правильность адреса и подключения, а так же выяснили, что дисплей работает.
А затем смотрим и видим- в тестовом скетче подключено 2 библиотеки:
#include <wire.h>
#include <liquidcrystal_I2C.h>
а в вашем скетче нет wire, которая и отвечает за I2C
Логично. :) Значит, где-то ошибка в скетче?
так добавь первой строчкой #include <wire.h>
p.s. сайт по кой-то фиг заглавные буквы на прописные меняет.
Пиши wire.h с большой буквы
Есть! Премного благодарен!
mig76
так добавь первой строчкой #include <wire.h>
p.s. сайт по кой-то фиг заглавные буквы на прописные меняет.
Пиши wire.h с большой буквы
К сожалению, тесты показали, что приведённая мной схема на практике всё равно не работает. Без датчиков с экраном всё в порядке, приветствие высвечивает. Но с датчиками схема толком не работает. Полагаю, проблема в том, что на схеме участвуют обычные механические кнопки-замыкатели, а в моём случае это фотоэлементы, имеющие какую-никакую свою логику в виде компаратора. Поэтому, на деле привести взаимную работу двух (и даже одного) оптодатчиков, подключенных к Ардуине с текущим скетчем к какому-либо вменяемому результату мне не удалось. Мониторчик постоянно показывает какие-то рандомные значения, да и в целом я вижу, что программа выполняется не так, как прописано. Например, как только подключаешь эти датчики, приветствия на экране уже нет, он сразу начинает мерцать, будто отсчёт уже запущен. Ну и перекрытия оптоэлементов во всех перепробованных мной последовательностях и алгоритмах не дают результата — в ответ на экране появляются какие-то бессвязные рандомные значения. К сожалению, человек, нарисовавший схемку, уже 4 дня как не на связи, поэтому, буду искать примеры схем с этими датчиками — может, к чему приду.
Это уже другой вопрос. Задача была "завести" экранчик. Эта задача выполнена.
Всё верно. Уже отметил в названии темы.
Laburnum
К сожалению, тесты показали, что приведённая мной схема на практике всё равно не работает. Без датчиков с экраном всё в порядке, приветствие высвечивает. Но с датчиками схема толком не работает. Полагаю, проблема в том, что на схеме участвуют обычные механические кнопки-замыкатели, а в моём случае это фотоэлементы, имеющие какую-никакую свою логику в виде компаратора. Поэтому, на деле привести взаимную работу двух (и даже одного) оптодатчиков, подключенных к Ардуине с текущим скетчем к какому-либо вменяемому результату мне не удалось. Мониторчик постоянно показывает какие-то рандомные значения, да и в целом я вижу, что программа выполняется не так, как прописано. Например, как только подключаешь эти датчики, приветствия на экране уже нет, он сразу начинает мерцать, будто отсчёт уже запущен. Ну и перекрытия оптоэлементов во всех перепробованных мной последовательностях и алгоритмах не дают результата — в ответ на экране появляются какие-то бессвязные рандомные значения. К сожалению, человек, нарисовавший схемку, уже 4 дня как не на связи, поэтому, буду искать примеры схем с этими датчиками — может, к чему приду.
Ну так замени датчики механическими кнопками, тогда поймëшь, алгоритм или датчики работают не так, как задумано. Бегло посмотрев на скетч, фото датчика и фото подключения кнопок, могу предположить, что с кнопками в симуляторе работает по тому, что кнопкой ты меняешь плюс 5 вольт на входах на ноль вольт. а датчики у тебя аналоговые, они при срабатывании выдают плюс 5, а если нет срабатывания, то ноль не выдают, нужна "подтяжка" входов к нулю вольт резисторами.
Уже решил, но всё равно спасибо. Проблема была действительно в резюках. Срезал их с "плюсов" к датчикам — и всё чудесно заработало.
Laburnum
Логично. :) Значит, где-то ошибка в скетче?
Добавить вверху
#include <wire.h>
Завелось, спасибо большое!
Согласно схеме подключение дисплея происходит по шине i2c, и теперь нужно еще и прописать адрес по которому ьудет происходит обмен даными.
Но для начала нужно выяснить адрес дисплея
Как узнать адрес дисплея это отдельная история, но информации валом в сети. Как и сам саетч распознания адреса
LiquidCrystal_I2C lcd(0x27, 16, 2);
вот эта строка может выглядеть немного иначе
посмотри описание к дисплею
либо контрастность покрути :)
Контрастность подкрутил. Оказывается, экран не пустой — там целых 16 квадратиков горят. :)
Описание с Али вот: "LCD1602 I2C Display Module Blue Green Screen 5V PCF8574 IIC Adapter Llate for Arduino"
-------------------------------------------------------
aliexpress.ru/item/196712…&sku_id=12000026259554522
Попробуй 10ю строку закомментировать и дописать такую
LiquidCrystal_I2C lcd(0x38, 16, 2);
Закомментировать — это как? Вы извините за дебильные вопросы, просто этот мини-проект для меня — исключительно прикладной, с Ардуиной (и вообще программированием) никогда не работал и, вероятно, не буду.
//LiquidCrystal_I2C lcd(0x38, 16, 2);
Две косые
Сделал. Ничего не изменилось. Сейчас попробую скачать скетч для установления адреса.
Попробуй эксемпл загрузить с библиотеки
Так не бывает, это самый простой дисплей.
Только неправильное подключение может так себя проявить.
Тестовый скетч монитора заработал (27-й адрес). Следовательно, где-то ошибка в самом скетче моего проекта?
Скорее всего да
Щас гляну, скетч полностью скопирован по ссылке?
Да, я ничего не менял.
Спасибо большое!
Адрес дисплея правильно прописан?
К сожалению, я не понимаю, что вы говорите. :)