Buongiorno a tutti! Premetto che sono una 'novellina' sia della programmazione che dell'elettronica; Sto cercando di realizzare un carillon con un sensore a ultrasuoni, la ballerina è mossa da un servo che ho modificato affinché non si fermi a centottanta gradi; la mia intenzione è quella di attivare il servo quando il sensore rileva un ostacolo a meno di dieci centimetri; lo skech funziona correttamente fino a questo punto; quello che vorrei fare ora è stoppare il servo al secondo 'tocco';
ho cercato e sperimentato varie soluzioni, tra le quali l'uso di un contatore; ma pare che il sensore non continui la lettura dopo aver rilevato il primo passaggio a meno di 10cm.
Spero che possiate aiutarmi, copio il codice che vale sempre più di mille parole! Grazie!
#include<Servo.h>
const int triggerPort = 9;
const int echoPort = 10;
Servo myservo;
int pos=0;
int contatore=0;
void setup() {
pinMode(triggerPort, OUTPUT);
pinMode(echoPort, INPUT);
myservo.attach(7);
Serial.begin(9600);
Serial.print( "Sensore Ultrasuoni: ");
}
void loop() {
digitalWrite( triggerPort, LOW );
digitalWrite( triggerPort, HIGH );
delayMicroseconds( 10 );
digitalWrite( triggerPort, LOW );
long durata = pulseIn( echoPort, HIGH );
long distanza = 0.034 * durata / 2;
Serial.println(distanza);
if(distanza <=10) {
contatore=contatore+1;
float resto= contatore/2;
while (resto !=0) {
for (pos = 0; pos <= 360;pos += 1)
{
myservo.write(pos);
delay(5000);
}
for (pos = 360; pos >= 0;pos -= 1)
{
myservo.write(pos);
delay(5000);
} }
}
delay(2000);
}