solowkidamian Napisano Listopad 23, 2022 Udostępnij Napisano Listopad 23, 2022 Witam, mam problem z przesyłaniem danych z jednego modułu arduino na drugi z dwóch joysticków, mianowicie oś x, oś y oraz przycisk s niestety przysyłają się max 3 zmienne czyli jak chce przesłać wszystko to przesyła się połowa w takiej dziwnej konfiguracji że dwie osie x i jedna y. Nie wiem co z tym zrobić będę wdzięczny za pomoc. Poniżej kod programu wydaje mi się że tu coś zawaliłem bo pierwszy raz bawię się tymi modułami. Kod nadajnika: #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> const uint64_t pipeOut = 0xE9E8F0F0E1LL; RF24 radio(7, 8); void setup() { Serial.begin(9600); radio.begin(); radio.openWritingPipe(pipeOut); radio.setPALevel(RF24_PA_MIN); radio.stopListening(); pinMode(2, INPUT_PULLUP); pinMode(3, INPUT_PULLUP); } void loop(){ int x = analogRead(A0); //int x1 = analogRead(A2); int y = analogRead(A1); //int y1 = analogRead(A3); byte s = digitalRead(2); //byte s1 = digitalRead(3); radio.write(&x, sizeof(x)); //radio.write(&x1, sizeof(x1)); radio.write(&y, sizeof(y)); //radio.write(&y1, sizeof(y1)); radio.write(&s, sizeof(s)); //radio.write(&s1, sizeof(s1)); Serial.print("X1: "); Serial.print(x); //Serial.print(" X2: "); //Serial.print(x1); Serial.println("."); Serial.print("Y1: "); Serial.print(y); //Serial.print(" Y2: "); //Serial.print(y1); Serial.println("."); Serial.print("SW1: "); Serial.print(s); //Serial.print(" SW2: "); //Serial.print(s1); Serial.println("."); delay(1000); } oraz kod odbiornik: #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> RF24 radio(7, 8); const uint64_t pipeOut = 0xE9E8F0F0E1LL; void setup() { Serial.begin(9600); Serial.println("START"); delay(1000); radio.begin(); radio.openReadingPipe(0,pipeOut); radio.setPALevel(RF24_PA_MIN); radio.startListening(); } void loop() { delay(5); if (radio.available()) { while (radio.available()){ int x = 0; //int x1 = 0; int y = 0; //int y1 = 0; byte s = 0; //byte s1 = 0; radio.read(&x, sizeof(x)); //radio.read(&x1, sizeof(x1)); radio.read(&y, sizeof(y)); //radio.read(&y1, sizeof(y1)); radio.read(&s, sizeof(s)); // radio.read(&s1, sizeof(s1)); Serial.print("X1: "); Serial.print(x); //Serial.print(" X2: "); //Serial.print(x1); Serial.println("."); Serial.print("Y1: "); Serial.print(y); //Serial.print(" Y2: "); //Serial.print(y1); Serial.println("."); Serial.print("SW1: "); Serial.print(s); //Serial.print(" SW2: "); //Serial.print(s1); Serial.println("."); delay(1000); } } } Będę wdzięczny za pomoc i wskazówki 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Listopad 23, 2022 Udostępnij Listopad 23, 2022 Bo ten moduł jest przystosowany do przesyłania całych pakietów, a nie pojedynczych zmiennych (to nie serial). Możesz sobie przeanalizować coś podobnego tutaj: https://forbot.pl/forum/topic/18932-jawajka-na-cztery-rece/ Masz tam kody nadajnika i odbiornika, przesyłanie sygnału z joysticka (3 osie) i kilku klawiszy. 1 Cytuj Link do komentarza Share on other sites More sharing options...
solowkidamian Listopad 23, 2022 Autor tematu Udostępnij Listopad 23, 2022 @ethanak dzięki a znasz może jakiś dobry poradnik tłumaczący ten temat bo błądzę po Internecie po omacku nie mogę nic znaleźć pomocnego. Jeśli nie to trudno i tak mi już pomogłeś. 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
Popularny post ethanak Listopad 24, 2022 Popularny post Udostępnij Listopad 24, 2022 7 godzin temu, solowkidamian napisał: jakiś dobry poradnik tłumaczący ten temat Niestety poradnika jako takiego nie znalazłem, sam korzystałem raczej z przykładów. Mogę co najwyżej podpowiedzieć Wysyłaj paczki o ustalonej wielkości, i ustaw na początku jakiej wielkości będą paczki. Np. zawsze wysyłasz trzy bajty (tablica x, y, przycisk) i odbiornik zawsze się spodziewa trzech bajtów. Oczywiście nie jest to konieczne, ale na początku ułatwia sprawę, a w typowych zastosowaniach (zdalne sterowanie) nie ma potrzeby robienia tego inaczej. Do tego służy setPayloadSize. Ustaw automatyczne potwierdzenie. Wtedy funkcja write() w nadajniku będzie czekać na potwierdzenie odbioru danych (zwraca true) lub zdecyduje, że pakiet gdzieś się zgubił albo odbiornik jest wyłączony (zwraca false). Do tego masz setAutoACK. A wyniku funkcji write() możesz użyć w nadajniku np. do zapalenie/gaszenia diody pokazującej działanie odbiornika. Ustaw w nadajniku, aby próbował powtórzyć wysłane dane jeśli nie dostał odpowiedzi. Do tego masz setRetries. Zacznij od: setRetries(15,15); potem możesz się bawić innymi wartościami. To tak na początek... 2 1 Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
solowkidamian Listopad 24, 2022 Autor tematu Udostępnij Listopad 24, 2022 @ethanak dzięki wielkie za pomoc Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Listopad 29, 2022 Udostępnij Listopad 29, 2022 @solowkidamian a najlepiej jak sobie upakujesz te dane w strukturę lub tablice i wyślesz jako pakiet..wtedy z automatu unikniesz pomieszanych danych, bo tak po jednym bajcie to szybko zgubisz synchronizację😉 1 Cytuj Link do komentarza Share on other sites More sharing options...
pmochocki Listopad 30, 2022 Udostępnij Listopad 30, 2022 Dnia 23.11.2022 o 21:55, solowkidamian napisał: jakiś dobry poradnik tłumaczący ten temat Ale zajrzałeś na stronę domową biblioteki, której używasz: https://nrf24.github.io/RF24/index.html Z opisem dla Arduino: https://nrf24.github.io/RF24/md_docs_arduino.html Z przykładami: https://nrf24.github.io/RF24/examples.html np.: z GettingStarted.ino: https://nrf24.github.io/RF24/examples_2GettingStarted_2GettingStarted_8ino-example.html 1 Cytuj Link do komentarza Share on other sites More sharing options...
solowkidamian Grudzień 1, 2022 Autor tematu Udostępnij Grudzień 1, 2022 @farmaceuta w sensie z tych wszystkich danych mama zrobić jedną tablicę i ją wysyłać? #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> bool wyswietlanie = true; const byte pipeOut[6] = "0001"; RF24 radio(7, 8); struct Data_Package { byte x; byte x1; byte y; byte y1; byte s; byte s1; }; Data_Package data; void setup() { if( wyswietlanie == true) { Serial.begin(9600); } radio.begin(); radio.openWritingPipe(pipeOut); radio.setAutoAck(false); radio.setDataRate(RF24_250KBPS); radio.setPALevel(RF24_PA_LOW); radio.stopListening(); pinMode(2, INPUT_PULLUP); pinMode(3, INPUT_PULLUP); } void loop(){ data.x = map(analogRead(A0),0, 1023, 0, 255); data.x1 = map(analogRead(A3),0, 1023, 0, 255); data.y = map(analogRead(A1),0, 1023, 0, 255); data.y1 = map(analogRead(A2),0, 1023, 0, 255); data.s = digitalRead(2); data.s1 = digitalRead(3); radio.write(&data, sizeof(Data_Package)); if( wyswietlanie == true) { Serial.print("X1: "); Serial.print(data.x); Serial.print(" X2: "); Serial.print(data.x1); Serial.println("."); Serial.print("Y1: "); Serial.print(data.y); Serial.print(" Y2: "); Serial.print(data.y1); Serial.println("."); Serial.print("SW1: "); Serial.print(data.s); Serial.print(" SW2: "); Serial.print(data.s1); Serial.println("."); delay(1000); } } Na razie zrobiłem tak, tą strukturę Data_Package i działa elegancko, przynajmniej na razie. Bo ogólnie to z tego ma być taki kontroler do wysyłania danych do np. jakiś różnych moich projektów na przyszłość. I już zlutowałem jako tako i z tego co sprawdzałem działa. Ale jeśli się da coś w programie poprawić to zawsze można tylko nie wiem dokładnie jak z tymi tablicami się obsługiwać. W sensie wiem co to ale nie umiem używać. Cytuj Link do komentarza Share on other sites More sharing options...
solowkidamian Grudzień 1, 2022 Autor tematu Udostępnij Grudzień 1, 2022 @pmochocki Dzięki za linki, patrzyłem tylko na tą pierwsza żeby sprawdzić głownie opis pinów i zrobiłem to co chciałem z tego przykładu który wysłał mi tu jako pierwszy ethank, ale może się jeszcze przyda także dzięki. Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Grudzień 1, 2022 Udostępnij Grudzień 1, 2022 @solowkidamian tak jak masz teraz że strukturami jest lepiej...tablice zaproponowałem tylko z tego względu że typ zmiennych mógł być taki sam i można by wszystko wysłać/odczytać jako jedna tablica...na przyszłość Ci mogę doradzić że gdybyś chciał wysyłać różne dane (nie te same w kółko) to możesz dane odbierać do bufora, w każdej strukturze pierwszy bajt ponumerować inaczej, wtedy po odebraniu paczki sprawdzasz pierwszy bajt bufora i go kopiujesz w odpowiednie wyznaczone miejsce... 1 Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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!