Робот на Ардуино и nrf24 l01

hubll
Offline
Зарегистрирован: 08.03.2015

Здравствуйте сделал код, но некоректно работает. Посмотрите может что я упустил. Это черновой вариант, по этому не обращайте внимания на то, что  закоментировано. Сервоприводы работают нормально, а вот двигатели нет. Спасибо за желание помочь.

Передатчик на Нано:

// Необходимо установить библиотеку для радиомодуля nRF24
#include <SPI.h>
#include "RF24.h"
 
RF24 radio(9,10);// подключение радиомодуля: 9 пин Ардуино на CE радиомодуля, 10 пин Ардуино на CSN радиомодуля, 13 пин Ардуино на SCK, 11 пин Ардуино на MOSI
//// 12 пин Ардуино на MISO, питание 3,3 Вольта, Землю от Ардуино соедениеть с Землей от радиомодуля.
const uint64_t pipe = 0xF0F0F0F000LL; 

int msg[2]; 
 

int potpin_1 = A0; //подключение джойстика: A0 на Ардуино подключаем к VRx на джойстике, питание всех джойстиков берем с Ардуино +5 и GND
int val_1; 
int potpin_2 = A1; //A1 на Ардуино подключаем к VRy на джойстике 
int val_2; 
int potpin_3 = A2; //A2 на Ардуино подключаем к VRx на джойстике 
int val_3; 
int potpin_4 = A4; //A3 на Ардуино подключаем к VRy на джойстике 
int val_4; 
int potpin_5 = A3; //повороты камеры. подключение джойстика: A0 на Ардуино подключаем к VRx на джойстике, питание всех джойстиков берем с Ардуино +5 и GND
int val_5; 
int potpin_6 = A5; //повороты камеры. A1 на Ардуино подключаем к VRy на джойстике 
int val_6; 
int potpin_7 = A6; //A2 на Ардуино подключаем к VRx на джойстике 
int val_7; 
int potpin_8 = A7; //A3 на Ардуино подключаем к VRy на джойстике 
int val_8; 


void setup(void){
radio.begin();

radio.openWritingPipe(pipe); 
Serial.begin(9600);
}
void loop() {
val_1 = analogRead(potpin_1),val_1 = map(val_1, 0, 1023, 0, 10),msg[0] = val_1,radio.write(msg, 1);
val_2 = analogRead(potpin_2),val_2 = map(val_2, 0, 1023, 11, 21),msg[0] = val_2,radio.write(msg, 1);
val_3 = analogRead(potpin_3),val_3 = map(val_3, 0, 1023, 22, 32),msg[0] = val_3,radio.write(msg, 1);
val_4 = analogRead(potpin_4),val_4 = map(val_4, 0, 1023, 33, 43),msg[0] = val_4,radio.write(msg, 1);
val_5 = analogRead(potpin_5),val_5 = map(val_5, 0, 1023, 44, 54),msg[0] = val_5,radio.write(msg, 1);
val_6 = analogRead(potpin_6),val_6 = map(val_6, 0, 1023, 55, 65),msg[0] = val_6,radio.write(msg, 1);
val_7 = analogRead(potpin_7),val_7 = map(val_7, 0, 1023, 0, 127),msg[1] = val_7,radio.write(msg, 2);
val_8 = analogRead(potpin_8),val_8 = map(val_8, 0, 1023, 128, 255),msg[1] = val_8,radio.write(msg, 2);


}

Приемник на Мега:

//Внимание!!! Включать первым необходимо передатчик, а затем приемник.
// Необходимо установить библиотеку для радиомодуля nRF24.
#include <Servo.h>
#include <SPI.h>
#include "RF24.h"

Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;
Servo servo7;
RF24 radio(40,42); // подключение радиомодуля: 9 пин Ардуино на CE радиомодуля, 10 пин Ардуино на CSN радиомодуля, 13 пин Ардуино на SCK, 11 пин Ардуино на MOSI
// 12 пин Ардуино на MISO, питание 3,3 Вольта, Землю от Ардуино соедениеть с Землей от радиомодуля.
const uint64_t pipe = 0xF0F0F0F000LL; 
int msg[2]; 

int data = 0; 
int data1 = 0; 

int pos;

int fspeed = 0;           // forward speed 
int bspeed = 0;           // backward speed

int pfspeed = 0;           // forward speed 
int pbspeed = 0;           // backward speed

// Подключение драйвера двигателя L298n для 2х левых колес
const int in1 = 30;    // direction pin 1
const int in2 = 28;    // direction pin 2
const int ena = 3;    // PWM pin to change speed
const int in3 = 26;    // direction pin 1
const int in4 = 24;    // direction pin 2
const int enb = 2;    // PWM pin to change speed4

// Подключение драйвера двигателя L298n для 2х правых колес
const int in11 = 6;    // direction pin 1
const int in21 = 5;    // direction pin 2
const int ena1 = 7;    // PWM pin to change speed
const int in31 = 14;    // direction pin 1
const int in41 = 15;    // direction pin 2
const int enb1 = 4;    // PWM pin to change speed

