Go Down

Topic: srf04, dovrei usare due sensori ultrasuono assieme (Read 724 times) previous topic - next topic

satchmo

ciao a tutti , dovrei usare due sensori ultrasuono assieme , due srf04 ,, per farne girare solo  uno va bene questo codice :

#define echoPin 2                            // Pin to receive echo pulse
#define trigPin 3                            // Pin to send trigger pulse

void setup(){
  Serial.begin(9600);
  pinMode(echoPin, INPUT);
  pinMode(trigPin, OUTPUT);
}

void loop(){
  digitalWrite(trigPin, LOW);                   // Set the trigger pin to low for 2uS
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);                  // Send a 10uS high to trigger ranging
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);                   // Send pin low again
  int distance = pulseIn(echoPin, HIGH);        // Read in times pulse
  distance= distance/58;                        // Calculate distance from time of pulse
  Serial.println(distance);                     
  delay(50);                                    // Wait 50mS before next ranging
}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------
  il problema è come farne misurare 2 assieme, con la patch per max e arduino " SENSORBOXES" si riesce a leggere 2 o più sensori analogici , ma questo tipo di misura non riesco proprio a capire come fare, dovrei mandare i valori a MAXmsp per muovere dei suoni ..

se avete suggerimenti..grazie .

ratto93

#1
Nov 06, 2011, 05:30 pm Last Edit: Nov 06, 2011, 05:33 pm by ratto93 Reason: 1
Intanto userei la funzione millis... sennò blocchi l'esecuzione del programma inutilmente... poi L'uscita Tiger puoi condividerla con entrambi i sonar...

Oppure prova così:
Code: [Select]
#define echoPin1 2                            // Pin to receive echo pulse
#define echoPin 4                                     //secondo sensore
#define trigPin 3                            // Pin to send trigger pulse di entrambi i sensori

void setup(){
  Serial.begin(9600);
  pinMode(echoPin, INPUT);
  pinMode(trigPin, OUTPUT);
}

void loop(){
  digitalWrite(trigPin, LOW);                   // Set the trigger pin to low for 2uS
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);                  // Send a 10uS high to trigger ranging
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);                   // Send pin low again
  int distance = pulseIn(echoPin, HIGH);        // Read in times pulse
int distance1 = pulseIn(echoPin1,HIGH);
  distance= distance/58;                        // Calculate distance from time of pulse
  distance1= distance1/58;                        // Calculate distance from time of pulse
  Serial.println("distanza 1:" );
  Serial.println(distance);   
  Serial.println("distanza 2:" );   
  Serial.println(distance1 );                         
  delay(50);                                    // Wait 50mS before next ranging
}


Solo che la funzione pulsIn mi pare usi gli interrupt... e quindi non so se funziona....
Se corri veloce come un fulmine, ti schianterai come un tuono.

uwefed

Devi fare la misura primo su un sensore e poi sull altro. non puoi farlo con tutti due in contemporanea perché un l' eco del primo disturba il secondo e viceversa. Inoltre la funzione pulseIn() blocca il programma per il tempo della misura. un secondo pulseIn() partirebbe solo dopo il termine del primo pulseIn().
Percui devi mandare l'impulso e misurare l' eco del primo sensore e poi aspettare qualche milisecondo e fare la stessa cosa col secondo sensore.
Ciao Uwe

satchmo

,in effetti così dovrebbe andare ,dovrò però "marchiare" i dati per leggere i 2 valori separati poi su MAX  , bon, dopo ci provo e vediamo che succede..grazie mille  .

Go Up