Skocz do zawartości

jak przesłac tablice przez rf24L01


Pomocna odpowiedź

Napisano (edytowany)

Dzien Dobry mam troche naiwne pytanie  jak przesłac tablice danych znaczy cyfr  modułem rf24l01 ??? 
Chciałem zrobić sterownie RC na trzy serwa  ,  ze strony  https://howtomechatronics.com/tutorials/arduino/arduino-wireless-communication-nrf24l01-tutorial/
Ogólnie na tej stronie dalej tam  jest nadajnik i odbiornik  RC ale mi tonie działa.Wiec z pierwszego przykładu chciałem zrobic ogólnie  mam tak ze dwa moduły rf24l01 podpiete do dwoch arduino nano i działa odbieram hello word na porcie szeregowym 
ale czym się różni string  od tablicy  danych ? bo string mi przesyła a jak probuje najprostrzą trzyelementową tablice danych z  wartościmi 0-180 czyli wychyleniem serwa to nie wiem jak to zrobić nie wysyła albo wysyła bzdury prosze o pomoc.
W tym fragmencie kodu 

  const char text[] = "Hello World";
  radio.write(&text, sizeof(text));     //radio write odpowiada za  wysłanie stringa  

//ale przeciez tablica danych nie moze byc const czyli stała bo ja tam bede w tej tablicy zmieniał wartosci 
cały kod 

/////////////////////////////////////
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(7, 8); // CE, CSN

const byte address[6] = "00001";

void setup() {
  radio.begin();
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MIN);
  radio.stopListening();
}

void loop() {
  const char text[] = "Hello World";
  radio.write(&text, sizeof(text));
  delay(1000);
}


/////////////////////////// 
jak to zrobić prosze o pomoc 

Edytowano przez domel1
  • Nie zgadzam się! 1

czy to ten rodział o  operacjach bitowych w ksiazce  zółtej arduino 65 projektów John Boxall?  jak to przeczytam to cos mi sie rozjaśni ?

(edytowany)

@domel1, nie znam tej książki, więc nie powiem. Chodziło mi bardziej o strukturę. Przesyłasz 3 bajty wartości + ewentualnie dodatkowe w celu sprawdzenia integralności pakietu. O polach bitowych wspomniałem ze względu na przyciski, może ci się to przydać w przyszłości, żeby "upakować" wiele stanów w bajcie.

Przykładowy pseudo kod do wysyłania.

struct data {
  uint8_t x, y, z, crc8;
  uint16_t header;
  };

data ster;
ster.header = 0xAABB; // nagłówek jest stały

// pozycja serw
uint8_t a=20, b=90, c=180;

// tu zmieniasz dane, np.
ster.x = a;
ster.y = b;
ster.z = c;
ster.crc8 = crc8(a, b, c); // funkcja generująca sumę dla wartości

// wysyłasz
radio.write(&ster, sizeof(ster));

 

Edytowano przez orb777
  • Lubię! 1
(edytowany)

nie kumam     struct data  to jest   taka jakby  paczka dla kilku zmiennych int ?   a co to jest  data ster ?  to typ danej ?   co to nagłówek ?    moze jest to gdzies opisane w kursie arduino forbot ?

Edytowano przez domel1

nie  rozumiem takich skomplikowanych funkcji , ja tylko kumam to co z tej ksiazki  ....albo inaczej  jesl umiem przesłac string i to mi wychodzi to napisz  czy string to może  byc tez ciag cyfr ? jak te cyfry no .... zdefiniowac tak jak w tablicy czyli odczytac i zapisac ?? 

@domel1, nie wiem, czy kurs forbota gdzieś to opisuje, ale dobrze myślisz. Struktura to taki "pojemnik" na zmienne, ułatwia przesyłanie różnych typów danych w postaci binarnej. Wpisz w goguliego: "c/c++ struktury danych" poczytaj, przyda ci się.

 

16 minut temu, domel1 napisał:

co to jest  data ster ? 

"Ster" jest nazwą "egzemplarza" tej struktury, etykietą. Równie dobrze można zapisać jak poniżej, np. dla trzech grup serw:

struct data {
  uint8_t x, y, z, crc8;
  uint16_t header;
  } ster, ster2, ster3;

 

16 minut temu, domel1 napisał:

co to nagłówek ?

Nagłówek jest przydatny jeżeli chcesz mieć pewność, że odebrany pakiet sterujący jest tym, na którego czeka urządzenie. Dodatkowo suma kontrolna weryfikuje, czy wartości dla serwa są integralne, tzn. czy nie nastąpiło przekłamanie. W końcu dane transmitowane są drogą radiową, a w eterze krążą różne pakiety na wielu częstotliwościach. Arduino przy crc8 nie powinno zamulać.

  • Lubię! 1