void setup()
{


  pinMode(in1, OUTPUT);      // connection to L298n
  pinMode(in2, OUTPUT);      // connection to L298n
  pinMode(ena, OUTPUT);      // connection to L298n
  pinMode(in3, OUTPUT);      // connection to L298n
  pinMode(in4, OUTPUT);      // connection to L298n
  pinMode(enb, OUTPUT);      // connection to L298n

  pinMode(in11, OUTPUT);      // connection to L298n
  pinMode(in21, OUTPUT);      // connection to L298n
  pinMode(ena1, OUTPUT);      // connection to L298n
  pinMode(in31, OUTPUT);      // connection to L298n
  pinMode(in41, OUTPUT);      // connection to L298n
  pinMode(enb1, OUTPUT);      // connection to L298n
  
servo1.attach(8); // оранжевый от сервопривода1 на 3 пин Ардуино (приемник), питание всех сервоприводов берем с источника питания 4-5В (1 аккумулятор 18650)
// если питание ардуино и питание сервоприводов разное, то необходимо соеденить минуса источников питания.
servo2.attach(9); // оранжевый от сервопривода2 на 5 пин Ардуино (приемник)
servo3.attach(10); // оранжевый от сервопривода3 на 9 пин Ардуино (приемник)
servo4.attach(11); // оранжевый от сервопривода4 на 10 пин Ардуино (приемник)
servo5.attach(12); // оранжевый от сервопривода3 на 9 пин Ардуино (приемник)
servo6.attach(13); // оранжевый от сервопривода4 на 10 пин Ардуино (приемник)
servo7.attach(3); // оранжевый от сервопривода4 на 10 пин Ардуино (приемник)
delay(50);
radio.begin();


radio.openReadingPipe(1,pipe); 
radio.startListening();
//Serial.begin(9600);
}

void loop()
{
 if  (radio.available())radio.read(msg, 1);
  if (msg[0] <=10 && msg[0] >-1)data = msg[0], pos = map(data, 0, 10, 0, 180),servo1.write(pos);  
  if (msg[0] <=21 && msg[0] >=11)data = msg[0], pos = map(data, 11, 21, 0, 180),servo2.write(pos);
  if (msg[0] <=32 && msg[0] >=22)data = msg[0], pos = map(data, 22, 32, 0, 180),servo3.write(pos);
  if (msg[0] <=43 && msg[0] >=33)data = msg[0], pos = map(data, 33, 43, 0, 180),servo4.write(pos);
  if (msg[0] <=54 && msg[0] >=44)data = msg[0], pos = map(data, 44, 54, 0, 180),servo5.write(pos);
  if (msg[0] <=65 && msg[0] >=55)data = msg[0], pos = map(data, 55, 65, 0, 180),servo6.write(pos);  



  if (radio.available())radio.read(msg, 2);


  if (msg[1] >=0 && msg[1] <=58)data1 = msg[1],bspeed = map(data1, 127, 68, 0, 255),backward(bspeed);
  if (msg[1] >=68 && msg[1] <=127)data1 = msg[1],fspeed = map(data1, 58, 0, 0, 255),forward(fspeed);
if (msg[1] >59 && msg[1] <67)data1 = msg[1], stop();

if (msg[1] >=128 && msg[1] <=189)data1 = msg[1], pbspeed = map(data1, 255, 201, 0, 255), pbackward(pbspeed);
if (msg[1] >=201 && msg[1] <=255)data1 = msg[1], pfspeed = map(data1, 189, 128, 0, 255), pforward(pfspeed);
if (msg[1] >190 && msg[1] <200)data1 = msg[1], stop();



     

  //if (msg[0] >=128 && msg[0] <=189)data = msg[0], bspeed = map(data, 255, 201, 0, 255), backward(bspeed);
  //if (msg[0] >=201 && msg[0] <=255)data = msg[0], fspeed = map(data, 189, 128, 0, 255), forward(fspeed);
  //if (msg[0] >190 && msg[0] <200)data = msg[0], stop();


}
void stop()
{
  
  analogWrite(ena, 0);
  analogWrite(enb, 0);
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
  analogWrite(ena1, 0);
  analogWrite(enb1, 0);
  digitalWrite(in11, LOW);
  digitalWrite(in21, LOW);
  digitalWrite(in31, LOW);
  digitalWrite(in41, LOW);
}


void forward(int fspeed)
{
  
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  analogWrite(ena, fspeed);
  analogWrite(enb, fspeed);


  
 // Serial.println(in1);    
}

void backward(int bspeed)
{
  
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);

  analogWrite(ena, bspeed);
 analogWrite(enb, bspeed);

}

void pforward(int pfspeed)
{
  
 

  digitalWrite(in11, HIGH);
  digitalWrite(in21, LOW);
  digitalWrite(in31, LOW);
  digitalWrite(in41, HIGH);
 analogWrite(ena1, pfspeed);
 analogWrite(enb1, pfspeed);
  
 // Serial.println(in1);    
}

void pbackward(int pbspeed)
{
  


  digitalWrite(in11, LOW);
  digitalWrite(in21, HIGH);
  digitalWrite(in31, HIGH);
  digitalWrite(in41, LOW);

  analogWrite(ena1, pbspeed);
 analogWrite(enb1, pbspeed);
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

hubll пишет:

Здравствуйте сделал код, но некоректно работает. 

В чём именно некорректность и что Вас не устраивает нам самим догадываться или объясните?