// Includiamo la libreria
#include <SoftwareSerial.h>
// Istanziamo l'oggetto SoftwareSerial per controllare il bluetooth
SoftwareSerial hc06(2,3);
// Definizione dei pin EnA ed EnB per il controllo della velocità
int VelocitàMotore1 = 5;
int VelocitàMotore2 = 6;
// Definizione dei pin di controllo della rotazione dei motori In1, In2, In3 e In4
int Motor1A = 13;
int Motor1B = 12;
int Motor2C = 8;
int Motor2D = 10;
// Definizione dei pin delle luci e del clacson
int LuzCarroFrontal1 = 4;
int LuzCarroFrontal2 = 9;
int LuzCarroTrasera1 = 11;
int Bocina = 7;
// Definizione della velocità iniziale dei motori
int velocitàMotore = 80;
// Variabile per catturare il comando che arriva dall'app
String cmd="";
void setup(){
// Monitor seriale
[Link](9600);
// Porta Serial Bluetooth
[Link](9600);
// Modo di pin delle luci
pinMode(LuzCarroFrontal1,OUTPUT);
pinMode(LuzCarroFrontal2,OUTPUT);
pinMode(LuzCarroTrasera1, OUTPUT);
Modalità del pin dell'altoparlante
pinMode(Bocina, OUTPUT);
// Impostiamo la modalità dei pin del controllo dei motori
pinMode(Motor1A, OUTPUT);
pinMode(Motor1B,OUTPUT);
pinMode(Motor2C,OUTPUT);
pinMode(Motor2D,OUTPUT);
pinMode(VelocidadMotor1, OUTPUT);
pinMode(VelocidadMotor2, OUTPUT);
// Configuriamo la velocità dei due motori
analogWrite(VelocitàMotore1, velocitàMotore);
analogWrite(VelocitàMotore2, velocitàMotore);
}
vuoto ciclo() {
// Leggiamo i dati ricevuti
while([Link]()>0){
cmd+=(char)[Link]();
}
// Programmiamo ciascuna delle azioni da eseguire in base al comando ricevuto
se(cmd!=""){
cmd = cmd[0];
se(cmd == "S"){
fermaAuto();
}else
se(cmd == "F"){
muoviAvantiauto();
}else
se(cmd == "B"){
muoviIndietroAuto();
} else
se(cmd == "L"){
giraASinistraAuto();
}else
se(cmd == "R"){
giraADestraAuto();
}
se(cmd == "G"){
moveForwardLeft();
}else
se(cmd == "I"){
muoviAvantiDestra();
} else
se(cmd == "H"){
muoviIndietroASinistra();
} else
se(cmd == "J"){
muoviIndietroASdestra();
}
se(cmd == "W"){
digitalWrite(LuzCarroFrontal1, ALTO);
digitalWrite(LuzCarroFrontal2, ALTO);
}else
se(cmd == "w"){
digitalWrite(LuzCarroFrontal1, BASSO);
digitalWrite(LuzCarroFrontal2, BASSO);
} else
se(cmd == "U"){
digitalWrite(LuzCarroTrasera1, ALTO);
}else
se(cmd == "u"){
digitalWrite(LuzCarroTrasera1, BASSO);
} else
se(cmd == "X"){
digitalWrite(LuzCarroTrasera1, ALTO);
digitalWrite(LuzCarroFrontal1, ALTO);
digitalWrite(LuzCarroFrontal2, HIGH);
} else
se(cmd == "x"){
digitalWrite(LuzCarroTrasera1, BASSO);
digitalWrite(LuzCarroFrontal1, BASSO);
digitalWrite(LuzCarroFrontal2, BASSO);
} else
se(cmd == "V"){
digitalWrite(Bocina, ALTO);
}else
se(cmd == "v") {
digitalWrite(Bocina, BASSO);
} else
se(cmd == "0") {
speedMotor = 80;
analogWrite(VelocitàMotore1, velocitàMotore);
analogWrite(VelocidadMotor2, velocitàMotore);
}else
se(cmd == "1"){
speedMotor = 90;
analogWrite(VelocidadMotor1, speedMotor);
analogWrite(VelocitàMotore2, velocitàMotore);
}else
se(cmd == "2"){
speedMotor = 100;
analogWrite(VelocitàMotore1, velocitàMotore);
analogWrite(VelocitàMotore2, velocitàMotore);
} else
se(cmd == "3"){
speedMotor = 110;
analogWrite(VelocidadMotor1, speedMotor);
analogWrite(VelocidadMotor2, velocitàMotore);
} else
se(cmd == "4"){
speedMotor = 120;
analogWrite(VelocidadMotor1, speedMotor);
analogWrite(VelocitàMotore2, velocitàMotore);
}else
se(cmd == "5"){
speedMotor = 130;
analogWrite(VelocitàMotore1, velocitàMotore);
analogWrite(VelocidadMotor2, speedMotor);
} else
se(cmd == "6") {
speedMotor = 140;
analogWrite(VelocitàMotore1, velocitàMotore);
analogWrite(VelocidadMotore2, velocitàMotore);
} else
se(cmd == "7"){
speedMotor = 150;
analogWrite(VelocitàMotore1, velocitàMotore);
analogWrite(VelocitàMotore2, velocitàMotore);
}else
se(cmd == "8"){
speedMotor = 160;
analogWrite(VelocitàMotore1, velocitàMotore);
analogWrite(VelocitàMotore2, velocitàMotore);
}
se(cmd == "9"){
speedMotor = 170;
analogWrite(VelocidadMotore1, velocitàMotore);
analogWrite(VelocidadMotor2, speedMotor);
}else
se(cmd == "q"){
speedMotor = 180;
analogWrite(VelocidadMotor1, speedMotor);
analogWrite(VelocitàMotore2, velocitàMotore);
}
// Diamo l'ordine come eseguita e aspettiamo il successivo
cmd="";
}
}
void fermareAuto(){}
// Fermiamo il carrello
digitalWrite(Motor1A, BASSO);
digitalWrite(Motor1B, LOW);
digitalWrite(Motor2C, BASSO);
digitalWrite(Motor2D, BASSO);
}
void turnRightCar(){}
// Configuriamo il senso di rotazione per girare a destra
digitalWrite(Motor1A, ALTO);
digitalWrite(Motor1B, BASSO);
digitalWrite(Motor2C, BASSO);
digitalWrite(Motor2D, BASSO);
}
void girareASinistraAuto() {
// Configuriamo il senso di rotazione per girare a sinistra
digitalWrite(Motor1A, BASSO);
digitalWrite(Motor1B, BASSO);
digitalWrite(Motor2C, BASSO);
digitalWrite(Motor2D, ALTO);
}
void muoviAvantiAuto(){
// Configuriamo il senso di rotazione per avanzare
digitalWrite(Motor1A, ALTO);
digitalWrite(Motor1B, BASSO);
digitalWrite(Motor2C, BASSO);
digitalWrite(Motor2D, ALTO);
}
void muoviAllIndietroAuto(){
// Configuriamo il senso di rotazione per andare indietro
digitalWrite(Motor1A, LOW);
digitalWrite(Motor1B, ALTO);
digitalWrite(Motor2C, ALTO);
digitalWrite(Motor2D, LOW);
}
void muoviAvantiSinistra(){
Giriamo a sinistra mentre avanzamo
analogWrite(VelocidadMotor2, speedMotor + 60);
digitalWrite(Motor1A, ALTO);
digitalWrite(Motor1B, BASSO);
digitalWrite(Motor2C, BASSO);
digitalWrite(Motor2D, ALTO);
ritarda(20);
analogWrite(VelocitàMotore2, velocitàMotore);
}
void muoviAvantiADestra(){
Giriamo a destra mentre avanziamo
analogWrite(VelocidadMotore1, velocitàMotore + 60);
digitalWrite(Motor1A, ALTO);
digitalWrite(Motor1B, BASSO);
digitalWrite(Motor2C, BASSO);
digitalWrite(Motor2D, ALTO);
ritardo(20);
analogWrite(VelocidadMotor1, speedMotor);
}
void muoviIndietroASinistra(){
Giriamo a sinistra mentre retrocediamo
analogWrite(VelocidadMotor2, speedMotor + 60);
digitalWrite(Motor1A, BASSO);
digitalWrite(Motor1B, ALTO);
digitalWrite(Motor2C, ALTO);
digitalWrite(Motor2D, BASSO);
ritardo(20);
analogWrite(VelocitàMotore2, velocitàMotore);
}
void muoviIndietroDestra() {
// Giriamo a destra mentre retrocediamo
analogWrite(VelocitàMotore1, velocitàMotore + 60);
digitalWrite(Motor1A, BASSO);
digitalWrite(Motor1B, HIGH);
digitalWrite(Motor2C, ALTO);
digitalWrite(Motor2D, BASSO);
ritarda(20);
analogWrite(VelocitàMotore1, velocitàMotore);
}