1 godzinę temu, domel1 napisał:

nie  rozumiem takich skomplikowanych funkcji , ja tylko kumam to co z tej ksiazki  ....albo inaczej  jesl umiem przesłac string i to mi wychodzi to napisz  czy string to może  byc tez ciag cyfr ? jak te cyfry no .... zdefiniowac tak jak w tablicy czyli odczytac i zapisac ?? 

W swoim kodzie robisz w zasadzie to samo, tylko u ciebie przyjmuje formę tablicy bajtów (znaków), która ma być (const) niezmienna. Struktura także składa się z bajtów. To jest najprostszy sposób przesyłania danych, ponieważ nie jesteś ograniczony do jednego typu. Proponuję doczytać w temacie, potrenować nawet w zwykłym c/c++. Przyda ci się nie raz, tylko z pozoru wygląda na skomplikowane.

W odbiorniku robisz na odwrót. Rzutujesz otrzymane 6 bajtów z powrotem na strukturę i odnosisz się w prosty sposób za pomocą pól. Weryfikujesz nagłówek, jeżeli jest błedny - odrzucasz pakiet. Jeśli ok, sprawdzasz sumę: zgodna - przesyłasz pozycje do serw, niezgodna - pomijasz. W ten sposób oszczędzasz sobie kłopotu z dziwnym zachowaniem serw, kiedy dostaniesz uszkodzone dane.

  • Lubię! 1

@domel1, mam 2 takie moduły, jak je znajdę mogę pokombinować, tyle, że na esp32. Okazuje się, że one same dbają o crc i nawet wysyłają ack (potwierdzenie odbioru), a także mają coś w stylu parowania. W jaki sposób będziesz wprowadzać wartości dla serw?

  • Lubię! 1

Hej na razie  chcialem wlasnie wprowadzac  do tablicy  trzyelementowej  bo to umiem ... ( potem chcialem zrobic z potencjometrów   i do tej tablicy mapowanie)   echhh ja nic nie wiem o crc ack nie wie gdzie o tym doczytac echh 

(edytowany)

@domel1, żyjemy w czasach ułatwiaczy, więc czemu z nich nie skorzystać? Szukasz w gogulasie "nrf24L01 datasheet", a następnie wrzucasz .pdf do ai, w celu wygenerowania szybkiego podsumowania, jeżeli nie chce ci się wertować strona po stronie. Ai czasem lubi ściemniać, więc dajesz do zrozumienia, żeby wypisywało numery stron gdzie te informacje znalazło. Darmowe ai od gogulasa radzi sobie z tym całkiem ok.

Datasheet: nRF24L01-Datasheet.pdf

W kodzie też ci pomoże, wyjaśni krok po kroku. Nie korzystałeś do tej pory? Kiedyś było "wygogluj sobie", teraz jest jeszcze łatwiej. Jeżeli nie popadniesz w myślenie "ai zrób wszystko za mnie, bo mi się nie chce", tylko wykorzystasz jako pomoc dydaktyczną, to przy okazji jeszcze nauczysz się czegoś.

Edytowano przez orb777
  • Lubię! 2

@domel1, ai czasem kręci i wymyśla, dlatego dobrze jest wiedzieć i rozumieć jaki ma być rezultat. Do tego sporo testów. Płatne modele pewnie lepiej radzą sobie z generowaniem kodu, np. @H1M4W4R1 w swoich tematach to pokazuje.

22 minuty temu, orb777 napisał:

Płatne modele pewnie lepiej radzą sobie z generowaniem kodu, np. @H1M4W4R1 w swoich tematach to pokazuje.

Nieco lepiej; najbardziej istotne jest dokładne sformułowanie zadania i dostarczenie AI niezbędnej dokumentacji np. wyprowadzeń modułów. Czasem samo sobie poradzi i poszuka w internecie, ale z reguły lubi stosować założenia (szczególnie Codex/ChatGPT, bo Claude potrafi dopytać o konkretne szczegóły, gdy nie jest czegoś pewien).

  • Lubię! 2
(edytowany)

Ja tam nie wiem z tym AI ...dobra jak w ytm kodzie co zapodałem  wczesniej         

  const char text[] = "Hello World";

zrobie  

const char text[] = " FF,AF,DF,CD";

to bedzie  cały czas jednoelementowa  tablica  zawieracjąca sie pomiedzy tymi       " " ,  czy cały czas  to  bedzie string razem z przecinkami a nie  czteroelmentowa  tablica ?  ?  bo wtedy bym  sobie te wartosci w  hex przesłał  i potem zamienil na dec 

Edytowano przez domel1

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...