Przesyłanie dwóch parametrów przez RF

Masz problem z Arduino? Tutaj możesz szukać pomocy.
ODPOWIEDZ
svalmont
Majsterkowicz
Posty: 119
Rejestracja: 20 paź 2013, 21:22

Przesyłanie dwóch parametrów przez RF

Post autor: svalmont » 24 sty 2016, 18:37

witam, zastanawiam się czy można przesłać równocześnie dane z dwóch potencjometrów.
Chodzi o to by nadajnik wysyłał je np w formie xxx , yyy a następnie odbiornik rozróżniał dwa zestawy liczby by można je przydzielić do dwóch zmiennych np xxx = pot1 a yyy = pot2

Z góry dzięki za pomoc

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


mgreta36
Majsterkowicz
Posty: 115
Rejestracja: 11 mar 2014, 22:20

Re: Przesyłanie dwóch parametrów przez RF

Post autor: mgreta36 » 25 sty 2016, 01:31

Jasne, ze sie da. :)

szukaj czegos takiego:

typedef struct
{
int xxx;
int yyy;
}
cos;
stiven
Złota rączka
Posty: 1595
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: Przesyłanie dwóch parametrów przez RF

Post autor: stiven » 25 sty 2016, 11:45

mgreta36 nie bardzo, funkcje wysyłająca i odbierająca z biblioteki VirtualWire.h wymagają zmiennej typu unsigned char*, więc nie jesteś w stanie wysłać i odebrać struktury. Tutaj trzeba kombinować, te dwie zmienne "złożyć" do jednej zmiennej unsigned char* w nadajniku a później odpowiednio "rozłożyć" w odbiorniku. Typ unsigned char* to jest inaczej łańcuch znaków (char*), tylko jeszcze dodatkowo jako unsigned. Poszczególne znaki można odczytywać i zapisywać tak samo jak jest przy tablicach.

Kod: Zaznacz cały

  unsigned char* napis;
  
  napis[0] = '1';
  napis[1] = '0';
  napis[2] = '0';
  napis[3] = '0';
W zmiennej napis będzie zapisane 1000. I teraz wiedząc to, można to wykorzystać. Zmienne odczytane z wejść analogowych będą miały maksymalnie 4 znaki, więc można je podzielić operacjami matematycznymi na 4 osobne zmienne (liczba tysięcy, setek itd) i pierwszą zapisać w komórkach od [0] do [3], a drugą od [4] do [7]. A potem w odbiorniku można będzie odtworzyć te dwie zmienne. Jest to dosyć skomplikowane, ale chyba inaczej się nie da.
stiven
Złota rączka
Posty: 1595
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: Przesyłanie dwóch parametrów przez RF

Post autor: stiven » 25 sty 2016, 16:12

Krapi pisze:do nadawania uzyj polecenia "sprintf"
a po odbiorze polecenia "sscanf"
O właśnie. Ogólnie to wychodzi na to samo o czym pisałem, ale nie trzeba samemu kombinować z dzieleniem i łączeniem, tylko zajmą się tym funkcje z języka C.
Krapi pisze:"msg" to zmienna typu char (to ją wysyłasz) o określonej długości
Tak prawidłowo mówiąc, to to jest tablica zmiennych typu char, bo do zmiennej typu char, to można zapisać tylko 1 znak. A taka tablica jest również łańcuchem znaków, tylko właśnie o określonej z góry długości.

Ja pisałem, że musi być unsigned char*/unsigned char [], ale można użyć char*/char [], bo po to jest w funkcji wysyłającej użyte (uint8_t *), czyli rzutowanie typu na uint8_t *, a to jest to samo, co unsigned char*. Gdyby przy deklaracji msg od razu użyć unsigned, to nie potrzebne byłoby to rzutowanie. Ale to tak piszę tylko, bo znowu funkcje sprintf i sscanf wymagają zwykłych łańcuchów, nie mogą być unsigned, więc lepiej robić z tym rzutowanie.

Kod: Zaznacz cały

vw_send((uint8_t *)msg, 7);
Krapi pisze:reszta zmiennych praktycznie dowolna
Tylko dla różnych typów, są różne litery po %, %d jest dla intów głównie. No i struktury tak się na pewno nie wyśle.
mgreta36
Majsterkowicz
Posty: 115
Rejestracja: 11 mar 2014, 22:20

Re: Przesyłanie dwóch parametrów przez RF

Post autor: mgreta36 » 26 sty 2016, 08:15

Sorki...
Miałem na myśli nRF24...
Awatar użytkownika
Slawek
Starszy majsterkowicz
Posty: 448
Rejestracja: 29 mar 2015, 15:05

Re: Przesyłanie dwóch parametrów przez RF

Post autor: Slawek » 26 sty 2016, 08:57

Podesle ci wieczorem kod :)

Wysłane z mojego SM-A300FU przy użyciu Tapatalka
ODPOWIEDZ

Strony partnerskie: