Buona sera a tutti, ho da poco sviluppato un "rover" che riesce a muoversi in modo del tutto autonomo, ho montato su di esso alcuni sensori, in più è presente un modulo bluetooth su di esso, funziona tutto benissimo se non per il fatto che non riesco in alcun modo a mandare i dati dei sensori dal microcontrollore ad un app con monitor seriale sullo smartphone, credo che il problema sia il servomotore in quanto,se non collegato sembra non dare problemi..ho provato a cambiare le porte sia del servomotore che del modulo bluetooth ma non è cambiato nulla, a questo punto ho pensato fosse un problema riguardo al codice..qualcuno sa come posso ovviare a questo problema? è come se il servomotore non appena entra in funzione fa impazzire il modulo bluetooth. Ringrazio in anticipo allego il codice utilizzato.
Buona serata
#include <NewPing.h> // libreria HC-SR04
#include <Wire.h> // libreria per i2c
#include <Servo.h> // libreria Servomotore
#include <SoftwareSerial.h> // libreria Bluetooth
#include <DHT.h>
#define TRIGGER_PIN 12 // definizione pin TRIGGER HC-SR04
#define ECHO_PIN 13 // definizione pin ECHO HC-SR04
#define MAX_DISTANCE 200 // definizione massima distanza rilevabile HC-SR04
#define DHTPIN 9
#define DHTTYPE DHT11
#define TRIGGER_PINA 2 // definizione pin TRIGGER HC-SR04
#define ECHO_PINA 4 // definizione pin ECHO HC-SR04
#define MAX_DISTANCE 200 // definizione massima distanza rilevabile HC-SR04
Servo myservo; // dichiarazione comando Servomotore
SoftwareSerial BT(10,11 ); // RX, TX // dichiarazione pin di trasmissione e ricezione per il Bluetooth
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // dichiarazione comando per HC-SR04
NewPing sonara(TRIGGER_PINA, ECHO_PINA, MAX_DISTANCE); // dichiarazione comando per HC-SR04
DHT dht(DHTPIN, DHTTYPE);
int Val;
int Vout;
int Rfot;
int leftspeed = 255; //255 is maximum speed
int rightspeed = 255;
int E1 = 6; //M1 Speed Control
int E2 = 5; //M2 Speed Control
int M1 = 8; //M1 Direction Control
int M2 = 7; //M2 Direction Control // dichiarazione comando per HC-SR04
int distanza = 0;
int distanza1=0;
void setup() {
int i;
for (i = 5; i <= 8; i++)
pinMode(i, OUTPUT);
Serial.begin(9600); // inizializza comunicazione seriale COM a 9600 BAUD
BT.begin(9600); // inizializza comunicazione seriale Bluetooth a 9600 BAUD
myservo.attach(3); // pin utilizzato per la gestione del Servomotore
myservo.write(100);
delay(2000);
distanza = sonar.ping_cm();
delay(100);
distanza = sonar.ping_cm();
delay(100);
distanza = sonar.ping_cm();
delay(100);
distanza = sonar.ping_cm();
delay(100);
distanza1 = sonara.ping_cm();
delay(100);
distanza1 = sonara.ping_cm();
delay(100);
distanza1 = sonara.ping_cm();
delay(100);
distanza1 = sonara.ping_cm();
delay(100);
}
void loop() {
Val= analogRead(0);
Vout= (5*Val)/1023;
Rfot= (10000*Vout)/(5-Vout);
int t = dht.readTemperature();
int h = dht.readHumidity();
BT.print("Temperatura:");
BT.println(t);
BT.print("Umidità:");
BT.println(h);
delay(15000);
if(Val>0 && Val<255){
BT.print("Intensità luminosa:");
BT.println("Ambiente buio");
delay(15000);
}
if (Val>255 && Val<512){
BT.print("Intensità luminosa:");
BT.println("Ambiente poco luminoso");
delay(15000);
}
if(Val>512 && Val<768){
BT.print("Intensità luminosa:");
BT.println("Ambiente Luminoso");
delay(15000);
}
if (Val>768){
BT.print("Intensità luminosa:");
BT.println("Ambiente molto luminoso");
delay(15000);
}
delay(150);
int distanza=sonar.ping_cm();
delay(150);
int distanza1=sonara.ping_cm();
int distanceR = 0;
int distanceL = 0;
if (distanza <= 15 || distanza1>8)
{
analogWrite (E1, 0);
digitalWrite(M1, LOW); //se high gira a sinistra
analogWrite (E2, 0);
digitalWrite(M2, LOW); // se high gira a destra
delay(100);
analogWrite (E1, 255);
digitalWrite(M1, HIGH); //se high gira a sinistra
analogWrite (E2, 255);
digitalWrite(M2, HIGH); // se high gira a destra
delay(1000);
analogWrite (E1, 0);
digitalWrite(M1, LOW); //se high gira a sinistra
analogWrite (E2, 0);
digitalWrite(M2, LOW); // se high gira a destra
delay(100);
distanceR = lookRight();
delay(200);
distanceL = lookLeft();
delay(200);
if (distanceR >= distanceL)
{
analogWrite (E1, 255);
digitalWrite(M1, LOW);
analogWrite (E2, 255);
digitalWrite(M2, HIGH);
delay(600);
analogWrite (E1, 0);
digitalWrite(M1, LOW); //se high gira a sinistra
analogWrite (E2, 0);
digitalWrite(M2, LOW); // se high gira a destra
delay(500);
} else
{
analogWrite (E1, 255);
digitalWrite(M1, HIGH);
analogWrite (E2, 255);
digitalWrite(M2, LOW);
delay(600);
analogWrite (E1, 0);
digitalWrite(M1, LOW); //se high gira a sinistra
analogWrite (E2, 0);
digitalWrite(M2, LOW); // se high gira a destra
delay(500);
}
} else
{
analogWrite (E1, 255);
digitalWrite(M1, LOW);
analogWrite (E2, 255);
digitalWrite(M2, LOW);
}
distanza = sonar.ping_cm();
distanza1 = sonara.ping_cm();
}
int lookRight()
{
myservo.write(25);
delay(500);
int distanza = sonar.ping_cm();
delay(100);
myservo.write(100);
return distanza;
}
int lookLeft()
{
myservo.write(180);
delay(500);
int distanza = sonar.ping_cm();
delay(100);
myservo.write(100);
return distanza;
delay(100);
}