Управление машинкой arduino и nrf24l01
- Войдите на сайт для отправки комментариев
Втр, 15/04/2014 - 12:56
Добрый день. Только начинаю осваивать 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]);
}
}
}
Вопрос в том как добавить управление мотором в этот скетч?
а, совсем забыл регуль для двигателя сделан из начинки от сервопривода
ну так и подключай как еще одну серво, на чем затык? В массиве укажи 2 переменные, и распиши так же как с одной у тебя расписано.
В программировании не силен, не могли бы подсказать как в массиве две переменные указать? и как массив передать?
посмотрите здесь
http://arduino.ru/forum/programmirovanie/nrf24l01?page=7#comment-40323
спасибо большое
По примемар написал вот это:
#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];"
Что я сделал не так
Могу предположить что переменная msg уже объявлкна раньше.
Так же я не вижу объявления переменной val
Спасибо Вам большое. Скомпилировалось
#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); }Когда напишу код для приемника,если Вас не затруднит сможете посмотреть тоже?
Приемник
#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]); } } }Добрые люди помогли)) Вот рабочий код, может кому то пригодится
Передатчик
#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 { } }Вы бы кинули лучше ссылку на тему форума где код взяли там подробней про подключение расписано:)
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
Прошу прощения.
А что нужно подправить в коде, чтобы использовать l298n для двигателя?