Buenas a toda la comunidad,he empezado a realizar mis pinitos mas serios con arduino,pero me encuentro en un problemilla.
He conseguido con un joystick controlar mi rc con el modula nrf24L01,pero el problema se me presenta cuando intento añadir otro joystick para controlar dos servos.
Utilizo un arduino mega para el coche y un arduino uno para el emisor.
el codigo del emisor es este:
#include <SPI.h>
#include <MIRF.H>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
unsigned int joystick;
byte x, y;
void setup()
{
Mirf.spi = &MirfHardwareSpi;
// inicializacion del dispositivo
Mirf.init();
// Se envia dos bytes cada vez
Mirf.payload = 2;
// seleccionamos el canal
Mirf.channel = 90;
Mirf.config();
// 1MHz
Mirf.configRegister(RF_SETUP, 0x06);
// Seleccionamos dirección de transmision
Mirf.setTADDR((byte *)"12345");
Serial.begin(57600);//podemos monitorizar los datos que enviamos al coche.
}
// enviar dato
void transmit(unsigned int joystick)
{
Mirf.send((byte *)&joystick);
while ( Mirf.isSending() ) ;
}
void loop()
{
x = map(analogRead(5), 0, 1023, 255, 0);
y = map(analogRead(4), 0, 1023, 255, 0);
joystick = (x * 0x100) + y;
transmit(joystick);
delay(100);
Serial.print(x);
Serial.print(" ");
Serial.print(y);
Serial.print(" ");
Serial.println(joystick);
}
y el del coche,gracias a la libreria de coche inteligente y a la shield l298n
#include <CocheDigital.h>
// MOTOR1_CTL1 2 // I1
// MOTOR1_CTL2 4 // I2 MOTOR DERECHO
// MOTOR1_PWM 3 // EA
// MOTOR2_CTL1 6 // I3
// MOTOR2_CTL2 7 // I4 MOTOR IZQUIERDO
// MOTOR2_PWM 5 // EB
CocheDigital CocheDigital(2, 4, 3, 6, 7, 5);
#include <SPI.h>
#include <MIRF.H>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
// Receptor Wireless nRF24L01+
// Conectamos el emisor de la siguiente forma:
// Hardware SPI:
// MISO -> D12
// MOSI -> D11
// SCK -> D13
// CE -> D10
// CSN -> D9
//constantes
#define velocidad_max 200 //valor máximo de velocidad (como maximo->255)
#define velocidad_dir 100 //valor que aumenta o disminuye la velocidad de las ruedas al girar
//aumentando o disminuyendo hacemos que el giro sea más o menos rápido.
//variables
int x, y;
int vel_iz, vel_de;
unsigned int dato;
byte tiempo_sin_recepcion;
void setup() {
tiempo_sin_recepcion = 0;
Mirf.spi = &MirfHardwareSpi;
// inicializacion del dispositivo
Mirf.init();
// Se reciben dos byte cada vez
Mirf.payload = 2;
// seleccionamos el canal
Mirf.channel = 90;
Mirf.config();
// 1MHz
Mirf.configRegister(RF_SETUP, 0x06);
// Seleccionamos dirección de recepcion
Mirf.setRADDR((byte *)"12345"); //longitud max-> 5 caracteres
//debe ser igual en emisor y receptor
Serial.begin(57600); //podemos monitorizar los datos que recibimos del mando.
}
void loop()
{
if ( Mirf.dataReady() )// Esperando recepción
{
tiempo_sin_recepcion = 0;
Mirf.getData((byte *)&dato);
//Serial.write(c);
x = dato / 0x100; //en x tenemos la velocidad y sentido de la marcha
y = dato % 0x100; // en y tenemos el giro a la derecha o izquierda
x = map(x, 0, 255, -velocidad_max, velocidad_max);
y = map(y, 0, 255, -velocidad_dir, velocidad_dir);
Serial.print(x);
Serial.print(" ");
Serial.print(y);
Serial.print(" ");
//Serial.print(dato);
if (x > 0)
{
Serial.print("++"); //avanza
vel_iz = x + y;
vel_de = x - y;
if (vel_iz > velocidad_max) vel_iz = velocidad_max;
if (vel_de > velocidad_max) vel_de = velocidad_max;
if (vel_iz < 0) vel_iz = 0;
if (vel_de < 0) vel_de = 0;
CocheDigital.avanza(vel_iz, vel_de);
}
else
{
Serial.print("--");//retrocede
x = x * (-1);
vel_iz = x + y;
vel_de = x - y;
if (vel_iz > velocidad_max) vel_iz = velocidad_max;
if (vel_de > velocidad_max) vel_de = velocidad_max;
if (vel_iz < 0) vel_iz = 0;
if (vel_de < 0) vel_de = 0;
CocheDigital.retrocede(vel_iz, vel_de);
}
Serial.print(vel_iz);
Serial.print(" ");
Serial.println(vel_de);
}
delay(50);
tiempo_sin_recepcion++;
if (tiempo_sin_recepcion > 10)
{
tiempo_sin_recepcion = 0;
CocheDigital.para(); //no recibimos del mando durante más de medio segundo
}
}
He realizado pruebas y he conectado en el emisor otro joystick,y he conseguido enviar datos al coche,pero no me separa los datos y al final controlo el coche con los dos joystick.
Si alguien pudiera echarme una mano se lo agradeceria de todo corazon,y cuando termine el codigo y el proyecto lo compartire en esta grandiosa comunidad.