Ну наконец я вернулся к работе
Код для датчика расстояния SR40 На прерывании в Ардуино версии.
Выглядит так.
CODE:
int led = 13;
int trig = 3;
volatile int distance = 0;
volatile unsigned long sonic_time=0;
volatile unsigned long echo_time = 0;
volatile bool sonic_busy = false;
// the setup routine runs once when you press reset:
void setup() {
Serial.begin(9600);
pinMode(led , OUTPUT);
pinMode(trig, OUTPUT);
}
void loop() {
Sonic_trig();
Serial.print("distance = ");
Serial.print( distance );
Serial.print("\n\r");
while ( sonic_busy )
delay(5);
}
void Sonic_trig(){
if ( sonic_busy )
return;
sonic_busy = true;
digitalWrite(trig, HIGH);
delay(10);
digitalWrite(trig, LOW);
attachInterrupt(0, Sonic_interrupt_start, RISING );
}
void Sonic_interrupt_start () {
sonic_time = micros();
attachInterrupt(0, Sonic_interrupt_end, FALLING );
digitalWrite(led, HIGH);
}
void Sonic_interrupt_end () {
distance = ( micros() - sonic_time) / 29 / 2;
digitalWrite(led, LOW);
sonic_busy = false;
}
(Отредактировано автором: 18 Марта, 2013 - 15:11:35) |