uint16_t starttimes[N_TRIG_SENSORS], starttime;
uint8_t to_start = (1 << N_TRIG_SENSORS) - 1;
uint8_t to_measure = 0, i;
+ uint16_t now;
pull_trigger(trig);
while (to_start || to_measure) {
uint8_t bits = 0;
- uint16_t now = get_clock();
+ now = get_clock();
if (now-starttime >= ECHO_TIMEOUT)
break;
if (to_start & (1 << i))
distances[trig*N_TRIG_SENSORS + i] = -1;
else if (to_measure & (1 << i))
- distances[trig*N_TRIG_SENSORS + i] = 0;
+ /*
+ * If the echo pulse is too long, do not treat it
+ * as error, just count it as maximum length.
+ */
+ distances[trig*N_TRIG_SENSORS + i]
+ = now - starttimes[i];
}
static void led_set(uint8_t led, uint8_t state)
mask = 1 << i;
if (thresholds[i]) {
- if (distances[i] == -1 || distances[i] == 0) {
+ if (distances[i] == -1) {
err_b |= mask;
} else if (distances[i] > thresholds[i]) {
free_b |= mask;