Skocz do zawartości

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


Antosik

Pomocna odpowiedź

Cześć. Potrzebuję waszej pomocy w poszukiwaniach. Szukam modułu radiowego dalekiego zasięgu do komunikacji między dwoma mikro kontrolerami Atmega328-PU. Problem polega na tym, że do wszystkich modułów biblioteki są pisane w C++ dla Arduino, a ja używam samych AVR-ów i potrzebuję biblioteki w języku C. Dużych paczek danych nie będę wysyłać więc na przepustowości mi nie zależy, za to zasięg musi być jak największy (1000m+), no i żeby moduły były proste w obsłudze. Całość ma służyć do zdalnego sterowania pojazdem.

Link do komentarza
Share on other sites

Jakiś czas temu komuś doradziłem na tym forum w podobnej sprawie.Moduł HC12.Producent twierdzi,że 1,8km.Dołączyłem plik konfiguracyjny hc12 config.exe .Idź do tematu : Moduł radiowy dla Arduino - jaki wybrać? Poczytaj  . Z moich doświadczeń  wynika,że działa wybornie.Opis HC12 znajdziesz w necie.O antenach też znajdziesz jakiś pliczek.

Link do komentarza
Share on other sites

Oczywiście zdaję sobie sprawę, że rzeczywisty zasięg jest mniejszy jednak i tak jest to 10X więcej niż najtańsze układy. Budżet do 100 zł za sztukę o ile nie będę musiał użyć konwertera 5V na 3.3V, ponieważ uC zasilam napięciem 5V co może uszkodzić niektóre moduły. Najbardziej podobają mi się układy: "HC-12 SI4463", mają dużo dobrych opinii, są niedrogie, zasięg się zgadza i zasilanie są napięciem 5V. Jednak mają biblioteki tylko w C++ dla Arduino. Czy mogę do C dołączyć biblioteki C++? I czy AVR-GCC to skompiluje?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Oto przykładowy programik do obsługi  modułu HC12.

#include <SoftwareSerial.h>
SoftwareSerial HC12(10, 11); //SRX-D10, STX-D11 Pins of NANO
void setup()
{
  Serial.begin(9600);             // Hardware Serial port to computer
  HC12.begin(9600);               // Software Serial port to HC12
}

void loop()
{
  while (HC12.available())          // If HC-12 has data
  {        
    Serial.write(HC12.read());      // Send the data to Serial Monitor
  }
}

void serialEvent()                  //only for Hard Serail Port
{
  while (Serial.available())        //data from Serial Monitor-1
  {      // If Serial monitor has data
    HC12.write(Serial.read());      // Send that data to HC-12 via Software UART Port
  }
}

Musisz skonfigurować nowy  UART oparty na  bibliotece softwareSerial.h. Ten który jest na wyposażeniu to hardware i nie zadziała.Zamiast użytych portów D10,D11 możesz użyć  innych portów.Nie bój się Arduino nie gryzie.HC12 w wersji 5V kupisz w abc-rc o ile mają na stanie.Trochę poćwiczysz i wszystko będzie jasne.Nie zapomnij ,że połączenie UART arduino HC12 to musi wyglądać tak Rx arduino na Tx  HC12, Tx arduino na Rx Hc12.Vcc-Vcc Gnd-Gnd.Gdyby jakiejś biblioteki brakowało należy ją zinstalwać.W razie kłopotów rozwiązanie znajdziesz w kursie arduino jak to się robi.

Link do komentarza
Share on other sites

@szymonw Na Linuxie nie uruchomię "config.exe", a kod który napisałeś jest dla Arduino. Dlaczego miałbym się bać arduino skoro nie boję się AVR-ów? Myślę, że powinieneś sprawdzić czym to się różni. Nie używam Arduino ze względu na rozmiar i cenę. Arduino ma za dużo elektroniki, która nie jest mi potrzebna w projekcie. Jak skończę prototyp, to mogę sobie kupić za 4 zł Atmegę w obudowie SMD, zaprogramować i przylutować do PCB.

Link do komentarza
Share on other sites

14 godzin temu, Antosik napisał:

kod który napisałeś jest dla Arduino

W kwestii formalnej: kod używa bibliotek Arduino i jest przeznaczony do skompilowania przez Arduino IDE - co wcale nie oznacza że nie można go uruchomić na gołej atmedze czy nawet ESP.

Tak z ciekawości: co Ci stoi na przeszkodzie aby programować ATmegę w C++? A nawet jeśli C++ gryzie, dziabie i bodzie - to przepisanie biblioteki na C nie powinno być jakimś strasznym problemem.

14 godzin temu, Antosik napisał:

