Skocz do zawartości

VirtualWire - przesyłanie 2 analogowych wartości


Atta

Pomocna odpowiedź

Mam problem z napisaniem kodu do 2 układów ze zdjęć, chcę aby wartości z wejść A0 i A1 z płytki Arduino UNO były wysyłane do Arduino MEGA, wyświetlane na monitorze portu szeregowego i nadające się do dalszej pracy, np. aby wartość A0 na Arduino UNO, czyli oś Y joysticka, sterowała napięciem PWM jednej diody podpiętej do Arduino MEGA, a wartość z wejścia A1 (oś X) sterowała napięciem PWM drugiej diody. Korzystam z modułu radiowego RF:

https://abc-rc.pl/RF-FS100A

oraz z biblioteki VirtualWire:

http://www.airspayce.com/mikem/arduino/VirtualWire/

Korzystam z tej biblioteki od około 3-4 dni i umiem przesyłać wiadomości o konkretnej treści (z pomocą wspaniałego internetu), ale mam problem z przesyłaniem wartości analogowych z wejść i "wyciągnięcie" ich z wiadomości na drugiej płytce.

Arduino UNO jest zasilane z 9V, Arduino MEGA jest podpięte przez USB do komputera.

NADAJNIK:

ODBIORNIK:

Link do komentarza
Share on other sites

Jeśli umiesz nadać cokolwiek i odebrać to po drugiej stronie to znaczy, że sprzęt i biblioteka działają poprawnie. Problemem jest więc chyba sam kod odczytujący wejścia analogowe i próbujący wysłać to za pomocą wywołania funkcji vw_send(). Pokaż fragment programu który to ma robić (nadawanie i odbieranie) - popatrzymy. Bez tego jak mamy coś poradzić?

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

Właśnie chodzi mi o to, aby ktoś mógł pokazać taki kod i ewentualnie wytłumaczyć jakieś komendy z którymi będę miał problem. Nie wiem nawet jak mam do tego podejść, a nie zależy mi na szybkim przekopiowaniu kodu do siebie i "odhaczenie" tego jako zrobione tylko na zrozumieniu tego.

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

Trochę stary temat, ale może dalej aktualny. Zapewne korzystasz z tych dwóch funkcji:

uint8_t vw_send(uint8_t *buf, uint8_t len);
uint8_t vw_get_message(uint8_t *buf, uint8_t *len);

W przypadku vw_send: buf to wskaźnik na pierwszy bajt z Twoich danych do wysłania, a len to ilość bajtów do wysłania. Jeśli chcesz wysłać jakiegoś inta, to po prostu podajesz jego adres i ilość jego bajtów:

int joyY = analogRead(pin);
if (!vw_send((uint_8 *) &joyY, sizeof(joyY))
{
   // nie udalo sie wyslac

}

I analogicznie wtedy robisz odbieranie. "(uint8_t *)" to rzutowanie na wskaźnik innego typu, żeby kompilator nie pokazywał ostrzeżeń.

Jeśli chcesz wysłać więcej danych (a na pewno chcesz), to najłatwiej jest po prostu wykorzystać struct:

struct MyMessage
{
  int joyX;
  int joyY;
}


void loop()
{
  MyMessage msg;
  msg.joyX = analogRead(xpin);
  msg.joyY = analogRead(ypin);

  if (!vw_send((uint8_t *) &msg, sizeof(msg))
  {
     // nie udalo sie wyslac
  }
}

Odbiór analogicznie jak wysyłanie. Po wywołaniu vw_get_message możesz po prostu odczytać dane ze struktury.

Link do komentarza
Share on other sites

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

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.