Arduino - čítanie z Ultrazvukového senzora pomocou prerušení
Tento program číta z ultrazvukového senzora pomocou prerušení:
<syntaxhighlight lang="C" line=line>
- define TRIG 7
- define ECHO 8
void setup() {
init_ultrasonic(); Serial.begin(9600);
}
static volatile uint32_t pulse_start; static volatile int16_t distance; static volatile uint8_t new_distance;
void init_ultrasonic() {
pinMode(ECHO, INPUT); pinMode(TRIG, OUTPUT); PCMSK0 |= 1; //PCINT0; PCIFR &= ~1; //PCIF0; PCICR |= 1; // PCIE0;
}
ISR(PCINT0_vect) {
if (PINB & 1) pulse_start = micros(); else { distance = (int16_t)((micros() - pulse_start) / 58); new_distance = 1; }
}
void start_distance_measurement() {
distance = -1; new_distance = 0; digitalWrite(TRIG, HIGH); delayMicroseconds(10); digitalWrite(TRIG, LOW);
}
void wait_for_distance_measurement_to_complete() {
uint8_t counter = 0; while ((counter < 20) && !new_distance) { delay(1); counter++; }
}
uint16_t measure_distance() {
start_distance_measurement(); wait_for_distance_measurement_to_complete(); return distance;
}
void loop() {
uint16_t d = measure_distance(); Serial.print("Distance: "); Serial.println(d); delay(100);
} </syntaxhighligh>