Arduino Remote Controlled Car Code

Arduino Remote Controlled Car Code

// Receiver PART

/* By Roee Bloch nRF24L01 Receive Joystick values


--MY CAR V 1_3
   TOUCH buttons A0 and A1.
   A0 = Forward
   A1 = Backword
   A0 && A1 = TURN Right
   Connection - each of A0,A1 - connect with 100K Resistor to GND
   Add 5V VCC - so if you between A0 to VCC with Finger command will work
   Same between A1 to VCC - just touch
   if you touch all together A0,A1 both to VCC with Finger it will turn


 - CONNECTIONS: nRF24L01 Modules See:
 http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo
   1 - GND
   2 - VCC 3.3V !!! NOT 5V
   3 - CE to Arduino pin 9
   4 - CSN to Arduino pin 10
   5 - SCK to Arduino pin 13
   6 - MOSI to Arduino pin 11
   7 - MISO to Arduino pin 12
   8 - UNUSED

 - V1.00 11/26/13
   Based on examples at http://www.bajdi.com/
   Questions: terry@yourduino.com */

// Digital read from 4 keys (up to 16 values)

#define KEY1 0
#define KEY2 0
#define KEY3 0
#define KEY4 0

/*-----( Import needed libraries )-----*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
/*-----( Declare Constants and Pin Numbers )-----*/
#define CE_PIN   9
#define CSN_PIN 10

// NOTE: the "LL" at the end of the constant is "LongLong" type
const uint64_t pipe = 0xE8E8F0F0E1LL; // Define the transmit pipe


/*-----( Declare objects )-----*/
RF24 radio(CE_PIN, CSN_PIN); // Create a Radio
/*-----( Declare Variables )-----*/

// array of my reading values, since NRF2401 in this mode return an array
int mykeys[] = {KEY1, KEY2, KEY3, KEY4}; // keys

void setup()   /****** SETUP: RUNS ONCE ******/
{
  Serial.begin(57600);
  delay(1000);

  pinMode(3, OUTPUT); // just for test during debug mode
  pinMode(4, OUTPUT); // control wheels1 H-bridge 1
  pinMode(5, OUTPUT); // control wheels1 H-bridge 1
  pinMode(6, OUTPUT); // control wheels2 H-bridge 2
  pinMode(7, OUTPUT); // control wheels2 H-bridge 2

  Serial.println("Nrf24L01 Receiver Starting");
  radio.begin();
  radio.openReadingPipe(1, pipe);
  radio.startListening();
}//--(end setup )---


void loop()   /****** LOOP: RUNS CONSTANTLY ******/
{

  if ( radio.available() )
  {
    // Read the data payload until we've received everything
    bool done = false;
    while (!done)
    {
      // Fetch the data payload
      done = radio.read( mykeys, sizeof(mykeys) );
      Serial.print("KEY1 = ");
      if ((mykeys[0] == 1) && (mykeys[1] == 0) )
      {
        digitalWrite(3, HIGH);
        forward();
        Serial.println("FORWARD");
      }

      if ((mykeys[1] == 1) && (mykeys[0] == 0))
      {
        digitalWrite(3, HIGH);
        backword();
        Serial.println("BACKWORD");
      }

      if ((mykeys[1] == 1) && (mykeys[0] == 1))
      {
        digitalWrite(3, HIGH);
        right();
        Serial.println("RIGHT");
      }

      if ((mykeys[0] == 0) && (mykeys[1] == 0) && (mykeys[2] == 0))
        mystop();
      Serial.println(mykeys[0]);
      Serial.print(" KEY2= ");
      Serial.println(mykeys[1]);
      Serial.print(" KEY3= ");
      Serial.println(mykeys[2]);
      Serial.print(" KEY4= ");
      Serial.println(mykeys[3]);
    }
  }
  else
  {
    Serial.println("No radio available");
    mykeys[0] = 0;
    mykeys[1] = 0;
    mykeys[2] = 0;
    mykeys[3] = 0;

  }

}//--(end main loop )---

/*-----( Declare User-written Functions )-----*/

//NONE
//*********( THE END )***********
void mystop()
{
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);

}
void forward()
{
  digitalWrite(4, LOW);
  digitalWrite(5, HIGH);
  digitalWrite(6, LOW);
  digitalWrite(7, HIGH);

}
void backword()
{
  digitalWrite(4, HIGH);
  digitalWrite(5, LOW);
  digitalWrite(6, HIGH);
  digitalWrite(7, LOW);

}
void right()
{
  digitalWrite(4, HIGH);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, HIGH);

}

//Transmitter Part

/* YourDuinoStarter Example: nRF24L01
Modified by Roee Bloch to CAR
using just KEY1 and KEY2
   TOUCH buttons A0 and A1.
   A0 = Forward
   A1 = Backword
   A0 && A1 = TURN Right
   Connection - each of A0,A1 - connect with 100K Resistor to GND
   Add 5V VCC - so if you between A0 to VCC with Finger command will work
   Same between A1 to VCC - just touch
   if you touch all together A0,A1 both to VCC with Finger it will turn
Transmit Joystick values
 - WHAT IT DOES: Reads Analog values on A0, A1 and transmits
   them over a nRF24L01 Radio Link to another transceiver.
 - SEE the comments after "//" on each line below
 - CONNECTIONS: nRF24L01 Modules See:
 http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo
   1 - GND
   2 - VCC 3.3V !!! NOT 5V
   3 - CE to Arduino pin 9
   4 - CSN to Arduino pin 10
   5 - SCK to Arduino pin 13
   6 - MOSI to Arduino pin 11
   7 - MISO to Arduino pin 12
   8 - UNUSED
   -
   Analog Joystick or two 10K potentiometers:
   GND to Arduino GND
   VCC to Arduino +5V
   X Pot to Arduino A0
   Y Pot to Arduino A1

 - V1.00 11/26/13
   Based on examples at http://www.bajdi.com/
   Questions: terry@yourduino.com */

/*-----( Import needed libraries )-----*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
/*-----( Declare Constants and Pin Numbers )-----*/
#define CE_PIN   9
#define CSN_PIN 10
#define KEY1 A0
#define KEY2 A1
#define KEY3 A2
#define KEY4 A3
#define TRESHHOLD 20

// NOTE: the "LL" at the end of the constant is "LongLong" type
const uint64_t pipe = 0xE8E8F0F0E1LL; // Define the transmit pipe


/*-----( Declare objects )-----*/
RF24 radio(CE_PIN, CSN_PIN); // Create a Radio
/*-----( Declare Variables )-----*/
int mykeys[] = {KEY1, KEY2, KEY3, KEY4}; // up to 8 keys

void setup()   /****** SETUP: RUNS ONCE ******/
{
  Serial.begin(57600);
  radio.begin();
  pinMode(10, OUTPUT);
  pinMode(6, OUTPUT);
  radio.openWritingPipe(pipe);
}//--(end setup )---


void loop()   /****** LOOP: RUNS CONSTANTLY ******/
{
  int key1, key2, key3, key4;

  digitalWrite(6, HIGH);
  if (analogRead(KEY1) > TRESHHOLD)
    key1 = 1;
  else
    key1 = 0;

  if (analogRead(KEY2) > TRESHHOLD)
    key2 = 1;
  else
    key2 = 0;

  if (analogRead(KEY3) > TRESHHOLD)
    key3 = 1;
  else
    key3 = 0;

  if (analogRead(KEY4) > TRESHHOLD)
    key4 = 1;
  else
    key4 = 0;

  Serial.print("1: ");
  Serial.println(key1);
  Serial.print("2: ");
  Serial.println(key2);
  Serial.print("3: ");
  Serial.println(key3);
  Serial.print("4: ");
  Serial.println(key4);
  mykeys[0] = key1;
  mykeys[1] = key2;
  mykeys[2] = key3;
  mykeys[3] = key4;
  //  tx=key1+2*key2+4*key3+8*key4;
  radio.write( mykeys, sizeof(mykeys) );

}//--(end main loop )---

/*-----( Declare User-written Functions )-----*/

//NONE
//*********( THE END )***********

Video based on this code: Arduino Wireless Car Project Video

Arduino Nano Ebay Link Arduino Nano
Arduino Uno Ebay link Arduino Uno
Arduino Mega2560 Ebay link Arduino Mega 2560
Arduino Pro-mini ebay link Arduino Pro Mini

Parts for this Project: