Skocz do zawartości

Błąd w kodzie z nrf24l01


marcelh2o

Pomocna odpowiedź

Cześć, udało mi się sterować joystickiem silnik i teraz chciałem pójść lvl wyżej i sterować nim przez moduł radiowy nrf24l01.

Napisałem kod i wg. Arduino IDE wszystko jest ok jednak silnik nie pracuje. Popełniłem gdzieś błąd w przesyłaniu danych tylko jeszcze nie wiem gdzie, może ktoś z Was ma bystrzejsze oko do nrfów.

//kod odbiornika

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

const uint64_t pipe = 0x1CF8361637LL; 
//silnik ustawiam na piny 2 i 4
int in1 =4;
int in2 =2;

RF24 radio(9,10);

int msg[1];//wiadomość którą odbieram
int odczyt;//odczyt
void setup()

{
 //ustawiam silniki jako wyjścia
 pinMode(in1, OUTPUT);
 pinMode(in2, OUTPUT);

 radio.begin();                            //uruchom moduł
 radio.openReadingPipe(1,pipe);            //zacznij odczyt z kanału o danym kodzie
 radio.startListening();                   //"nasłuchuj"
}

void loop()
{
if (radio.available())radio.read(msg, 1);  
if (msg[0] < 507) // jeśli odebrana wartość jest mniejsza niż 507 to:
{
 analogWrite(in1, LOW);
   odczyt = map(odczyt, 506, 0, 0, 255);
   analogWrite(in2, odczyt);
}
else if(msg[0] > 511)//jeśli odebrana wartość jest większa niż 511 to:
 {
   analogWrite(in2, LOW);
   odczyt = map(odczyt, 512, 1023, 0, 255);
   analogWrite(in1, odczyt);
 }

else // w przeciwnym wypadku silnik się nie kręci
 {
 analogWrite(in2, LOW);
 analogWrite(in1, LOW);
 }
}
//kod nadajnika
#include <SPI.h>                            
#include <nRF24L01.h>                       
#include <RF24.h>

const uint64_t pipe = 0x1CF8361637LL;   

const int joystick = A0;
RF24 radio(9,10);
int odczyt;
int msg[1];

void setup()
{
 pinMode(joystick, INPUT);
 delay(50);
 radio.begin();                           
 radio.openWritingPipe(pipe);      
}

void loop()
{
 odczyt=analogRead(joystick);
 msg[0] = odczyt;
 radio.write(msg, 1);
}
Link do komentarza
Share on other sites

Jeśli masz na myśli sprawdzenie czy nrfy się komunikują to już sprawdziłem wcześniej i wszystko grało. Teraz tylko chciałem sprawdzić czy uda mi się wysłać dane do sterowania silnikiem.

Link do komentarza
Share on other sites

Hmm no to skoro

1. komunikacja działa ok

nrfy się komunikują to już sprawdziłem wcześniej i wszystko grało

2. kod do sterowania mostkami działa

udało mi się sterować joystickiem silnik

i są to w zasadzie jedyne dwa elementy kodu (w części odbiorczej) to może jeden z punktów nie jest prawdziwy?

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

No właśnie wydaje mi się że albo błąd jest w samym wysyłaniu wiadomości albo w samym odbiorze.

odczyt=analogRead(joystick);
 msg[0] = odczyt;
 radio.write(msg, 1);

albo

if (msg[0] < 507)
...
else if(msg[0] > 511)

i wydaje mi się że odbiór tego msg nie razlizuje się w ten sposób ale innych sposobów nie znam.

Link do komentarza
Share on other sites

Po pierwsze jakbym wiedział jak to zrobić to bym tutaj nie pisał. Po drugie co z tego że zrobie drugi kod, który też nie będzie działał? co mi to da? przecież wiem że to nie działa tylko nie wiem jak to naprawić🙂

Link do komentarza
Share on other sites

W Twoim innym temacie jakoś inaczej sterowałeś silnikami niż tylko 2 x analogWrite().

Może wstaw schemat urządzenia?

EDIT: i IMO masz złe podejście do tematu. Deshipu dał Ci radę (ja też). Jeżeli nie jesteś w stanie rozwiązać samodzielnie tak podstawowego problemu jak przedstawiony w temacie i oczekujesz gotowych rozwiązań, to jak zachowasz się przy bardziej skomplikowanych systemach? Rozumiem że jesteś początkujący, więc dajemy porady, ale nie jesteśmy wróżkami. To Ty masz sprzęt na biurku, nie my.

Link do komentarza
Share on other sites

To ci to da, że będziesz wiedział która część nie działa i będziesz mógł się na niej skoncentrować, zamiast zgadywać. Będziesz mógł dopisać sobie Serial.print, poeksperymentować z różnymi podejściami aż ci zadziała, wtedy wrócisz z działającym kodem do oryginalnego programu.

[ Dodano: 04-09-2016, 22:38 ]

I żeby nie było, ja się nie bawię z tobą w kotka i myszkę, ja też nie wiem co jest w twoim programie źle. Nigdy nie używałem NRF24L01 z Arduino, więc nie wiem jak to powinno dokładnie wyglądać. Ale na twoim miejscu zrobiłbym właśnie to, co napisałem.

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.