#1 Re: Програмування Arduino » Проблема з #include <OneWire.h> » 2023-12-02 03:51:09

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

#2 Програмування Arduino » Проблема з #include <OneWire.h> » 2023-12-01 17:30:40

linaya
відповідей: 4

Привіт! Маю проблему, яку вже не можу вирішити пів дня і все перерила - не знаходить бібліотеки 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
}

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

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