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
}