Управление машинкой arduino и nrf24l01

vankenshtein
Offline
Зарегистрирован: 15.04.2014

Добрый день. Только начинаю осваивать arduino. Решал собрать машинку на управлении. Как управлять сервой разобрался, но никак не получается управлять мотором. Может кто подскажет? 

Управление сервой передатчик:

#include <SPI.h>

#include "RF24.h"

int msg[1];

//Контакты от радиомодуля NRF24L01 подключаем к пинамнам -> Arduino
//SCK -> 13//MISO -> 12//MOSI -> 11//CSN -> 10//CE -> 9
// Set up nRF24L01 radio on SPI bus plus pins 9 & 10
RF24 radio(9,10);

const uint64_t pipe = 0xE8E8F0F0E1LL; // адрес канала передачи

int potpin = 0;  // подключаем ось У, руль
int val;    // хранит значение считываемое с 0 пина

void setup(void){                     
  radio.begin();
  radio.openWritingPipe(pipe); // Открываем канал передачи
}
void loop(void){  
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023) 
  val = map(val, 0, 1023, 65, 145);     // scale it to use it with the servo (value between 0 and 180) 
    msg[0] = val;
}

 

Управление сервой приемник:

 

#include <Servo.h> 
 #include <SPI.h>
 #include "RF24.h"
 Servo myservo;  // create servo object to control a servo 
 //Контакты от радиомодуля NRF24L01 подключаем к пинамнам -> Arduino
 //SCK -> 13//MISO -> 12//MOSI -> 11//CSN -> 10//CE -> 9
 // Set up nRF24L01 radio on SPI bus plus pins 9 & 10
 RF24 radio(9,10);
 const uint64_t pipe = 0xE8E8F0F0E1LL; // адрес канала
 int msg[1];
 void setup() 
 { 
 // Serial.begin(9600);
 myservo.attach(3);  // attaches the servo on pin 3 to the servo object 
 radio.begin();
 radio.openReadingPipe(1,pipe); // Открываем один из 6-ти каналов приема
 radio.startListening(); // Начинаем слушать эфир 
 } 
 void loop() 
 { 
 if (radio.available()){
 bool done = false;
 while (!done){
 done = radio.read(msg, 1);      
 myservo.write (msg[0]);
 
 }
 }
 }

 

Вопрос в том как добавить управление мотором в этот скетч?

vankenshtein
Offline
Зарегистрирован: 15.04.2014

а, совсем забыл регуль для двигателя сделан из начинки от сервопривода

lee
Offline
Зарегистрирован: 13.03.2014

ну так и подключай как еще одну серво, на чем затык? В массиве укажи 2 переменные, и распиши так же как с одной у тебя расписано.

vankenshtein
Offline
Зарегистрирован: 15.04.2014

В программировании не силен, не могли бы подсказать как в массиве две переменные указать? и как массив передать?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013
vankenshtein
Offline
Зарегистрирован: 15.04.2014

спасибо большое

vankenshtein
Offline
Зарегистрирован: 15.04.2014

По примемар написал вот это:

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

int msg[2];

RF24 radio(9,10);

const uint64_t pipe = 0xE8E8F0F0E1LL; // адрес канала передачи

int potpinX = 0; 
int potpinY = 1;


void setup(void){                     
  radio.begin();
  radio.openWritingPipe(pipe); // Открываем канал передачи
}
void loop(void){  
  val = analogRead(potpinX);            // reads the value of the potentiometer (value between 0 and 1023) 
  val = map(val, 0, 1023, 65, 145);     // scale it to use it with the servo (value between 0 and 180) 
 val1 = analogRead(potpinX);            // reads the value of the potentiometer (value between 0 and 1023) 
  val1 = map(val, 0, 1023, 65, 145); 
 msg[0] = val;
  msg[1] = val1;
    radio.write(msg, 2);
}

При компилировании выдает ошибку conflicting declaration "int msg[2];"

Что я сделал не так

Geronimo
Offline
Зарегистрирован: 06.05.2013

Могу предположить что переменная msg уже объявлкна раньше.

Geronimo
Offline
Зарегистрирован: 06.05.2013

Так же я не вижу объявления переменной val

vankenshtein
Offline
Зарегистрирован: 15.04.2014

Спасибо Вам большое. Скомпилировалось

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

int msg[2];

RF24 radio(9,10);

const uint64_t pipe = 0xE8E8F0F0E1LL; // адрес канала передачи

int potpinX = 0; 
int potpinY = 1;
int val;
int val1;

