Skocz do zawartości
Antosik

Nie potrafię zaleźć modułu radiowego z biblioteką w C

Pomocna odpowiedź

(edytowany)

Jak dodaje np. :

include <nazwa-pliku.h>

Do pliku głównego to kompilator automatycznie kompiluje oba pliki tj. nazwa-pliku.h oraz nazwa-pliku.cpp

Jak będę w domu to spróbuję skompilować jakieś inne biblioteki np. od czujnika wilgotności (bo mam gdzieś jakiś) i zobaczę czy zadziała. Jeśli tak to znaczy, że te Biblioteki HC12 mają jakiś błąd.

Edytowano przez Antosik

Udostępnij ten post


Link to post
Share on other sites

1.Myślę,że musisz  zainstalować biblioteki .Najnowsza wersja Arduino jest pozbawiona bardzo wielu bibliotek.Wejdź w zakładkę  narzędzia ->zarządzaj bibliotekami i zainstaluj biblioteki odpowiedzialne za komunikację ale najpierw wpisz adresy dodatkowe w zakładce preferencje.Te adresy znajdziesz w moim artykule na temat 3 osiowej maszyny  cnc w dziale artykuły użytkowników.

2.Geometria Euklidesowa to przestrzeń  2 wymiarowa i przez lata w elektronice dominowała.Platforma Arduino  preferuje przestrzeń 3 wymiarową.Nie wiem ile masz miejsca w kierunku osi"z"  bo jeśli masz ze dwa cm to masz miejsce na drugą płytkę.

3. Zadaj sobie pytanie skąd wezmę rezonator kwarcowy w wersji SMD taki jaki jest w arduino nano.

Diabeł tkwi w szczegółach i pytań jest dużo na które musisz sobie odpowiedzieć.

Udostępnij ten post


Link to post
Share on other sites

@szymonw kolego, nie mając tej nie potrzebnej elektroniki Arduino mogę sobie 3 zwykłe rezonatory przylutować. Nie tego dotyczył ten temat z tego co pamiętam. Poza tym nigdy nie napisałem, że korzystam z zewnętrznego kwarcu. 

Udostępnij ten post


Link to post
Share on other sites
1 godzinę temu, Antosik napisał:

W pliku Makefile podajesz ścieżkę do folderu z bibliotekami wewnętrznymi (nawiasy trójkątne) i zewnętrznymi (cudzysłowy). Te pierwsze są zazwyczaj gdzieś w systemie lub kompilatorze, a te drugie to są biblioteki, które są dodane tylko do danego projektu

Nie chcę abyś myślał że się wywyższam... ale jakieś 30 lat się bawię w C/C++ i nie musisz mi tłumaczyć jak działa kompilator.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

@ethanak W porządku chcesz mi pomóc i to rozumiem. Chodziło mi tylko o to, że pliki .cpp powinny się kompilować, bo pliki .c też się komplikowały.  Problem się pojawił po dodaniu bibliotek w języku C++. W makefile oczywiście zmieniłem kompilator na AVR-G++. 

