директива include для внешних библиотек
Я добавил Adafruit_GFX_Library в свой Windows. Я использовал Arduino IDE, «Инструменты» > «Управление библиотеками» > «Установить».
В настройках местоположение Sketchbook задано как d:\Alex\Hobbies\Electronic\Learning Arduino\Source, поэтому были созданы папки libraries/ и libraries/Adafruit_GFX_Library с файлом Adafruit_GFX.h и всем остальным.
В скетче я могу использовать #include <Adafruit_GFX.h>, и это работает для Arduino IDE.
Проблема связана с Visual Studio Code и расширениями Arduino.
Я добавил "${workspaceFolder}/Source/libraries/Adafruit_GFX_Library"
в список «includePath» файла c_cpp_properties.json.
Это решило проблему с VS Code Intellisense, из-за которой иначе не удавалось найти библиотеку. Хорошо.
Теперь у меня та же проблема («Нет такого файла или каталога»), когда я пытаюсь загрузить (= собрать + записать на плату Arduino), появляется сообщение:
fatal error: Adafruit_GFX.h: No such file or directory
Я попробовал использовать относительный путь:
#include "../libraries/Adafruit_GFX_Library/Adafruit_GFX.h"
но и это не работает (с Intellisense все в порядке):
fatal error: ../libraries/Adafruit_GFX_Library/Adafruit_GFX.h: No such file or directory
Какой путь мне следует использовать?
Я также добавил полный путь в includePath:
"${workspaceFolder}/Source/libraries/Adafruit_BusIO",
"${workspaceFolder}/Source/libraries/Adafruit_GFX_Library",
"${workspaceFolder}/Source/libraries/Adafruit_PCD8544_Nokia_5110_LCD_library",
"d:/Alex/Hobbies/Electronic/Learning Arduino/Source/libraries/Adafruit_BusIO",
"d:/Alex/Hobbies/Electronic/Learning Arduino/Source/libraries/Adafruit_GFX_Library",
"d:/Alex/Hobbies/Electronic/Learning Arduino/Source/libraries/Adafruit_PCD8544_Nokia_5110_LCD_library"
Оба работают... потому что без них Intellisense жалуется, что Adafruit_GFX.h не найден.
При их добавлении он жалуется на Wire.h и SPI.h (недостаточно умен, чтобы заглянуть в папки "src"), поэтому я также добавляю их:
"C:\\Users\\Alex\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\libraries\\Wire\\src",
"C:\\Users\\Alex\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\libraries\\SPI\\src",
и Intellisense работает!
Но не сборка (Adafruit_GFX.h не найден!).
Я попытался сделать два вида include: для Arduino IDE и для VS Code:
#define VS_CODE true // Задайте VS_CODE значение true для совместимости с Visual Studio Code (при сборке)
#if VS_CODE == true
#include "d:/Alex/Hobbies/Electronic/Learning Arduino/Source/libraries/Adafruit_BusIO/Adafruit_I2CDevice.h" // требуется для Adafruit_GFX.h
#include "d:/Alex/Hobbies/Electronic/Learning Arduino/Source/libraries/Adafruit_BusIO/Adafruit_SPIDevice.h" // требуется для Adafruit_GFX.h
#include "d:/Alex/Hobbies/Electronic/Learning Arduino/Source/libraries/Adafruit_GFX_Library/Adafruit_GFX.h" // Включить библиотеку Adafruit GFX
#include "d:/Alex/Hobbies/Electronic/Learning Arduino/Source/libraries/Adafruit_PCD8544_Nokia_5110_LCD_library/Adafruit_PCD8544.h" // Включить библиотеку Adafruit PCD8544 для ЖК-дисплея Nokia 5110
#else // Arduino IDE использует «магические» имена и может самостоятельно определить путь к библиотекам
#include <Adafruit_GFX.h> // Включить библиотеку Adafruit GFX
#include <Adafruit_PCD8544.h> // Включить библиотеку Adafruit PCD8544 для ЖК-дисплея Nokia 5110
#endif
Теперь конструктор VS Code может найти Adafruit_GFX.h, но он содержит эти два «волшебных» include:
#include <Adafruit_I2CDevice.h>
#include <Adafruit_SPIDevice.h>
Итак, теперь ошибка:
.../Adafruit_GFX.h:12:10: fatal error:
Adafruit_I2CDevice.h: No such file or directory
Я также добавил эти два включения в свой набросок:
#if VS_CODE == true
#include "d:/Alex/Hobbies/Electronic/Learning Arduino/Source/libraries/Adafruit_BusIO/Adafruit_I2CDevice.h" // требуется для Adafruit_GFX.h
#include "d:/Alex/Hobbies/Electronic/Learning Arduino/Source/libraries/Adafruit_BusIO/Adafruit_SPIDevice.h" // требуется для Adafruit_GFX.h
но не работает (Adafruit_I2CDevice.h не найден).
Я с трудом понимаю, как это расширение (Arduino Community)... должно работать.
@Alex 75, 👍1
Обсуждение1 ответ
Я перехожу на использование расширения Platform IDE (я отключил расширение Arduino Community Edition, которое использовал).
Я прочитал документацию и смог настроить новый проект и использовать библиотеки максимум за 1 час работы.
Код тот же, что и в Arduino IDE.
#include {A-LIBRARY-HERE} работает нормально после добавления библиотеки в раздел lib_deps файла platformio.ini.
Intellisense, автодополнение кода, сборка и загрузка кажутся проще, чем другие расширения, но не нужно сходить с ума с настройкой проекта, и это расширение кажется лучше организованным и имеет больше функций.
- Как объявить массив переменного размера (глобально)
- Программирование Arduino с использованием Python, а не C/C ++
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Как справиться с rollover millis()?
- Является ли использование malloc() и free() действительно плохой идеей для Arduino?
- Можно ли сделать несколько функций loop() с помощью Arduino Uno?
- Печать string and integer LCD
- устаревшее преобразование из строковой константы в 'char*'
${workspaceFolder}— текущая папка скетча, поэтому путь к каталогу библиотеки указан неверно. Путь "includePath" должен бытьD:/Alex/Hobbies/Electronic/Learning Arduino/Source/lirbaries/**., @hcheungМой проект VS Code содержит папку Source (где я храню эскизы), поэтому я считаю, что я правильно ее использовал. В любом случае, я также добавил полный путь: "${workspaceFolder}/Source/libraries/Adafruit_GFX_Library" И "d:/Alex/Хобби/Электроника/Изучение Arduino/Источник/библиотеки/Adafruit_GFX_Library" Но IntelliSense всё равно работает, а вот сборка — нет (Adafruit_GFX.h не найден). Поэтому, полагаю, сборка вообще не обращается к файлу c_cpp_properties.json. Мне интересно, является ли сборка более «придирчивой» и не любит ли она путь «Изучение Arduino» с пробелом..., @Alex 75
Заменил расширение Arduino Community на расширение PlatformIO IDE и все заработало., @Alex 75
Символ
**после папки библиотеки указывает VSCode на необходимость рекурсивного поиска в папке библиотек. Вы этого не замечаете. В любом случае, если вы можете использовать PlatformIO, то используйте его, так как Microsoft объявила устаревшим расширение VSCode для Arduino, и теперь оно поддерживается несколькими добровольцами в качестве форка сообщества. Ребята., @hcheung