Проблема передачи данных с использованием nrf24L01 и 2 arduino

Нет ответов
sergeos
Offline
Зарегистрирован: 19.04.2016
Всем привет столкнулся с проблемой отправки данных с одной ардуины на другую используя nrf24L01. Необходимо передать значение для работы 2-х серво с помошью джойстика и включение светодиода с помошью кнопки. Проблема в том что при нажатии на кнопку начинает дергаться один из серво.Если использовать джойстик Если закоментить код на приемнике отвечаюший за серво то светодиод зажигается как нужно при нажатии на кнопку на передатчике. Куда смотреть не знаю. Кто может подскажет.
 
Вот код передатчика им выступает Uno
#include <SPI.h>
#include "RF24.h"

int msg1[3];
int msg2[3];
int potpin_1 = A0; // сервопривод поворотов
int val_1;
int val_2; 
int potpin_2 = A1; // сервопривод подьемника

// Set up nRF24L01 radio on SPI bus plus pins 9 & 10 
//Контакты от радиомодуля NRF24L01 подключаем к пинамнам -> Arduino

//SCK -> 13
//MISO -> 12
//MOSI -> 11
//CSN -> 10
//CE -> 9

RF24 radio(9,10);

// адреса каналов приема и передачи
const uint64_t pipes[2] = {
0xF0F0F0F000LL, 0xF0F0F0F0FFLL};

//кнопки подключены к этим пинам
int SW1 = 4;
int SW2 = 7;

void setup(void){ 

radio.begin(); 
//radio.setDataRate(RF24_2MBPS); // Скорость передачи
radio.setChannel(100); // Номер канала от 0 до 127
radio.setRetries(15,15); // Кол-во попыток и время между попытками
radio.openWritingPipe(pipes[1]); // Открываем канал передачи
//radio.openReadingPipe(1, pipes[0]); // Открываем один из 6-ти каналов приема
//radio.startListening(); // Начинаем слушать эфир
} 
void loop(void){
val_1 = analogRead(potpin_1),val_1 = map(val_1, 0, 1023, 0, 128),msg1[0] = val_1;
val_2 = analogRead(potpin_2),val_2 = map(val_2, 0, 1023, 0, 128),msg1[1] = val_2;
radio.write(msg1, sizeof(msg1));
// LED Control
if (digitalRead(SW2) == HIGH){
msg2[0] = 1000;
radio.write(msg2, sizeof(msg2));}}

В качестве приёмника выступает Mega2560

#include <Servo.h>
#include <SPI.h>
#include "RF24.h"

int msg1[3];
int msg2[3];

// Set up nRF24L01 radio on SPI bus plus pins 9 & 10 
//Контакты от радиомодуля NRF24L01 подключаем к пинамнам -> Arduino

//SCK -> 13
//MISO -> 12
//MOSI -> 11
//CSN -> 10
//CE -> 9

RF24 radio(40,53);

//светодиоды подключены к этим пинам
int LED1 = 22;
int LED2 = 23;
int data; //переменная для servo
int pos;
Servo servo3; //даём имена servo
Servo servo4;

// адреса каналов приема и передачи
const uint64_t pipes[2] = {
0xF0F0F0F000LL, 0xF0F0F0F0FFLL};

void setup(void){
Serial.begin(9600);
radio.begin();
//radio.setDataRate(RF24_2MBPS); // Скорость передачи
radio.setChannel(100); // Номер канала от 0 до 127
radio.setRetries(15,15); // Кол-во попыток и время между попытками
//radio.openWritingPipe(pipes[0]); // Открываем канал передачи
radio.openReadingPipe(1, pipes[1]); // Открываем один из 6-ти каналов приема
radio.startListening(); // Начинаем слушать эфир

pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
servo3.attach(24); // attaches the servo on pin 3 to the servo object
servo4.attach(25);
}
void loop(void){
if (radio.available()){
radio.read(msg1, sizeof(msg1));
radio.read(msg2, sizeof(msg2));
//Serial.println(msg[0]);

if (msg1[0] <128 && msg1[0] >-1)data = msg1[0], pos = map(data, 0, 128, 0, 180),servo3.write(pos);

if (msg1[1] <128 && msg1[1] >-1)data = msg1[1], pos = map(data, 0, 128, 0, 180),servo4.write(pos);
//else{Serial.println("No radio available");
if (msg2[0] == 1000){
digitalWrite(LED2, HIGH);
}
else {digitalWrite(LED2, LOW);}}}