My Arduino smart car,
control is via WII nunchuk and nrf24l01+
code:
/*
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
/*-----( Declare Constants and Pin Numbers )-----*/
#define CE_PIN 9
#define CSN_PIN 10
const int AIA = 30; // (pwm) pin 9 connected to pin A-IA
const int AIB = 31; // (pwm) pin 5 connected to pin A-IB
const int BIA = 33; // (pwm) pin 10 connected to pin B-IA
const int BIB = 34; // (pwm) pin 6 connected to pin B-IB
const int CIA = 35; // (pwm) pin 9 connected to pin c-Ic
const int CIB = 36; // (pwm) pin 5 connected to pin c-Ic
const int DIA = 37; // (pwm) pin 10 connected to pin d-Id
const int DIB = 38; // (pwm) pin 6 connected to pin d-Id
byte speed = 255; // change this (0-255) to control the speed of the motors
const uint64_t pipe = 0xE8E8F0F0E1LL; // Define the transmit pipe
int led = 13;
int mydata[2];
RF24 radio(CE_PIN, CSN_PIN); // Create a Radio
void setup() {
mydata[0]=0;
pinMode(led, OUTPUT);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();;
pinMode(AIA, OUTPUT); // set pins to output
pinMode(AIB, OUTPUT);
pinMode(BIA, OUTPUT);
pinMode(BIB, OUTPUT);
pinMode(CIA, OUTPUT); // set pins to output
pinMode(CIB, OUTPUT);
pinMode(DIA, OUTPUT);
pinMode(DIB, OUTPUT);
stopnow();
}
void loop() {
mydata[0]=0;
if ( radio.available() )
{
// Read the data payload until we've received everything
bool done = false;
while (!done)
{
// Fetch the data payload
done = radio.read( mydata, sizeof(mydata) );
Serial.print(" mydata: ");
Serial.println(mydata[0]);
// Serial.print(" Y = ");
// Serial.println(joystick[1]);
digitalWrite(led, HIGH);
// delay(100);
}
}
else
{
// Serial.println("No radio available");
digitalWrite(led, LOW);
// delay(100);
}
if (mydata[0]==1) forward();
if (mydata[0]==2) backward();
if (mydata[0]==3) left();
if (mydata[0]==4) right();
if (mydata[0]==0) stopnow();
delay(40);
}
void stopnow()
{
analogWrite(AIA, 0);
analogWrite(AIB, 0);
analogWrite(BIA, 0);
analogWrite(BIB, 0);
analogWrite(CIA, 0);
analogWrite(CIB, 0);
analogWrite(DIA, 0);
analogWrite(DIB, 0);
}
void backward()
{
analogWrite(AIA, speed);//left top
analogWrite(AIB, 0);
analogWrite(BIA, speed);//right top
analogWrite(BIB, 0);
analogWrite(CIA, 0);
analogWrite(CIB, speed);
analogWrite(DIA, 0);
analogWrite(DIB, speed);
}
void forward()
{
analogWrite(AIA, 0);//left top
analogWrite(AIB, speed);
analogWrite(BIA, 0);//right top
analogWrite(BIB, speed);
analogWrite(CIA, speed);
analogWrite(CIB, 0);
analogWrite(DIA, speed);
analogWrite(DIB, 0);
}
void left()
{
analogWrite(AIA, speed);
analogWrite(AIB, 0);
analogWrite(BIA, 0);
analogWrite(BIB, speed);
analogWrite(CIA, 0);
analogWrite(CIB, speed);
analogWrite(DIA, speed);
analogWrite(DIB, 0);
}
void right()
{
analogWrite(AIA, 0);
analogWrite(AIB, speed);
analogWrite(BIA, speed);
analogWrite(BIB, 0);
analogWrite(CIA, speed);
analogWrite(CIB, 0);
analogWrite(DIA, 0);
analogWrite(DIB, speed);
}