Nie używam Arduino ze względu na rozmiar i cenę.

Pro Mini też jest duży i drogi (ok. 10 PLN)?

14 godzin temu, Antosik napisał:

Na Linuxie nie uruchomię "config.exe",

Pytam bo nie wiem: pod Wine też?

Link do komentarza
Share on other sites

Cóż, OS Windows daje zdecydowanie większe możliwości niż Linux bo jest zdecydowanie więcej wartościowego oprogramowania,które jest dostępne.Kiedyś przez chwilę miałem Linuxa  ale wywaliłem od kiedy pojawił się windows xp.Dzisaj mam windows 10.Zaletą jest między innymi to,że można zainstalować darmowe Visual Studio.Arduino w swej wersji początkowej obsługiwało tylko AVR-y poprzez port UART do którego doczepiony jest konwerter USB na UART.Platforma  Arduino podczas kompilacji wytwarza wszystkie pliki wsadowe,które są zapisywane na dysku.Trzeba tylko wiedzieć gdzie.Pierwsze co trzeba to wejść do preferencji i zaznaczyć w linijce "pokaż szczegółowe informacje podczas  kompilacji.Po skompilowaniu programu  ścieżka,którą można odnaleźć  u dołu ekranu(te komunikaty na czarnym tle) jest następująca dysk C ->użytkownicy->nazwa użytkownika->AppData->Local->Temp->arduino_build_xxxxxx->nazwa projektu.ino.hex.Tak wygląda to dla Windowsa.Zapewne podobnie wygląda to dla Linuxa.Mając plik wsadowy możesz pokusić się o zaprogramowanie kości używając programatora.O wiele wygodniejsze jest użycie płytki arduino np. nano lub pro mini.Programator jest już w kości a cena to jakieś 12zł no chyba,że kolega planuje jakąś większą produkcję.Nie spotkałem ATmegi 328 w cenie 4zł brutto.To co jest na rynku to jakieś 4,24 w nettcie przy 100 i więcej szt.Arduino IDE to przyzwoite oprogramowanie bo jeśli jest reprezentowana liczba "e "   to znaczy,że można zapisać dowolną funkcję.Trzeba się tylko zaznajomić z tym co oferuje Arduino.Ponadto Arduino oferuje inne płytki,które nie są oparte na ATmedze 328.Arduino to naprawdę niezły kombajn.I na koniec jeszcze jedno cena licencji na windows 10 to ok.180zł.Wydaje się ,że nie przewraca budżetu.

Edytowano przez szymonw
Link do komentarza
Share on other sites

9 minut temu, szymonw napisał:

OS Windows daje zdecydowanie większe możliwości niż Linux bo jest zdecydowanie więcej wartościowego oprogramowania,które jest dostępne.

Daruj sobie tego typu teksty bo jeszcze ktoś w to uwierzy.

 

12 minut temu, szymonw napisał:

Kiedyś przez chwilę miałem Linuxa  ale wywaliłem od kiedy pojawił się windows xp

Czyli jakieś dwadzieścia lat temu, tak?

  • Lubię! 2
Link do komentarza
Share on other sites

(edytowany)
12 godzin temu, ethanak napisał:

Pro Mini też jest duży i drogi (ok. 10 PLN)?

Oczywiście, że jest za duży, cały projekt musi być mniej/więcej wielkości arduino nano, a przecież mam jeszcze swoją elektronikę. Mam nadzieję, że ten temat już wyczerpałem.

12 godzin temu, ethanak napisał:

Tak z ciekawości: co Ci stoi na przeszkodzie aby programować ATmegę w C++? A nawet jeśli C++ gryzie, dziabie i bodzie - to przepisanie biblioteki na C nie powinno być jakimś strasznym problemem?

Do wczoraj nie wiedziałem, że mogę programować w C++ i użyć bibliotek Arduino. To wydaje mi się najlepszym pomysłem, jednak pierwsze próby kompilacji skończyło się błędami. Myślę, że to albo błąd w bibliotece, albo błąd w Makefile.

@ethanak czy mógłbyś mi z tym pomóc?

To jest to co wywala konsola przy próbie kompilacji:

ntosik@kali:~/Dokumenty/Projekty/asd$ make
avr-g++ -g -Wall -mcall-prologues -Os -DF_CPU=8000000 -mmcu=atmega328p  -Iinclude/  -c main.cpp -o main.o
In file included from main.cpp:7:0:
include/HC12.h:22:21: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11
     const int len = 60;
                     ^
main.cpp: In function ‘int main()’:
main.cpp:22:23: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
     hc12.send("Hello!");            // Send message to remote HC-12. Newline is added automatically.
                       ^
avr-g++ -g -Wall -mcall-prologues -Os -DF_CPU=8000000 -mmcu=atmega328p  -Iinclude/ -o main.elf main.o   include//HC12.o
main.o: In function `_GLOBAL__sub_D_HC12Serial':
/home/antosik/Dokumenty/Projekty/asd/main.cpp:(.text.startup+0xa): undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/main.cpp:(.text.startup+0xc): undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/main.cpp:(.text.startup+0xe): undefined reference to `HardwareSerial::begin(unsigned long, unsigned char)'
/home/antosik/Dokumenty/Projekty/asd/main.cpp:(.text.startup+0x16): undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/main.cpp:(.text.startup+0x18): undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/main.cpp:(.text.startup+0x1a): undefined reference to `Print::println(char const*)'
/home/antosik/Dokumenty/Projekty/asd/main.cpp:(.text.startup+0x52): undefined reference to `delay'
main.o: In function `_GLOBAL__sub_I_HC12Serial':
/home/antosik/Dokumenty/Projekty/asd/main.cpp:26: undefined reference to `SoftwareSerial::SoftwareSerial(unsigned char, unsigned char, bool)'
main.o: In function `_GLOBAL__sub_D_HC12Serial':
/home/antosik/Dokumenty/Projekty/asd/main.cpp:(.text.exit+0x4): undefined reference to `SoftwareSerial::~SoftwareSerial()'
/tmp/cceg1uFQ.ltrans0.ltrans.o: In function `HC12::send(char*)':
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:34: undefined reference to `Print::print(char const*)'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:35: undefined reference to `delay'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:36: undefined reference to `digitalWrite'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:37: undefined reference to `delay'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:38: undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:38: undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:38: undefined reference to `Print::print(char const*)'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:39: undefined reference to `Print::print(char const*)'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:40: undefined reference to `delay'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:41: undefined reference to `digitalWrite'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:42: undefined reference to `delay'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:45: undefined reference to `Print::println(char const*)'
/tmp/cceg1uFQ.ltrans0.ltrans.o: In function `HC12::begin()':
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:21: undefined reference to `pinMode'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:21: undefined reference to `digitalWrite'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:21: undefined reference to `delay'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:21: undefined reference to `SoftwareSerial::begin(long)'
/tmp/cceg1uFQ.ltrans0.ltrans.o: In function `HC12::loop()':
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `HardwareSerial::available()'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `HardwareSerial::read()'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Print::print(char const*)'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `delay'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `digitalWrite'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `delay'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Print::print(char const*)'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Print::print(char const*)'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `delay'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `digitalWrite'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `delay'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Print::print(char const*)'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `digitalWrite'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `delay'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Print::print(char const*)'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Print::print(char const*)'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `delay'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `digitalWrite'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `delay'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Print::println(char const*)'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Serial'
/home/antosik/Dokumenty/Projekty/asd/include//HC12.cpp:67: undefined reference to `Print::print(char const*)'
collect2: error: ld returned 1 exit status
make: *** [Makefile:100: main.elf] Błąd 1
12 godzin temu, szymonw napisał:

Cóż, OS Windows daje zdecydowanie większe możliwości niż Linux bo jest zdecydowanie więcej wartościowego oprogramowania,które jest dostępne.(...) Zaletą jest między innymi to,że można zainstalować darmowe Visual Studio.

Visual Studio Code jest na niego również dostępny i działa świetnie. Linux sam w sobie jest bardziej wartościowy od Windowsa ale to nie jest tematem tego wątku.

Edytowano przez Antosik
Link do komentarza
Share on other sites

Mam zainstalowane Arduino IDE ale biblioteki przeniosłem sobie z niego do systemowego lib/include/avr (albo jakoś tak, nie pamiętam teraz)(dzięki temu mogę je w wygodny sposób includować) i wygląda na to, że biblioteki Arduino działają poprawnie.

To jest link do bibliotek HC12, które używam. Swój kod oraz zawartość Makefile będę mógł dopiero wstawić po pracy tj. wieczorem.

 

Link do komentarza
Share on other sites

6 minut temu, Antosik napisał:

biblioteki przeniosłem sobie z niego do systemowego lib/include/avr

I pliki *.cpp bibliotek mają się automagicznie skompilować? A skąd Twój make ma wiedzieć które?

Builder Arduino analizuje pliki źródłowe i kompiluje/linkuje właściwe pliki bibliotek. Dlatego piszę, że na razie kompiluj to przy pomocy IDE, choćby po to żeby zobaczyć, co on tam jeszcze mądrego wyprawia oprócz kompilacji Twoich źródeł.

Link do komentarza
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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.