/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `digitalWrite'

Czy ten błąd może oznaczać, że to problem z biblioteką HC12 czy powód może być inny?

Edytowano przez Antosik

Udostępnij ten post


Link to post
Share on other sites

Wiesz - właśnie po to jest arduino-builder, żeby przeleciał rekurencyjnie przez wszystkie pliki, skompilował źródła i zlinkował z resztą. Przy okazji - skompilowane pliki bibliotek trzyma w cache.

Taki krótki przykład makefile z pewnego projektu:

program: *.ino *.cpp *.h
	mkdir -p build
	mkdir -p cache
	arduino-builder <tu jakieś dziesięć linijek parametrów>
    touch program

flash: program
      killall -USR2 gtkterm
      avrdude <i trochę mniej parametrów>
      killall -USR1 gtkterm
      

 

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Tak wygląda mój Makefile:

# simple AVR Makefile
#
# written by michael cousins (http://github.com/mcous)
# released to the public domain
# Makefile
#
# targets:
#   all:    compiles the source code
#   test:   tests the isp connection to the mcu
#   flash:  writes compiled hex file to the mcu's flash memory
#   fuse:   writes the fuse bytes to the MCU
#   disasm: disassembles the code for debugging
#   clean:  removes all .hex, .elf, and .o files in the source code and library directories
# parameters (change this stuff accordingly)
#port
PORT=$(shell pavr2cmd --prog-port)
# project name
PRJ = main
# avr mcu
MCU = atmega328p
# mcu clock frequency
CLK = 8000000
# avr programmer (and port if necessary)
# e.g. PRG = usbtiny -or- PRG = arduino -P /dev/tty.usbmodem411
PRG = stk500v2
# fuse values for avr: low, high, and extended
# these values are from an Arduino Uno (ATMega328P)
# see http://www.engbedded.com/fusecalc/ for other MCUs and options
LFU = 0x62
HFU = 0xD9
EFU = 0xFF
# program source files (not including external libraries)
SRC = $(PRJ).c
# where to look for external libraries (consisting of .c/.cpp files and .h files)
# e.g. EXT = ../../EyeToSee ../../YouSART
EXT = include/
#################################################################################################
# \/ stuff nobody needs to worry about until such time that worrying about it is appropriate \/ #
#################################################################################################
# include path
INCLUDE := $(foreach dir, $(EXT), -I$(dir))
# c flags
CFLAGS    = -g -Wall -mcall-prologues -Os -DF_CPU=$(CLK) -mmcu=$(MCU) $(INCLUDE)
# any aditional flags for c++
CPPFLAGS =
# executables
AVRDUDE = avrdude -c $(PRG) -p $(MCU) -P "$(PORT)"
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE    = avr-size --format=avr --mcu=$(MCU)
CC      = avr-g++
# generate list of objects
CFILES    = $(filter %.c, $(SRC))
EXTC     := $(foreach dir, $(EXT), $(wildcard $(dir)/*.c))
CPPFILES  = $(filter %.cpp, $(SRC))
EXTCPP   := $(foreach dir, $(EXT), $(wildcard $(dir)/*.cpp))
OBJ       = $(CFILES:.c=.o) $(EXTC:.c=.o) $(CPPFILES:.cpp=.o) $(EXTCPP:.cpp=.o)
# user targets
# compile all files
all: $(PRJ).hex
# test programmer connectivity
test:
	$(AVRDUDE) -v
# flash program to mcu
flash: all
	$(AVRDUDE) -U flash:w:$(PRJ).hex:i
# write fuses to mcu
fuse:
	$(AVRDUDE) -U lfuse:w:$(LFU):m -U hfuse:w:$(HFU):m -U efuse:w:$(EFU):m
# generate disassembly files for debugging
disasm: $(PRJ).elf
	$(OBJDUMP) -d $(PRJ).elf
# remove compiled files
clean:
	rm -f *.hex *.elf *.o
	$(foreach dir, $(EXT), rm -f $(dir)/*.o;)
# other targets
# objects from c files
.c.o:
	$(CC) $(CFLAGS) -c $< -o $@
# objects from c++ files
.cpp.o:
	$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
# elf file
$(PRJ).elf: $(OBJ)
	$(CC) $(CFLAGS) -o $(PRJ).elf $(OBJ)
# hex file
$(PRJ).hex: $(PRJ).elf
	rm -f $(PRJ).hex
	$(OBJCOPY) -j .text -j .data -O ihex $(PRJ).elf $(PRJ).hex
	$(SIZE) $(PRJ).elf

A po co mi Arduino builder skoro nie mam arduino? Mam kod w cpp i jest błąd przy kompilowaniu, używam AVR-G+ do kompilowania. 

Edytowano przez Antosik

Udostępnij ten post


Link to post
Share on other sites
2 godziny temu, Antosik napisał:

A po co mi Arduino builder skoro nie mam arduino? Mam kod w cpp i jest błąd przy kompilowaniu, używam AVR-G+ do kompilowania. 

A jak myślisz czego używa builder do kompilowania? Jeśli używasz bibliotek Arduino i core Arduino to chyba naturalne jest, że użyjesz buildera aby podać właściwe parametry dla g++. Używałem tego czegoś z powodzeniem nie tylko do Arduino (tak naprawdę Pro Mini to atmega, kwarc i wyprowadzone piny czyli praktycznie to samo co u Ciebie), ale do ESP czy nawet do małego ATtiny13. A raczej trudno nazwać gołego ATtiny mianem "Arduino".

Masz kod w cpp, ale linker się pruje bo nie podałeś mu wszystkich plików. Może jednak zamiast teoretyzować spróbujesz coś skompilować używając IDE? Może wtedy zobaczysz, co on robi a czego Ty nie robisz.

Zresztą - rób jak chcesz.

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...