• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
NRF24L01 - sterowanie wieloma serwami
#1
Witam,
Od kilku dni walczę z problemem który polega na zdalnym sterowaniu kilku serw oraz LEDów.
Dla sterowania dwoma serwami i jedną diodą problemu nie ma. 
Problem pojawia się gdy chcę podłączyć np. dwa serwa i dwie diody.
Serwa zaczynają wariować a ledy się zapalają losowo.
Podejrzewam że te dane jakimś cudem się mieszają? Źle rozumiem wysyłanie i odbieranie danych?
Może ktoś wskazać gdzie leży błąd? może otworzyć kilka rur (pipe)? może wysłać wszystko w jednej zmiennej?
TRANSMITER:
Kod:
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int pos[2]; // serwa x i y
int led[2]; // led a i b
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int posx;
int posy;
void setup(void){
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(pipe);}

void loop(void){
 posx = analogRead(A0);
 posx = map(posx, 0, 1023, 0, 180);
 posy = analogRead(A1);          
 posy = map(posy, 0, 1023, 0, 180);
 pos[0]=posy;
 pos[1]=posx;
 radio.write(pos, sizeof(pos));
 if (digitalRead(1)==HIGH){
 led[0]=1;
 radio.write(led, sizeof(led));
 }
 else{
   led[0]=0;
     }
 if (digitalRead(2)==HIGH){
 led[1]=1;
 radio.write(led, sizeof(led));
 }
 else{
   led[1]=0;
     }
}

RECIVER:
Kod:
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int pos[2]; // serwa x i y
int led[2]; // led a i b

RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
#include <Servo.h>

Servo servox;
Servo servoy;
void setup(void){
  servox.attach(3);
  servoy.attach(5);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
}
void loop(void){
 
if (radio.available()){
  bool done = false;    
  while (!done){

radio.read(pos, sizeof(pos));      
    Serial.println(pos[0]);
    Serial.println(pos[1]);
    servox.write(pos[0]);
    servoy.write(pos[1]);
    delay(10);
    radio.read(led, sizeof(led));
if (led[0]==1){digitalWrite(1,HIGH);}
else{digitalWrite(1,LOW);}
if (led[1]==1){digitalWrite(2,HIGH);}
else{digitalWrite(2,LOW);}

}}}
 
 
 
Odpowiedź
#2
Wysyłasz oddzielnie informacje o led i pozycji serw. Odbiornik nie wie co wysyłasz, musisz dodać dodatkowy bajt o tym informujący.
Możesz też w jednej paczce wysyłać informacje o ledach i serwach .
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości