Ciao a tutti, nel mio progetto ho montato su un telaio 2 motori DC controllati da un driver l298n e alimentati da 4 batterie da 1,5 V l'una. Poi ho aggiunto 3 sensori ad ultrasuoni hc-sr04, uno davanti, uno a destra e uno a sinistra. Quando l'auto si avvia dovrebbe iniziare ad andare avanti in automatico, fermarsi se incontra un ostacolo a 20 cm, controllare lo spazio a destra e a sinistra e decidere da che parte andare. Il problema è che quando viene alimentata, la scheda si accende, ma non succede nulla.
Questo è il codice (non dà errori):
#include <NewPing.h>
// Pin motori
int N1 = 4; // Motore A avanti
int N2 = 6; // Motore A indietro
int N3 = 2; // Motore B avanti
int N4 = 7; // Motore B indietro
int ena1 = 3; // PWM Motore A
int ena2 = 5; // PWM Motore B
// Pin sensori ad ultrasuoni
#define echoRight 9
#define trigRight 8
#define trigLeft 11
#define echoLeft 10
#define trigFront 12
#define echoFront 13
#define maxDistance 20
NewPing sonarFront(trigFront, echoFront, maxDistance);
NewPing sonarRight(trigRight, echoRight, maxDistance);
NewPing sonarLeft(trigLeft, echoLeft, maxDistance);
void setup() {
pinMode(N1, OUTPUT);
pinMode(N2, OUTPUT);
pinMode(N3, OUTPUT);
pinMode(N4, OUTPUT);
pinMode(ena1, OUTPUT);
pinMode(ena2, OUTPUT);
}
void loop() {
int distanceFront = sonarFront.ping_cm();
int distanceRight = sonarRight.ping_cm();
int distanceLeft = sonarLeft.ping_cm();
if (distanceFront > maxDistance) {
moveForward();
}else {
stopMotors();
if (distanceRight > maxDistance && distanceLeft <= maxDistance) {
turnRight();
} else if (distanceLeft > maxDistance && distanceRight <= maxDistance) {
turnLeft();
} else {
stopMotors();
}
}
}
void moveForward() {
digitalWrite(N1, LOW);
digitalWrite(N2, HIGH);
digitalWrite(N3, LOW);
digitalWrite(N4, HIGH);
analogWrite(ena1, 225);
analogWrite(ena2, 225);
}
void turnLeft() {
digitalWrite(N1, LOW);
digitalWrite(N2, HIGH);
digitalWrite(N3, HIGH);
digitalWrite(N4, LOW);
analogWrite(ena1, 0);
analogWrite(ena2, 225);
delay(500);
stopMotors();
}
void turnRight() {
digitalWrite(N1, HIGH);
digitalWrite(N2, LOW);
digitalWrite(N3, LOW);
digitalWrite(N4, HIGH);
analogWrite(ena1, 225);
analogWrite(ena2, 0);
delay(500);
stopMotors();
}
void stopMotors() {
digitalWrite(N1, LOW);
digitalWrite(N2, LOW);
digitalWrite(N3, LOW);
digitalWrite(N4, LOW);
analogWrite(ena1, 0);
analogWrite(ena2, 0);
}
Grazie in anticipo.