const int LED=13;
const int trigger=2;
const int echo=3;
 
void setup(){
pinMode(trigger,OUTPUT); // Broche pour activer la mesure (sortie)
pinMode(echo,INPUT);     // Broche pour lire la valeur (entrée)
pinMode(LED,OUTPUT);
}
 
void loop(){
digitalWrite(trigger,LOW);  delayMicroseconds(5);  // Activer
digitalWrite(trigger,HIGH); delayMicroseconds(10);
digitalWrite(trigger,LOW);
 
long duree=pulseIn(echo,HIGH);                     // Mesurer
long distance=(duree/2)/29.1;
if(distance<20) digitalWrite(LED,HIGH);            // Réagir
else digitalWrite(LED,LOW);
delay(500);
}
#include <avr/io.h>
#include <util/delay.h>
#define US_DDR          DDRD
#define US_PORT         PORTD
#define US_PIN          PIND
#define US_TRIGGER      2
#define US_ECHO         3
void sonar_init(void){          // Initialiser le sonar
US_DDR |= (1<<US_TRIGGER);   // Broche pour activer la mesure (sortie)
US_DDR &= ~(1<<US_ECHO);     // Broche pour lire la valeur (entrée)
}
uint32_t sonar_mesure(void){    // Mesurer une distance
uint8_t statut=0;
uint32_t temps=0;
_delay_us(2);  US_PORT |= (1<<US_TRIGGER);    // Activer
_delay_us(10); US_PORT &= ~(1 << US_TRIGGER);
while(!statut){
  while(US_PIN&(1<<US_ECHO)){                 // Mesure la durée du signal haut
    temps++;
    statut=1;
    }
  }
return disTime * 0.00862;                     // Conversion en cm
}