Ho provato e funziona tutto, grazie
Mi manca un'ultima cosa: voglio usare lo smartphone come joystik per una robot car, 2 motori il problema è che non riesco a vedere la scheda HC-05 montata sulla robot car.
Allego di seguito il codice:
Ho provato con varie appl, Arduino BLue, BLEJoystik, ho impostato la HC-05 come slave, ma non la vedo. Ho impostato come ingressi TX,RX quelli di default 0, 1. Non so se sbaglio qualcosa nel codice,.
Sapete dirmi una applicazione per IOS o Androis ed un tutorial su come settare i comandi, perchè non capisco come in che ordine le varie appl inviano i comandi.
Grazie
//*****************************************************************************************
//Definisco le costanti con Define; sono i contatti nel modulo L298 (enA, in1, in2 per il motore Left, gli altri per l'eventuale motore Right)
#include <SoftwareSerial.h>
int enA = 11;
int in1 = 5;
int in2 = 6;
int enB = 10;
int in3 = 7;
int in4 = 8;
int xAxis;
int yAxis;
int x = 0;
int y = 0;
// Variabili e libreria per il sensore ad ultrasuoni
#include <NewPing.h>
#define TRIGGER_PIN 12 // Pin di arduino collegato al pin "TRIGGER" del sensore a ultrasuoni
#define ECHO_PIN 11 // Pin di arduino collegato al pin "ECHO" del sensore a ultrasuoni
#define MAX_DISTANCE 200 // Massima distanza del ping (in centimetri)
// La massima distanza supportata è circa 400-500 cm
//*****************************************************************************************
void setup() {
Serial.begin(9600);
// Read the incoming data from the Joystick, or the master Bluetooth device, legge x scalato 0-255 (1 Byte)
//Set le uscite del modulo L298N; sono tutti visti come output da Arduino
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
digitalWrite(enA, LOW);
digitalWrite(enB, LOW);
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
Serial.begin(9600); // Default communication rate of the Bluetooth module
}
//*****************************************************************************************
void loop() {
if (Serial.available() >= 2) {
x = Serial.read();
delay(10);
y = Serial.read();
xAxis = map(x, 0, 255, 0, 1023); // Legge il valore x dalla seriale e lo scala in 0-1023. Questo sarà il valore di comando sinistra/destra
yAxis = map(y, 0, 255, 0, 1023); // Come sopra, ma sarà ilvalore di comando sinistra/destra
}
//*****************************************************************************************
// y-axis used for forward and backward control
if (yAxis < 470) {
// Set Motor Left backward
digitalWrite(enA, HIGH);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// Set Motor Right backward
digitalWrite(enB, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
}
else if (yAxis > 550) {
// Set Motor A forward
digitalWrite(enA, HIGH);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
// Set Motor Right backward
digitalWrite(enB, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
}
//*****************************************************************************************
// X-axis used for left and right control
// X-axis used for forward and backward control
if (xAxis < 470) {
// Set Motor Left Stop to rotate the machine on the left
digitalWrite(enA, LOW);
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
// Set Motor Right forward to rotate the machine on the left
digitalWrite(enB, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, HIGH);
}
else if (xAxis > 550) {
// Set Motor Left forward to rotate the machine on the right
digitalWrite(enA, HIGH);
digitalWrite(in1, HIGH);
digitalWrite(in2, HIGH);
// Set Motor Right Stop to rotate the machine on the right
digitalWrite(enB, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
//*****************************************************************************************
// Logica del sensore HS-SR4 a ultrasuoni
delay(50); // effettuo 20 ping al secondo. 29ms è il ritardo minimo ammesso tra 2 ping.
unsigned int uS = sonar.ping_cm(); // Invia il ping e determina in cm di distanza (uS).
if (uS < 15) {
digitalWrite (enA,LOW); // se l'ostacolo è a meno di 15 cm spengi i motori
digitalWrite (enB,LOW); // se l'ostacolo è a meno di 15 cm spengi i motori
}
else {
digitalWrite (enA,HIGH);
digitalWrite (enB,HIGH);
}