#1 2023-12-01 17:30:40

linaya
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 2

Проблема з #include <OneWire.h>

Привіт! Маю проблему, яку вже не можу вирішити пів дня і все перерила - не знаходить бібліотеки OneWire, DallasTemperature. Код в мене у Visual Studio Code, бібілотеки встановлювала у Arduino IDE, та вони там відображаються. Шлях до бібліотек я вставила у файл c_cpp_properties.json:

{
    "configurations": [
      {
        "name": "vscode_avr_c_properties",
        "includePath": [
          "${workspaceFolder}/**",
          "/usr/lib/avr/include",
          "/home/ubuntu/Arduino/libraries/**"
        ],
        "defines": [
          "__AVR_ATmega328P__"
        ],
        "cStandard": "c11",
        "intelliSenseMode": "gcc-x64",
        "compilerPath": "avr-gcc"
      }
    ],
    "version": 4
  }

Шлях я копіювала з властивостей:
Шлях ліби
Скрін самої помилки:
Скрін помилки у VS Code
Також залишу сам код(чи працюючий він - не знаю, оскільки навіть затестити не можу):

#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>

// Data wire is plugged into pin 2 on the Arduino
#define ONE_WIRE_BUS 2

// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature sensor 
DallasTemperature sensors(&oneWire);

// Initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup(void)
{
  // start serial port
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library Demo");

  // Start up the library
  sensors.begin();
  
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
}

void loop(void)
{ 
  // call sensors.requestTemperatures() to issue a global temperature
  // request to all devices on the bus
  sensors.requestTemperatures(); // Send the command to get temperature readings
  
  // print the first sensor temperature in Celsius
  lcd.setCursor(0, 0);
  lcd.print("Temp 1: ");
  lcd.print(sensors.getTempCByIndex(0));
  
  // print the second sensor temperature in Celsius
  lcd.setCursor(0, 1);
  lcd.print("Temp 2: ");
  lcd.print(sensors.getTempCByIndex(1));
  
  delay(2000); // Wait for 2 seconds before updating the temperature readings
}

Якщо буде потрібна ще якась інформація - пишіть. Дуже надіюсь на вашу допомогу, думаю тут є прошарені люди чи ті, хто зтикався з подібним. Дякую!

Неактивний

#2 2023-12-01 20:34:46

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 407

Re: Проблема з #include <OneWire.h>

Пишуть, що потрібна ось така приблуда, Ви її встановлювали? Нажаль, більше тут нічим не допоможу, не користуюсь IDE.

Натомість, якщо Ви під Linux, можу порадити arduino-mk. В каталог кладете скетч разом з файлом Makefile такого змісту:

ARDUINO_DIR=/home/honey/Arduino/arduino-1.8.19
ARDMK_DIR=/home/honey/Arduino/Arduino-Makefile
PYTHON_CMD=python
ARDUINO_LIBS = OneWire DS2450
BOARD_TAG = nano
BOARD_SUB = atmega328
include $(ARDMK_DIR)/Arduino.mk

в каталозі виконуєте команду make і воно компілює в готовий .hex
ARDUINO_DIR і ARDMK_DIR - каталоги, в які розпаковані архіви з Arduino IDE і arduino-mk відповідно, просто розпаковані, встановлювати нічого не потрібно.

Неактивний

#3 2023-12-02 03:51:09

linaya
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 2

Re: Проблема з #include <OneWire.h>

Honey пише:

Пишуть, що потрібна ось така приблуда, Ви її встановлювали? Нажаль, більше тут нічим не допоможу, не користуюсь IDE.

Натомість, якщо Ви під Linux, можу порадити arduino-mk. В каталог кладете скетч разом з файлом Makefile такого змісту:

ARDUINO_DIR=/home/honey/Arduino/arduino-1.8.19
ARDMK_DIR=/home/honey/Arduino/Arduino-Makefile
PYTHON_CMD=python
ARDUINO_LIBS = OneWire DS2450
BOARD_TAG = nano
BOARD_SUB = atmega328
include $(ARDMK_DIR)/Arduino.mk

в каталозі виконуєте команду make і воно компілює в готовий .hex
ARDUINO_DIR і ARDMK_DIR - каталоги, в які розпаковані архіви з Arduino IDE і arduino-mk відповідно, просто розпаковані, встановлювати нічого не потрібно.

Встановила розширення Arduino, використала команду Arduino: Libraries Manage, - бліотеки встановлені, перепробувала версії, оновила до останніх - всеодно не працюють інклуди. Доречі, коли ставлю галочку біля "Only show libraries supported by the current board", то бібліотеки не відображаються(не знаю, чи це взагалі на щось впливає). Ось мій код Makefile:

