HC-SR04 pin analogici

Salve a tutti, scusatemi mi rendo conto che la mia domanda sarà stupida ma volevo chiedervi se è possibile collegare sia il trig che l'echo del sensore HC-SR04 ai pin analogici. Ho letto una guida in cui spiega la differenza tra i pin analogici digitali e pwm e diceva che i sensori ad ultrasuoni possono essere collegati anche ai pin analogici però guardando su internet non ho trovato esempi di questo tipo. Potreste dirmi come collegare i sensori e come scrivere lo sketch per fare in modo che mi dica quando c'è un ostacolo a pochi centimetri dal sensore? Grazie mille a tutti, cordiali saluti Luca Martinelli.

Qualsiasi pin analogico di Arduino UNO può essere usato come pin digitale, quindi ... usali pure tranquillamente con gli esempi che hai per i pin digitali :)

Guglielmo

Scusatemi mi sono dimenticato che devo utilizzare un Arduino mega e volevo sapere se posso attaccarli ai pin analogici o digitali invece che ai pin pwm. Grazie mille, cordiali saluti Luca Martinelli.

Gli HC-SR04 NON hanno bisogni di pin PWM … quindi puoi usare tranquillamente i pin digitali …

Con che codice misuri la distanza? Metti qui lo spezzone interessato (… mi raccomando, in conformità al regolamento, punto 7, racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> … primo a sinistra) così lo vediamo.

Guglielmo

Perfetto grazie mille. di seguito ho riporto il codice della funzione che ho utilizzato come prova per vedere se i sensori funzionavano.

#define ECHOPINDUE 5 // ecopin per il secondo sensore ir
#define TRIGPINDUE 4 //trigpin per il secondo sensore ir
unsigned long echo_time=0;

unsigned long go_sonar=0;
boolean obstacleuno=false;
unsigned long max_distance =5;
boolean distanzauno ()
{
  delay(1); //conta fino ad 1ms
  if(go_sonar++ >= 250)//attiva il sonar ogni 250 cicli del loop
  {
    digitalWrite(TRIGPINDUE, HIGH), //attiva l'emissione sonar
    delayMicroseconds(10);//aspetta 10 ms
    digitalWrite(TRIGPINDUE,LOW); //termina l'emissione sonar
    echo_time =pulseIn(ECHOPINDUE, HIGH); //misura la durata dell'eco
    #define DISTANCE_CMDUE echo_time/48
    if (DISTANCE_CMDUE <= max_distance) 
    obstacleuno=true; //si e' troppo vicini all'ostacolo
    else
    obstacleuno=false;
    if (obstacleuno==true) 
    {
    Serial.print("obstacle ");//scrivi in presenza di ostacoli
    Serial.print("distance ");
    Serial.println(DISTANCE_CMDUE); //stampa la distanza in centimetri
    }
    else
    {
      Serial.print("distance ");
      Serial.println(DISTANCE_CMDUE);
    }
    go_sonar =0; //azzera il timer
  }
  return obstacleuno;
}
void setup() 
{
  pinMode(ECHOPINDUE, INPUT);
  pinMode(TRIGPINDUE, OUTPUT);
  Serial.begin(9600); //attiva la comunicazione seriale-USB
}
void loop()
{
  distanzauno();
}

Devo modificarlo? Ripeto scusa se le mie domande sono banali e magari per voi ovvie.
Cordiali saluti Luca Martinelli.

No, no, era appunto per verificare che già avessi usato correttamente i pin come "digitali" e NON PWM ;)

Sulla Mega hai un bel po' di pin che puoi usare :D :D :D

Guglielmo

P.S.: Ricorda che la pulseIn() ferma il programma, quindi, magari, sarebbe bene usare la sua forma completa pulseIn(pin, value, timeout) così da specificare un "tempo massimo" (in microsecondi) oltre il quale, non ricevuto l'eco, comunque prosegue ;)