void setup(void){                     
  radio.begin();
  radio.openWritingPipe(pipe); // Открываем канал передачи
}
void loop(void){  
  val = analogRead(potpinX);            // reads the value of the potentiometer (value between 0 and 1023) 
  val = map(val, 0, 1023, 65, 145);     // scale it to use it with the servo (value between 0 and 180) 
 val1 = analogRead(potpinX);            // reads the value of the potentiometer (value between 0 and 1023) 
  val1 = map(val, 0, 1023, 65, 145); 
 msg[0] = val;
  msg[1] = val1;
    radio.write(msg, 2);
}

 

 

Когда напишу код для приемника,если Вас не затруднит сможете посмотреть тоже?

vankenshtein
Offline
Зарегистрирован: 15.04.2014

Приемник

#include <Servo.h> 
 #include <SPI.h>
 #include "RF24.h"
Servo myservo;
 Servo myservo1;  // create servo object to control a servo 
 //Контакты от радиомодуля NRF24L01 подключаем к пинамнам -> Arduino
 //SCK -> 13//MISO -> 12//MOSI -> 11//CSN -> 10//CE -> 9
 // Set up nRF24L01 radio on SPI bus plus pins 9 & 10
 RF24 radio(9,10);
 const uint64_t pipe = 0xE8E8F0F0E1LL; // адрес канала
 int msg[2];
 
 
 void setup() 
 { 

 myservo.attach(3);  // attaches the servo on pin 3 to the servo object 
 myservo1.attach(4);
 radio.begin();
 radio.openReadingPipe(1,pipe); // Открываем один из 6-ти каналов приема
 radio.startListening(); // Начинаем слушать эфир 
 } 
 void loop() 
 { 
 if (radio.available()){
 bool done = false;
 while (!done){
 done = radio.read(msg, 2);      
 myservo.write (msg[0]);
 myservo1.write (msg[1]);
 }
 }
 }

 

vankenshtein
Offline
Зарегистрирован: 15.04.2014

Добрые люди помогли)) Вот рабочий код, может кому то пригодится

Передатчик

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define CE_PIN  9
#define CSN_PIN 10
#define JOYSTICK_X A0
#define JOYSTICK_Y A1
#define JOYSTICK_Z A2
const uint64_t pipe = 0xE8E8F0F0E1LL;
RF24 radio(CE_PIN, CSN_PIN);
int joystick[4];
void setup()

{
  Serial.begin(9600);
  radio.begin();
  radio.openWritingPipe(pipe);
  pinMode(2, INPUT);
  digitalWrite(2, HIGH);
}


void loop() 
{
  joystick[0] = analogRead(JOYSTICK_X);
  joystick[0] = map(joystick[0],0,1023,1,180);
  joystick[1] = analogRead(JOYSTICK_Y);
  joystick[2] = analogRead(JOYSTICK_Z);
  joystick[2] = map(joystick[2],0,1023,1,180);
  joystick[3] = digitalRead(2);
 
  radio.write( joystick, sizeof(joystick) );
}

 

Приемник:

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
Servo myservo;
Servo myservo2;
#define CE_PIN  9
#define CSN_PIN 10
int pwm = 0;
const uint64_t pipe = 0xE8E8F0F0E1LL;
RF24 radio(CE_PIN, CSN_PIN);
int joystick[4];
void setup() 
{
 
  delay(1000);
 
  radio.begin();
  radio.openReadingPipe(1,pipe);
  radio.startListening();;
  myservo.attach(4);
  myservo2.attach(8);
  pinMode(2, OUTPUT);
}


void loop() 
{
  if ( radio.available() )
  {
   
    bool done = false;
    while (!done)
    {
      done = radio.read( joystick, sizeof(joystick) );
     
      myservo.write(joystick[0]);
      myservo2.write(joystick[2]);
      digitalWrite(2, !joystick[3]);
     
     
    if(joystick[1]==512)
{    analogWrite(3,0);
    analogWrite(5,0);
}

if(joystick[1]>524)
{  pwm = map(joystick[1], 524,1024,10,255);
    analogWrite(5,0);
    analogWrite(3,pwm);
}
if(joystick[1]<500)
{  pwm = map(joystick[1],500,0,10,255);
    analogWrite(3,0);
    analogWrite(5,pwm);
}
     
     
  }
  }
  else
  {   
   
  }

  }

 

zsm@nxt.ru
Offline
Зарегистрирован: 27.05.2013

Вы бы кинули лучше ссылку на тему форума где код взяли там подробней про подключение расписано:)

http://forum.amperka.ru/threads/arduino-%D0%B8-nrf24l01-%D0%BD%D1%83%D0%B6%D0%BD%D0%B0-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C-%D1%81-%D0%BA%D0%BE%D0%B4%D0%BE%D0%BC.2937/page-2

 

vankenshtein
Offline
Зарегистрирован: 15.04.2014

Прошу прощения. 

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

А что нужно подправить в коде, чтобы использовать l298n для двигателя?