Buongiorno, ho riscontrato un problema con l'uso di un modulo BT, quando invio un qualunque codice dal mio telefono sul monitor seriale appaiono dei caratteri particolari e non svolge il suo lavoro (ovvero quello di far muovere una macchina
byte ledState = 0; // ledState used to set the LED
unsigned long previousMillis1 = 0; //will store last time LED was updated
unsigned long interval1 = 100; //interval at which to blink (milliseconds)
unsigned long previousMillis2 = 0;
unsigned long interval2 = 1000;
unsigned int counter = 0;
#include <AFMotor.h>
AF_DCMotor m1(1);
AF_DCMotor m2(2);
AF_DCMotor m3(3);
AF_DCMotor m4(4);
//Useful Variables
int i = 0;
int j = 0;
char state;
int vSpeed = 254; // Default speed, from 0 to 255
const int trigPin1 = 24;
const int echoPin1 = 25;
const int trigPin2 = 26;
const int echoPin2 = 27;
const int trigPin3 = 28;
const int echoPin3 = 29;
const int trigPin4 = 30;
const int echoPin4 = 31;
const int trigPin5 = 32;
const int echoPin5 = 33;
const int trigPin6 = 34;
const int echoPin6 = 35;
const int ledPin1 = 36;
const int ledPin2 = 37;
const int ledPin3 = 38;
const int ledPin4 = 39;
const int ledPin5 = 40;
const int ledPin6 = 41;
long duration1;
int distance1;
int safetyDistance1;
long duration2;
int distance2;
int safetyDistance2;
long duration3;
int distance3;
int safetyDistance3;
long duration4;
int distance4;
int safetyDistance4;
long duration5;
int distance5;
int safetyDistance5;
long duration6;
int distance6;
int safetyDistance6;
void setup() {
Serial.begin(9600);
Serial1.begin(9600);
m1.run(RELEASE);
m2.run(RELEASE);
m3.run(RELEASE);
m4.run(RELEASE);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(ledPin1, OUTPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(ledPin2, OUTPUT);
pinMode(trigPin3, OUTPUT);
pinMode(echoPin3, INPUT);
pinMode(ledPin3, OUTPUT);
pinMode(trigPin4, OUTPUT);
pinMode(echoPin4, INPUT);
pinMode(ledPin4, OUTPUT);
pinMode(trigPin5, OUTPUT);
pinMode(echoPin5, INPUT);
pinMode(ledPin5, OUTPUT);
pinMode(trigPin6, OUTPUT);
pinMode(echoPin6, INPUT);
pinMode(ledPin6, OUTPUT);
}
void blinkLed() {
//check if it's time to blink the led
if (millis() - previousMillis1 > interval1) {
previousMillis1 = millis();
ledState ^= 1;
digitalWrite(ledPin1, ledState);
}
}
void loop() {
digitalWrite(trigPin1, LOW);
delay(10);
digitalWrite(trigPin1, HIGH);
delay(10);
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH);
distance1 = duration1 * 0.034 / 2;
safetyDistance1 = distance1;
if (safetyDistance1 <= 15) {
blinkLed();
}
else {
digitalWrite(ledPin1, LOW);
}
Serial.print("Distance1: ");
Serial.println(distance1);
digitalWrite(trigPin2, LOW);
delay(10);
digitalWrite(trigPin2, HIGH);
delay(10);
digitalWrite(trigPin2, LOW);
duration2 = pulseIn(echoPin2, HIGH);
distance2 = duration2 * 0.034 / 2;
safetyDistance2 = distance2;
if (safetyDistance2 <= 15) {
blinkLed();
}
else {
digitalWrite(ledPin2, LOW);
}
Serial.print("Distance2: ");
Serial.println(distance2);
digitalWrite(trigPin3, LOW);
delay(10);
digitalWrite(trigPin3, HIGH);
delay(10);
digitalWrite(trigPin3, LOW);
duration3 = pulseIn(echoPin3, HIGH);
distance3 = duration3 * 0.034 / 2;
safetyDistance3 = distance3;
if (safetyDistance3 <= 15) {
blinkLed();
}
else {
digitalWrite(ledPin3, LOW);
}
Serial.print("Distance3: ");
Serial.println(distance3);
digitalWrite(trigPin4, LOW);
delay(10);
digitalWrite(trigPin4, HIGH);
delay(10);
digitalWrite(trigPin4, LOW);
duration4 = pulseIn(echoPin4, HIGH);
distance4 = duration4 * 0.034 / 2;
safetyDistance4 = distance4;
if (safetyDistance4 <= 15) {
blinkLed();
}
else {
digitalWrite(ledPin4, LOW);
}
Serial.print("Distance4: ");
Serial.println(distance4);
digitalWrite(trigPin5 , LOW);
delay(10);
digitalWrite(trigPin5, HIGH);
delay(10);
digitalWrite(trigPin5, LOW);
duration5 = pulseIn(echoPin5, HIGH);
distance5 = duration5 * 0.034 / 2;
safetyDistance5 = distance5;
if (safetyDistance5 <= 15) {
blinkLed();
}
else {
digitalWrite(ledPin5, LOW);
}
Serial.print("Distance5: ");
Serial.println(distance5);
digitalWrite(trigPin6, LOW);
delay(10);
digitalWrite(trigPin6, HIGH);
delay(10);
digitalWrite(trigPin6, LOW);
duration6 = pulseIn(echoPin6, HIGH);
distance6 = duration6 * 0.034 / 2;
safetyDistance6 = distance6;
if (safetyDistance6 <= 15) {
blinkLed();
}
else {
digitalWrite(ledPin6, LOW);
}
Serial.print("Distance6: ");
Serial.println(distance6);
m1.setSpeed(vSpeed);
m2.setSpeed(vSpeed);
m3.setSpeed(vSpeed);
m4.setSpeed(vSpeed);
if (Serial1.available() > 0) {
state = Serial1.read();
Serial.println(state);
}
/***********************Forward****************************/
//If state is equal with letter 'A', car will go forward!
if (state == 'A') {
m1.run(FORWARD);
m2.run(FORWARD);
m3.run(FORWARD);
m4.run(FORWARD);
}
/***********************Backward****************************/
//If state is equal with letter 'I', car will go backward
else if (state == 'I') {
m1.run(BACKWARD);
m2.run(BACKWARD);
m3.run(BACKWARD);
m4.run(BACKWARD);
}
/***************************Left*****************************/
//If state is equal with letter 'S', wheels will turn left
else if (state == 'S') {
m1.run(FORWARD);
m2.run(RELEASE);
m3.run(RELEASE);
m4.run(FORWARD);
}
/***************************Right*****************************/
//If state is equal with letter 'D', wheels will turn right
else if (state == 'D') {
m1.run(RELEASE);
m2.run(FORWARD);
m3.run(FORWARD);
m4.run(RELEASE);
}
/************************Bonus*****************************/
/************************Bonus*****************************/
/************************Bonus*****************************/
/**********************Bonus***************************/
/************************Bonus*****************************/
//If state is equal with letter 'S', stop the car
else if (state == 'P') {
m1.run(RELEASE);
m2.run(RELEASE);
m3.run(RELEASE);
m4.run(RELEASE);
}
}
Lo so il codice è un po' lungo ma non è indispensabile per risolvere il mio problema, fino a poco prima la scheda funzionava correttamente e all'improvviso quando gli invio dei caratteri compare (quello allegato nella foto