# Назва проекту
PROJECT_NAME = blink
# Модель мікроконтролера
MCU = atmega168p
# Частота тактового генератора
F_CPU = 16000000UL
# Порт для програмування
UPLOAD_PORT=/dev/ttyUSB0
# Шридкість передачі даних [19200 -(nano atmega168p), 57600 -(nano atmega328p), 115200 -(uno)]
UPLOAD_PORT_BAUD=19200

# Sources files needed for building the application 
#SRC = $(wildcard *.c)
SRC = main.c
SRC +=

# The headers files needed for building the application
INCLUDE = -I. 
INCLUDE +=

#--------------------------------------------------------------
PROJECT_NAME := $(strip $(PROJECT_NAME))
THIS_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST))))

#OBJS:=$(SRC: .c=.o)
OBJS:= $(addsuffix .o,$(basename $(SRC)))
OBJS:= $(addprefix build/,$(OBJS))

CC = avr-gcc
OBJCOPY = avr-objcopy
AVRDUDE = avrdude
AVRDUDE_CONF = /etc/avrdude.conf
TARGET_DIR = build
RM = rm -rf

CFLAGS =-Os
CFLAGS +=-Wall
CFLAGS +=-fpack-struct
CFLAGS +=-fshort-enums
CFLAGS +=-ffunction-sections
CFLAGS +=-fdata-sections 
CFLAGS +=-std=gnu99
CFLAGS +=-funsigned-char
CFLAGS +=-funsigned-bitfields

.PHONY: all

all: $(TARGET_DIR) clean build/$(PROJECT_NAME).hex sizedummy

build/$(PROJECT_NAME).hex: build/$(PROJECT_NAME).elf
 @echo Create exec file $@
 @$(OBJCOPY) -O ihex -R .eeprom $< $@
 @echo BUILD SUCCESS!
 
build/$(PROJECT_NAME).elf: $(OBJS) 
 @echo Building target: $@
 @$(CC) -Os -mmcu=$(MCU) -o $@ $^

build/%.o: %.c
 @echo Compile file: $<
 @$(CC) $(CFLAGS) -mmcu=$(MCU) -DF_CPU=$(F_CPU) -o $@ -c $<

$(TARGET_DIR):
 mkdir $(TARGET_DIR)
 
.PHONY: clean sizedummy serial

sizedummy:
 @echo
 @avr-size --format=avr --mcu=$(MCU) build/$(PROJECT_NAME).elf
 
flash:
 @$(AVRDUDE) -C$(AVRDUDE_CONF) -F -v -p$(MCU) -carduino -P$(UPLOAD_PORT) -b$(UPLOAD_PORT_BAUD) -D -Uflash:w:build/$(PROJECT_NAME).hex:i

clean:
 @$(RM) build/*.o build/$(PROJECT_NAME).elf build/$(PROJECT_NAME).hex
 
serial:
 python -m serial.tools.miniterm $(UPLOAD_PORT) 115200

Можливо тут щось змінити потрібно, я не знаю. Але шлях до бібліотек я вставляла в c_cpp_properties.json, який я скинула вище  sad

Неактивний

#4 2023-12-02 15:38:49

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 407

Re: Проблема з #include <OneWire.h>

Яка Ваша мета? Скомпілювати ардуіно-скетч під лінуксом, щоб прошивка запрацювала на м/к, а засіб значення не має (тоді можу допомогти з Arduino IDE + arduino-mk), чи принципово в віжуал студіо (тоді чекайте, може хтось інший допоможе).

Неактивний

#5 2023-12-02 20:19:51

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 77

Re: Проблема з #include <OneWire.h>

linaya пише:

шлях до бібліотек я вставляла в c_cpp_properties.json, який я скинула вище

Налаштування в c_cpp_properties.json впливають на збірку вбудованими в VSCode засобами та на IntelliSense. На збірку проекту зі стороннім Makefile вони не впливають.

Ваш Makefile не підходить для збірки ардуіно-скетчів. Як мінімум, він компілює проект на C, а скетчі пишуться на C++. Проблему з #include <OneWire.h> можна вирішити, додавши "INCLUDE += -I<шлях_до_хідера>". Але це вам не допоможе, тому що бібліотеку потрібно ще теж скомпілювати і прилінкувати. В принципі, і ваш Makefile можна адаптувати для компіляції C++, компіляції бібліотеки і лінковки з нею. Але простіше буде, як порадили вище, взяти готове рішення у вигляді arduino-mk.

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму