Robot Radio RF With Joystick
by micheleborsaro in Circuits > Arduino
1161 Views, 12 Favorites, 0 Comments
Robot Radio RF With Joystick
A very simple robot commanded by RF remote controll, I use:
For joystik (transmitter)
-arduino nano
-RF module
-connectors
For robot (receiver)
Arduino UNO
-RF module
-Motor scheld
-connector
Code for Robot - Reciver or RX
//***********************
// 2 motors and Joystik
// motors on motor sheld
//**********************
//Libbrerie e costanti
#include <VirtualWire.h>
//pin for led
#define LED_pin4 4 // avanti GIALLO go yellow
#define LED_pin5 5 // indietro BLU bo back BLU
#define LED_pin6 6 // destra VERDE right green
#define LED_pin7 7 // sinistra ROSSO left RED
// pin del ricevitore pin of RX
#define RX_pin 2
// pin direzione e velocità del motore sinistro, dir and power of left motor
int pinDirS = 13;
int pinVelS = 11;
// pin direzione e velocità del motore destro,dir and power of right motor
int pinDirD = 12;
int pinVelD = 3;
void setup()
{
Serial.begin(38400);
// PIN PER SEGNALARE QUELLO CHE ARRIVA DAL JOYSTIK ACCENDENDO I LED
// this pin is for see the signal from joystik
pinMode(LED_pin4, OUTPUT);
pinMode(LED_pin5, OUTPUT);
pinMode(LED_pin6, OUTPUT);
pinMode(LED_pin7, OUTPUT);
// spengo tutti i led, all led off
digitalWrite(LED_pin4, LOW);
digitalWrite(LED_pin5, LOW);
digitalWrite(LED_pin6, LOW);
digitalWrite(LED_pin7, LOW);
vw_set_rx_pin(RX_pin);
//Non servirebbe: il default è 11
vw_setup(3000); // Bits per sec vw_rx_start();
// Inizio il processo di ricezione
Serial.println("Ricevitore attivo: ");
// imposto i pin del motore sinistro, left motor
pinMode(pinDirS, OUTPUT);
pinMode(pinVelS, OUTPUT);
// imposto i pin del motore destro, right motor
pinMode(pinDirD, OUTPUT);
pinMode(pinVelD, OUTPUT);
}
void loop(){
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) // Non-blocking
{ buf[buflen]='\0'; // Metto il terminatore di stringa
if (strncmp((char *)buf,"Alto",buflen)==0) { avanza();
}
if (strncmp((char *)buf,"Basso",buflen)==0) { indietro();
}
if (strncmp((char *)buf,"Destra",buflen)==0){ giraDX();
}
if (strncmp((char *)buf,"Sinistra",buflen)==0){ giraSX();
}
else if (strncmp((char *)buf,"Bottone",buflen)==0) ferma();
Serial.print("Comando Ricevuto (" +String(buflen)+" car.): ");
Serial.println((char *)buf+String("//"));
}
}
//function
void avanza(){
Serial.println("Avanzo");
digitalWrite(LED_pin4, HIGH); // Accendo il LED 4 giallo
digitalWrite(LED_pin5, LOW); // Spengo il LED 5
digitalWrite(LED_pin6, LOW); // Spengo il LED 6
digitalWrite(LED_pin7, LOW); // Spengo il LED 7
digitalWrite(pinDirS, HIGH);
digitalWrite(pinDirD, HIGH);
analogWrite(pinVelS, 255);
analogWrite(pinVelD, 255);
}
void indietro(){
Serial.println("Indietro");
digitalWrite(LED_pin4, LOW); // Spengo il LED
digitalWrite(LED_pin5, HIGH); // Accendo il LED 5 blu
digitalWrite(LED_pin6, LOW); // Spengo il LED 6
digitalWrite(LED_pin7, LOW); // Spengo il LED 7
digitalWrite(pinDirS, LOW);
digitalWrite(pinDirD, LOW);
analogWrite(pinVelS, 255);
analogWrite(pinVelD, 255);
}
void giraDX(){
Serial.println("Giro a DX");
digitalWrite(LED_pin4, LOW); // Spengo il LED 4
digitalWrite(LED_pin5, LOW); // Spengo il LED 5
digitalWrite(LED_pin6, HIGH); //Accendo il LED 6 verde
digitalWrite(LED_pin7, LOW); // Spengo il LED 7
digitalWrite(pinDirS, LOW);
digitalWrite(pinDirD, HIGH);
analogWrite(pinVelS, 255);
analogWrite(pinVelD, 255);
}
void giraSX(){
Serial.println("Giro a SX");
digitalWrite(LED_pin4, LOW); // Spengo il LED 4
digitalWrite(LED_pin5, LOW); // Spengo il LED 5
digitalWrite(LED_pin6, LOW); // Spengo il LED 6
digitalWrite(LED_pin7, HIGH); //Accendo il LED 7 rosso
digitalWrite(pinDirS, HIGH);
digitalWrite(pinDirD, LOW);
analogWrite(pinVelS, 255);
analogWrite(pinVelD, 255);
}
void ferma(){
Serial.println("Mi fermo");
digitalWrite(LED_pin4, LOW); // Spengo il LED 7
digitalWrite(LED_pin5, LOW); // Spengo il LED 4
digitalWrite(LED_pin6, LOW); // Spengo il LED 6
digitalWrite(LED_pin7, LOW); // Spengo il LED 5
digitalWrite(pinDirS, HIGH);
digitalWrite(pinDirD, HIGH);
analogWrite(pinVelS,0);
analogWrite(pinVelD,0);
}
Code for Joystik or TX
#include <VirtualWire.h>
#define TX_pin 12 //pin del trasmettitore
#define LED_pin 10 // pin del led di conferma spedizione
#define asseX A0
#define asseY A1
#define bottone 3
const char *Alto = "Alto";
const char *Basso = "Basso";
const char *Destra = "Destra";
const char *Sinistra = "Sinistra";
const char *Bottone = "Bottone";
void setup() {
Serial.begin(38400);
pinMode(LED_pin,OUTPUT);
pinMode( asseX,INPUT );
pinMode( asseY,INPUT );
pinMode( bottone,INPUT );
digitalWrite(LED_pin, LOW);
vw_set_tx_pin(TX_pin); // Imposto il pin per la trasmissione
vw_setup(9000); // Bits per sec
}
void loop() {
if (analogRead(asseX)<100){ vw_send((uint8_t *)Alto, strlen(Sinistra));
Serial.println( "Sinistra" );
vw_wait_tx(); // Aspetta che il processo in background di spedizione sia completo }
else if (analogRead(asseX)>900){ vw_send((uint8_t *)Destra, strlen(Destra));
Serial.println( "Destra" );
vw_wait_tx(); // Aspetta che il processo in background di spedizione sia completo }
else if (analogRead(asseY)<100){ vw_send((uint8_t *)Basso, strlen(Basso));
Serial.println( "Basso" );
vw_wait_tx(); // Aspetta che il processo in background di spedizione sia completo }
else if (analogRead(asseY)>700){ vw_send((uint8_t *)Alto, strlen(Alto));
Serial.println( "Alto" );
vw_wait_tx(); // Aspetta che il processo in background di spedizione sia completo
digitalWrite(LED_pin, HIGH); }
else if (digitalRead(bottone)==0){ vw_send((uint8_t *)Bottone, strlen(Bottone));
Serial.println( "Bottone" );
vw_wait_tx(); // Aspetta che il processo in background di spedizione sia completo
digitalWrite(LED_pin, HIGH); }
delay( 200 );
}