Ciao ragazzi sono nuovo del forum.
Ho realizzato un rover con 2 motori 12v, 4 ruote motrici con trazione a carrarmato, una videocamera wifi e due sensori antiurto , tutto controllato da arduino mega in cui è installato un webserver che mi consente di controllare il robot con smartphone da qualsiasi parte del mondo.
I due sensori antiurto ne rallentano la velocità fino a fermarsi prima di sbattere.
Tutto ok a parte che quando do il comando "avanti", il robot continua la sua corsa finche non trova un ostacolo, a nulla serve dare il comando di stop.
Probabilmente while blocca arduino mega in un ciclo infinito che termina solo quando i e j diventano 0.
Se tolgo la parte di codice inerente ai sensori tutto funziona regolarmente, però non mi va di limitare il mio progetto..
Per favore aiutatemi
#include <String.h>
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 9 };
byte gateway[] = { 192, 168, 1, 1 };
byte subnet[] = { 255, 255, 255, 0 };
EthernetServer server(80);
String readString;
int temp=0;
int statofari;
int dist;
int dist2;
int durata;
int durata2;
int triggerPort = 34;
int echoPort = 35;
int triggerPort2 = 7;
int echoPort2 = 8;
int distance1;
int duration2;
int distance2;
int duration1;
int ostacolo;
int i;int j;
void setup(){
Serial.begin(9600);
Ethernet.begin(mac, ip, gateway, subnet);
pinMode(22,OUTPUT); //MOTORE 1 AVANTI
pinMode(23,OUTPUT); //MOTORE 1 INDIETRO
pinMode(24,OUTPUT); //MOTORE 2 AVANTI
pinMode(25,OUTPUT); //MOTORE 2 INDIETRO
pinMode(44,OUTPUT); //MOTORE 1 PWM
pinMode(45,OUTPUT); //MOTORE 3 PWM
pinMode(34,OUTPUT); //TRIG1
pinMode(7,OUTPUT); //TRIG2
pinMode(35,INPUT); //ECHO1
pinMode(8,INPUT); //ECHO2
pinMode(30,OUTPUT); // FARI
pinMode(31,OUTPUT); // FARI
// SENSORE TEMPERATURA A9
// SENSORE LUMINOSITA' A10
i=0;j=0;
}
void loop(){
ostacolo=false;
//TEMPERATURA
int val=analogRead(A0);
temp = (5.0 * val * 100.0)/1024.0;
//LUCE
int luce=analogRead(A1);
EthernetClient client = server.available();
if (client) {
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
readString.concat(c);
if (c == '\n' && currentLineIsBlank) {
if(readString.indexOf("Avanti") > 0) {
i=140;
analogWrite(23,i);
analogWrite(25,i);
analogWrite(44,254);
digitalWrite(22,LOW);
digitalWrite(24,LOW);
analogWrite(45,254);
while(i>0){
digitalWrite( triggerPort, LOW );
//invia un impulso di 10microsec su trigger
digitalWrite( triggerPort, HIGH );
delayMicroseconds( 10 );
digitalWrite( triggerPort, LOW );
long duration = pulseIn( echoPort, HIGH );
long r = 0.034 * duration / 2;
if (r > 100 || r == 0){ //lo zero è dovuto a possibili errori di recezione del segnale
i=140;
analogWrite(23,i);
analogWrite(25,i);
analogWrite(44,254);
digitalWrite(22,LOW);
digitalWrite(24,LOW);
analogWrite(45,254);
}
else if (r < 100 && r > 60)
{
i=140;
analogWrite(23,i);
analogWrite(25,i);
analogWrite(44,127);
digitalWrite(22,LOW);
digitalWrite(24,LOW);
analogWrite(45,127);
}
else if (r < 60 && r > 10)
{
i=140;
analogWrite(23,i);
analogWrite(25,i);
analogWrite(44,80);
digitalWrite(22,LOW);
digitalWrite(24,LOW);
analogWrite(45,80);
}
else if( r < 10 && r!=0) //lo zero è dovuto a possibili errori di recezione del segnale
{
digitalWrite(22,LOW);
digitalWrite(23,LOW);
digitalWrite(24,LOW);
digitalWrite(25,LOW);
digitalWrite(44,LOW);
digitalWrite(45,LOW);
i=0;}
}
}
if(readString.indexOf("Indietro") > 0) {
j=140;
analogWrite(22,j);
analogWrite(24,j);
analogWrite(44,254);
digitalWrite(23,LOW);
digitalWrite(25,LOW);
analogWrite(45,254);
while(j>0){
digitalWrite( triggerPort2, LOW );
//invia un impulso di 10microsec su trigger
digitalWrite( triggerPort2, HIGH );
delayMicroseconds( 10 );
digitalWrite( triggerPort2, LOW );
long duration = pulseIn( echoPort2, HIGH );
long r = 0.034 * duration / 2;
if (r > 10 || r == 0){ //lo zero è dovuto a possibili errori di recezione del segnale
j=140;
analogWrite(23,LOW);
analogWrite(25,LOW);
analogWrite(44,254);
digitalWrite(22,j);
digitalWrite(24,j);
analogWrite(45,254);
}
else if( r < 10 && r!=0) //lo zero è dovuto a possibili errori di recezione del segnale
{
digitalWrite(22,LOW);
digitalWrite(23,LOW);
digitalWrite(24,LOW);
digitalWrite(25,LOW);
digitalWrite(44,LOW);
digitalWrite(45,LOW);
j=0;}}
}
if(readString.indexOf("Destra") > 0) {
analogWrite(23,130);
analogWrite(24,130);
analogWrite(44,254);
digitalWrite(22,LOW);
digitalWrite(25,LOW);
analogWrite(45,254);
delay(200);
digitalWrite(22,LOW);
digitalWrite(23,LOW);
digitalWrite(24,LOW);
digitalWrite(25,LOW);
digitalWrite(44,LOW);
digitalWrite(45,LOW);
}
if(readString.indexOf("Sinistra") > 0) {
analogWrite(22,130);
analogWrite(25,130);
analogWrite(45,254);
digitalWrite(23,LOW);
digitalWrite(24,LOW);
analogWrite(44,254);
delay(200);
digitalWrite(22,LOW);
digitalWrite(23,LOW);
digitalWrite(24,LOW);
digitalWrite(25,LOW);
digitalWrite(44,LOW);
digitalWrite(45,LOW);
}
if(readString.indexOf("Stop") > 0) {
digitalWrite(22,LOW);
digitalWrite(23,LOW);
digitalWrite(24,LOW);
digitalWrite(25,LOW);
digitalWrite(44,LOW);
digitalWrite(45,LOW);
i=0; j=0;
}
if(readString.indexOf("Fari1") > 0) {
digitalWrite(30,HIGH);
digitalWrite(31,HIGH);
statofari=true;
}
if(readString.indexOf("Fari0") > 0) {
digitalWrite(30,LOW);
digitalWrite(31,LOW);
statofari=false;
}
//HTML