Ввод-вывод с библиотекой Lvgl

Пытаюсь осваивать дисплей с помощью lvgl. Ковыряю пример demo_widgets. Структура проекта довольно запутанная. Файл LvglWidgets.ino содержит включения

#include <lvgl.h>
#include <demos/lv_demos.h>.

И ссылается на файл, который находится в папках самой библиотеки lvgl, Arduino\libraries\lvgl\src\demos\widgets\lv_demo_widgets.c. В этом файле и создается все то, что выводится на экран.
Дисплейный модуль сделан на основе esp32 и у меня он используется только как интерфейс основной платы Arduino Mega. Чтоб выводить информацию на дисплей, мне нужно связать обе платы по Serial или I2C. Допустим, мне нужно написать для esp32 что-то вроде

  if  (Serial.available()>0){
    int val = Serial.parseInt();
    lv_label_set_text_fmt(label1, "%d%C", val);

И вот здесь я запутался с видимостью переменных. В каком файле писать .ino или .c?
Если писать в .ino, он не видит переменные файла .c (label1), extern не помогает, т.к. они не в одной папке. Если поместить файл .ino в папку библиотеки вместе с файлом .c, он видит и заголовочный файл, это приводит к ошибкам. Если писать в .c, он не знает что такое Serial.
Вобщем, большой хелп.
Библиотека https://github.com/lvgl/lv_port_pc_visual_studio

А мы здесь запутались с видимостью Вашего кода.

Вы, видимо так спешили что-то написать, что не прочитали то, что специально для Вас было написано в пустом окне. Прочитайте и оформите код как положено.

И да, кстати, когда говорите о нестандартной библиотеке, указывайте где Вы её брали, чтобы человек мог взять ту же версию той же библиотеки.

Как раз этим занимался.

Ну, что у Вас и где, совершенно непонятно.

extern надо писать в *.h файле.
И, кстати, почему файлы не в одной папке?
Похоже Вы не различаете видимость переменных в языке Си и видимость файлов в Arduino IDE.

Вероятно как раз из-за того, что Вы игнорируете *.h файл. (но это не точно: что, где и как у Вас расположено, и что именно и где Вы пишете, никто кроме Вас не знает)

Вместо *.c файла используйте *.cpp.

К сожалению, не могу придумать, как здесь изобразить структуру файлов.

Вот походу противоречие этих правил мне и мешает.
Пока, кажется - либо все переменные файла .с объявлять в заголовочном файле. Либо - в файле .с создать функцию с чтением serial, объявить ее в заголовочном файле и ссылаться на нее из loop() файла .ino.

А это и не нужно. Нужно лишь у себя навести порядок: чтобы все необходимые файлы лежали либо в папке с проектом, либо в папке используемых библиотек.

Serial - класс, а в Си классов нет, поэтому не получится. Вероятно, Вы не обратили внимания на совет: использовать .cpp вместо .c.

В том то и дело, что, как я говорил, это не мой проект, а я пытаюсь модифицировать пример из библиотеки. Поэтому ни навести порядок, ни изменить расширение вряд ли получится. Так что сейчас файл .с, в котором находятся все переменные интерфейса, находится в папках библиотеки. А файл .ino, в котором исполняется loop(), эти переменные не видит. Тот есть видимость по языку С есть, а по ArduinoIDE нет.

Стоит, видимо, почитать что-то из учебников. В том числе про области видимости переменных. Тогда такие перлы выскакивать не будут

Хоть убей не вижу как первое мешает второму

Что бы эта фраза не означала, я бы ещё проверил, как насчёт видимости по языку Шириивук.

какого из диалектов?

1 лайк

Вот, до чего приятно, сморозишь какую нибудь глупость, и сразу все мэтры подключаются к обсуждению.
Имелось ввиду, что .ino файл запускает .c файл, который расположен в папках библиотеки, но не видит из него переменные.

я канешна не мэтр и не гуру но библиотеки подключают файлы с расширением hpp почему-то и, это работает, я о примерах, правда брал с другого ресурса

Почему бы сразу не писать именно то, что имеется в виду? Зачем тень на плетень наводить?

Куда запускает? Зачем?

И не должен. А как он может видеть, если это другой файл и компилируются они каждый сам по себе.

Так все устроено в этой библиотеке. .ino файл содержит лишь самые общие настройки и практически одинаков для любых проектов. Он запускает .с файл, который расположен в папках библиотеки и в котором и создаётся уже интерфейс проекта. Так сделаны все примеры, которые я сейчас ковыряю. Интерфейс под свои нужды я уже могу сделать. А вот примеров взаимодействия с другой платой нет.

Как то так

Солнце, а ты вообще в курсе, что библиотека под винду?

1 лайк

Эта библиотека запускается в visual studio. Там создаются .с и .h файлы проекта, которые затем формируются в ардуино проект с помощью приложенного там же файла .ino. Структура библиотеки Ардуино совершенно аналогична, мой косяк, я разницы вообще не увидел. Вот ссылка продавца, нашел наконец:
http://pan.jczn1688.com/directlink/1/ESP32%20module/4.3inch_ESP32-4827S043.zip?spm=a2g2l.description-app.0.0.12957beaNEwLOo&file=4.3inch_ESP32-4827S043.zip

Какой восхитительный бред.

1 лайк

Господи, ну вот правда, ну почитайте что-нибудь.

С-файл нельзя запустить, нет такого выражения. Оттого, что Вы несёте что-то невразумительное, Вас невозможно понимать.