pulseIn ed ultrasuono SRF05

Salve a tutti,
sto cercando di leggere la distanza tramite un sensore di ultrasuoni SRF05.
Collego il tutto alla scheda Galileo, ma la funzione pulseIn() restituisce sempre 0. Inizialmente ho pensato al sensore rotto, però provandone diversi il risultato non cambia. Ho provato a mettere un led in parallelo al canale di ECHO ottenendo un lampeggio del led quindi, da quello che sembra,il sensore genera un impulso ma questo è completamente ignorato dalla scheda. Ho anche provato a cambiare PIN sulla scheda, ma nulla! Qualcuno ha qualche idea??
Grazie!
Allego il codice.

/*
Il circuito:
VVC del sensore connesso a +5V
GND del sensore connesso a GND
TRIG del sensore connesso al pin digitale 8
ECHO del sensore connesso al pin digitale 7
*/
 
const int TRIG_PIN = 8;
const int ECHO_PIN = 7;
const float Vsuono = 340;
int durata;
float durata_ms; 
float distanza;
void setup() {
  // Inizializza la comunicazione seriale:
  Serial.begin(9600); 
  pinMode(TRIG_PIN,OUTPUT);
  pinMode(ECHO_PIN,INPUT);  
}
 
void loop()
{
 
  // Dare un corto segnale basso per poi dare un segnale alto puro:
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
  durata = pulseIn(ECHO_PIN,HIGH); //ms
  // Converti il tempo in distanza:
  Serial.println(durata); //qui stampa sempre 0
  durata_ms = (float)durata * 0.000001; //passa da ms a s
  distanza = (Vsuono * durata_ms)/2.0; //calcola la distanza percorsa (in metri)
  distanza = distanza * 100.0; //converti la distanza in centimetri   
 
  if (distanza <= 0){
    Serial.println("Out of range");
  }
  else {
    Serial.print(distanza);
    Serial.println(" cm");
    Serial.println();
  }
  delay(100);
}

ciao pikko,

non so se sia questo ma qui:

durata_ms = (float)durata * 0.000001; //passa da ms a s

non porti i millisecondi in secondi ...qua porti, nel caso, i microsecondi in secondi.

dovresti scrivere:

durata_ms = (float)durata * 0.001; //passa da ms a s

EDIT: mi sono andato a vedere la funzione pulseIn() che, adesso lo so, ritorna uS (microsecondi); mi aveva tratto in inganno la descrizione "ms"....comunque se davvero ECHO dura micro...non conviene un interrupt?

ORSO2001:
ciao pikko,

non so se sia questo ma qui:

durata_ms = (float)durata * 0.000001; //passa da ms a s

non porti i millisecondi in secondi ...qua porti, nel caso, i microsecondi in secondi.

dovresti scrivere:

durata_ms = (float)durata * 0.001; //passa da ms a s

EDIT: mi sono andato a vedere la funzione pulseIn() che, adesso lo so, ritorna uS (microsecondi); mi aveva tratto in inganno la descrizione "ms"....comunque se davvero ECHO dura micro...non conviene un interrupt?

Ciao ORSO2001, grazie per la risposta. Il problema è precedente:
Il problema è che la variabile "durata" viene sempre settata a 0. È lì il cuore del problema!

Anche io inizialmente pensavo fossero ms, poi quando ho verificato mi sono scordato di aggiornare il commento! Colpa mia xD

ciao..io ho un SRF04 (senza pin MODO)...uso la libreria NewPing.h e funziona "bene"....adesso provo il mio senza libreria ricopiando il tuo sketch...vediamo cosa mi torna

Ciao…copiato pari pari…e va alla grande…sei sicuro che non hai messo il MODO a gnd?

Si, MODO è scollegato! A questo punto o tutti i sensori sono rotti oppure è rotta la scheda, cerco di rimediare un altro Arduino e vedo se cambia qualcosa!

Grazie!

[RISOLTO]

I problemi a quanto pare erano più di uno:
-due sensori su quattro erano rotti;

  • ho provato a far girare il mio codice su arduino uno e funzionava! ho notato però una cosa, nel passaggio
    da u_secondi a secondi il cambio di scala porta a 0 la misura in secondi, creando i problemi che
    potete facilmente immaginare;

  • la mia scheda galileo continua a non lavorare come dovrebbe: caricando lo stesso codice con lo stesso
    circuito, la scheda continua a restituire 0 alla funzione pulseIn(). Ho anche provato a cambiare pin, ma nulla!

Grazie a tutti dell'aiuto!