23-12-2016, 15:09
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:
RECIVER:
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);}
}}}