Se non ho capito male, devi fare la cosa più banale del mondo, cioè comandare il robot tramite un radiocomando.
In questo caso, ti passo questo codice che avevo scritto un po' di tempo fa, praticamente legge i valori dalla ricevente che ovviamente cambiano in base ai movimenti degli stick del radiocomando e poi li scrive in un display seriale.
Basta che ti tiri fuori le poche righe di codice che ti servono.
Ciao.
#include <Servo.h>
#include <SoftwareSerial.h>
#define throttle 2
#define gear 4
#define elev 5
#define rudder 6
#define aile 7
#define rxPin 8
#define txPin 9
double throttleVal = 0; // Variabile motore sinistro
double gearVal = 0; // Variabile motore sinistro
double elevVal = 0; // Variabile motore sinistro
double rudderVal = 0; // Variabile motore sinistro
double aileVal = 0; // Variabile motore sinistro
// Servo left;
// Servo right;
SoftwareSerial SerialDisplay = SoftwareSerial(rxPin, txPin);
void setup()
{
pinMode(throttle, INPUT);
pinMode(gear, INPUT);
pinMode(elev, INPUT);
pinMode(rudder, INPUT);
pinMode(aile, INPUT);
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
// Serial.begin(9600);
SerialDisplay.begin(9600);
// SerialDisplay.print(char(21);
SerialDisplay.print(char(14));
SerialDisplay.print(char(12));
SerialDisplay.print(char(12));
SerialDisplay.print(char(20));
SerialDisplay.print(char(255));
SerialDisplay.print(char(19));
SerialDisplay.print(char(64));
// Serial.print("^N");
// Serial.print("^T");
// Serial.print(0xFF);
// right.attach(9);
// left.attach(10);
}
void loop()
{
for (int i = 0;i < 6; i++)
{
throttleVal = throttleVal + pulseIn(throttle, HIGH); // lettura ricevente canale motore sx
gearVal = gearVal + pulseIn(gear, HIGH); //lettura ricevente motore dx
elevVal = elevVal + pulseIn(elev, HIGH); //lettura ricevente motore dx
rudderVal = rudderVal + pulseIn(rudder, HIGH); //lettura ricevente motore dx
aileVal = aileVal + pulseIn(aile, HIGH); //lettura ricevente motore dx
if (i == 5)
{
throttleVal = throttleVal / 5;
gearVal = gearVal / 5;
elevVal = elevVal / 5;
rudderVal = rudderVal / 5;
aileVal = aileVal / 5;
// Serial.print("Elev -> ");
// Serial.print(elevVal);
// Serial.print(" throttle -> ");
// Serial.print(throttleVal);
// Serial.print(" Gear -> ");
// Serial.print(gearVal);
// Serial.print(" Aile -> ");
// Serial.print(aileVal);
// Serial.print(" Rudder -> ");
// Serial.println(rudderVal);
/* SerialDisplay.print("Elev -> ");
delay(2000);
SerialDisplay.print(int(elevVal));
SerialDisplay.print(" throttle -> ");
SerialDisplay.print(int(throttleVal));
SerialDisplay.print(" Gear -> ");
SerialDisplay.print(int(gearVal));
SerialDisplay.print(" Aile -> ");
SerialDisplay.print(int(aileVal));
SerialDisplay.print(" Rudder -> ");
SerialDisplay.print(int(rudderVal));*/
break; //faccio una media dei valori perchè sono leggermente oscillanti
}
}
// Prima riga
SerialDisplay.print(char(17));
SerialDisplay.print(char(0));
SerialDisplay.print(char(0));
SerialDisplay.print("TH=");
SerialDisplay.print(int(throttleVal));
SerialDisplay.print(" EL=");
SerialDisplay.print(int(elevVal));
// Seconda riga
SerialDisplay.print(char(17));
SerialDisplay.print(char(1));
SerialDisplay.print(char(0));
// SerialDisplay.print(int(gearVal));
SerialDisplay.print("AL=");
SerialDisplay.print(int(aileVal));
SerialDisplay.print(" RU=");
SerialDisplay.print(int(rudderVal));
SerialDisplay.print(char(17));
SerialDisplay.print(char(0));
SerialDisplay.print(char(15));
if (gearVal > 2000) SerialDisplay.print("G");
else SerialDisplay.print("g");
// SerialDisplay.print(int(gearVal));
// SerialDisplay.print("Ciao ");
// delay(2000);
/*
// *** comando servo sinistro
// stick in avanti
if (leftVal > 2200) left.write(180); // gira in senso orario
//stick in indietro
if (leftVal < 1800) left.write(0); // gira in senso antiorario
// stick al centro
if (leftVal > 1800 && leftVal < 2500) left.write(90); //stai fermo
// *** comando servo destro
//stick avanti
if (rightVal > 2200) right.write(0); // gira in senso orario
//stick indietro
if (rightVal < 1800) right.write(180); // gira in senso antiorario
//stick al centro
if (rightVal > 1800 && rightVal < 2500) right.write(90); //fermo
*/
}