Hi all,
as my first real project with Arduino I am putting together a radio controlled two wheeled car.
Remote controller: Arduino Uno board, 1 nRF24L01, 2 joysticks
Controlled car: Arduino Uno board, 1 nRF24L01, 2 DC motor wheels
The values from the joysticks pass from the remote to the car through the antennas smoothly, but the DC motors only turn according to the code when engaged separately. If both joysticks are used at the same time, the motors will turn in different directions, not according to the code (push forward, move clockwise and vice versa).
I've attached the codes from Transmitter and Receiver, and the serial monitors too.
I believe there's a better way to program the DCs, what do you think?
Thanks,
Joe
Transmitter
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 8); // CE, CSN
const byte address[6] = "00001";
int value;
int left = 0;
int right = 0;
int mapleft = 0;
int mapright = 0;
void setup(){
radio.begin();
radio.openWritingPipe(address);
radio.stopListening();
pinMode(A0,INPUT);
pinMode(A1,INPUT);
Serial.begin(9600);
}
void loop(){
left = analogRead(A0);
right = analogRead(A1);
mapleft = map(left, 0, 1023, -255, 255);
mapright = map(right, 0, 1023, -255, 255);
Serial.print("TX ");Serial.print("value[0] ");Serial.print(mapleft);Serial.print(" ");Serial.print("value[1] ");Serial.print(mapright);Serial.print(" ");Serial.print("anlg left - ");Serial.print(left);Serial.print(" ");Serial.print("anlg right - ");Serial.println(right);
int value[4] = {0,0,0,0};
value[0] = mapleft;
value[1] = mapright;
value[2] = left;
value[3] = right;
radio.write(&value, sizeof(value));
}
Receiver
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 8); // CE, CSN
const byte address[6] = "00001";
int value;
int array[4];
int speedleft = 5;
int dir1 = 4;
int dir2 = 2;
int speedright = 6;
int dir3 = 7;
int dir4 = 3;
void setup(){
radio.begin();
radio.openReadingPipe(0, address);
radio.startListening();
pinMode(speedleft,OUTPUT);
pinMode(dir1,OUTPUT);
pinMode(dir2,OUTPUT);
pinMode(speedright,OUTPUT);
pinMode(dir3,OUTPUT);
pinMode(dir4,OUTPUT);
Serial.begin(9600);
}
void loop(){
if (radio.available())
{
char text[32] = " ";
int value[4] = {0,0,0,0};
radio.read(&value, sizeof(value));
Serial.print("RX ");Serial.print("val[0] ");Serial.print(value[0]);Serial.print(" ");Serial.print("val[1] ");Serial.print(value[1]);Serial.print(" ");Serial.print("anlg left - ");Serial.print(value[2]);Serial.print(" ");Serial.print("anlg right - ");Serial.println(value[3]);
if(value[2],value[3] > 500){
digitalWrite(dir1,HIGH);
digitalWrite(dir2,LOW);
analogWrite(speedleft,value[0]);
digitalWrite(dir3,HIGH);
digitalWrite(dir4,LOW);
analogWrite(speedright,value[1]);
}
if(value[2],value[3] <= 500){
digitalWrite(dir1,LOW);
digitalWrite(dir2,HIGH);
analogWrite(speedleft,abs(value[0]));
digitalWrite(dir3,LOW);
digitalWrite(dir4,HIGH);
analogWrite(speedright,abs(value[1]));
}
if(value[2]>500, value[3]<=500){
digitalWrite(dir1,HIGH);
digitalWrite(dir2,LOW);
analogWrite(speedleft,abs(value[0]));
digitalWrite(dir3,LOW);
digitalWrite(dir4,HIGH);
analogWrite(speedright,abs(value[1]));
}
if(value[2]<=500, value[3]>500){
digitalWrite(dir1,LOW);
digitalWrite(dir2,HIGH);
analogWrite(speedleft,abs(value[0]));
digitalWrite(dir3,HIGH);
digitalWrite(dir4,LOW);
analogWrite(speedright,abs(value[1]));
}
}
}
Thank you all in advance,
I'll upload a video tomorrow