Avevo già inserito un post riguardante questo mio progetto, ma pare sia stato cancellato ... Fa nulla, ne approfitto per aprire un nuovo problema sempre sulla stessa tematica. Pare che con questo codice il passaggio di un elemento funzioni alla grande, alla fine basta aggiungere un delay(100) anziché 50
#include <Servo.h>
#include <NewPing.h>
#include <avr/io.h>
#include <avr/wdt.h>
#define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {}
Servo myservo;
int triggerPort = 6;
int echoPort = 7;
int triggerPort2 = 8;
int echoPort2 = 9;
int pos=-1;
void setup() {
myservo.attach(12);
pinMode( triggerPort, OUTPUT );
pinMode( echoPort, INPUT );
pinMode( triggerPort2, OUTPUT );
pinMode( echoPort2, INPUT );
Serial.begin( 9600 );
}
void loop() {
float tempo=0;
delay(100);
myservo.write(pos);
float t1 = 0;
digitalWrite( triggerPort, LOW );
delayMicroseconds (3);
//invia un impulso di 10microsec su trigger
digitalWrite( triggerPort, HIGH );
delayMicroseconds(3);
digitalWrite( triggerPort, LOW );
long duration = pulseIn( echoPort, HIGH );
long r = 0.034 * duration / 2;
float t;
if ( (r>0 && r<50) ) { // ok. l'oggetto è passato dal via
Serial.println(" AGGANCIATO SENSORE 1");
t = millis(); // Mi segno il tempo di partenza
if(t<0){
t=(t*(-1));
}
else t=t;
while ( (millis() - t ) < 10000 ) // tempo massimo ammesso 10 secondi
{
//porta bassa l'uscita del trigger
digitalWrite( triggerPort2, LOW );
delayMicroseconds (3);
//invia un impulso di 10microsec su trigger
digitalWrite( triggerPort2, HIGH );
delayMicroseconds( 3 );
digitalWrite( triggerPort2, LOW );
long duration2 = pulseIn( echoPort2, HIGH );
long r2 = 0.034 * duration2 / 2;
if ( (r2>0 && r2<50) ) { // Ok e' arrivato al secondo sensore
t1 = millis(); // segno il tempo di arrivo
tempo = (t1 - t ) ;
Serial.println("---------------inizio--------------------");
Serial.println("---------------SENSORE1--------------------");
Serial.print("Distanza: ");Serial.println(r);
Serial.print("Duration: ");Serial.println(duration);
Serial.print("Tempo1: ");Serial.print(t/1000);Serial.println("sec");
Serial.println("---------------SENSORE2--------------------");
Serial.print("Distanza2: ");Serial.println(r2);
Serial.print("Duration2: ");Serial.println(duration2);
Serial.print("Tempo2: ");Serial.print(t1/1000);Serial.println("sec ");
Serial.print("TempototDentro: ");Serial.print(tempo/1000);Serial.println("sec ");
Serial.println("---------------fine--------------------");
break ; // esco dal while prima che scada
}
Serial.println("!!!...NON AGGANCIATO SENSORE 2...!");
t1 = 0 ;
}
if (tempo > 0 ) {
Serial.print ("Tempo dentro: ");
Serial.print(tempo/1000);
Serial.println("sec");
//----INIZIO FUNZIONE SERVO-----
while(pos!=0){
for(pos = 1; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
delay(3000);
for(pos = 180; pos>=0; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
break;
}
//---- FUNZIONE SERVO-----
/* Serial.println(" ");
Serial.println("RESET ARDUINO...");
Reset_AVR(); */
}
}
}
PROBLEMA: Ho bisogno che questi due sensori rilevino OGNI TIPO DI VELOCITà dalle più basse alle più alte, pare invece che con il delay(100) non riesca a rilevare le velocità alte.. C'è un modo per aumentare la velocità entro cui i due sensori possano rilevarmi un movimento?