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
(edytowany)

Poczytaj o operacjach bitowych, strukturach i polach bitowych struktur. W radio.write() wysyłasz np. strukturę: 2 bajty nagłówka + 1 bajt sumy (np. crc8) + 3 bajty pozycji (0-255; u ciebie 0-180), co daje 6-bajtową strukturę (ramkę) danych. Po stronie odbiornika rzutujesz otrzymane dane pakietu na tą strukturę, w łatwy sposób "wyłuskujesz" poszczególne zmienne za pomocą pól bitowych struktury, sprawdzasz nagłówek i sumę, na tej postawie akceptujesz lub odrzucasz wartości. Max rozmiar danych pojedynczego pakietu dla nrf24l01 to bodaj 32 bajty, więc masz jeszcze spory zapas na dodatkowe wartości, stan przycisków, itp.

Edytowano przez orb777

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
(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ć.

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...