//***************************************************************************** // 関数名 : sonar_alert // 引数 : 無し // 返り値 : 1(障害物あり)/0(障害物無し) // 概要 : 超音波センサによる障害物検知 //***************************************************************************** static int sonar_alert(void) { static unsigned int counter = 0; static int alert = 0; signed int distance; if (++counter == 40/4) /* 約40msec周期毎に障害物検知 */ { /* * 超音波センサによる距離測定周期は、超音波の減衰特性に依存します。 * NXTの場合は、40msec周期程度が経験上の最短測定周期です。 * EV3の場合は、要確認 */ distance = ev3_ultrasonic_sensor_get_distance(sonar_sensor); if ((distance <= SONAR_ALERT_DISTANCE) && (distance >= 0)) { alert = 1; /* 障害物を検知 */ } else { alert = 0; /* 障害物無し */ } counter = 0; } return alert; }
int nxtrike_get_sonic_sensor(void) { return ev3_ultrasonic_sensor_get_distance(SONIC_SENSOR); #if 0 U8 distance; if (!i2c_busy(SONIC_SENSOR)) { i2c_start_transaction(SONIC_SENSOR, 1, 0x42, 1, &distance, 1, 0); return (int)distance; } return NXTRIKE_ERROR; #endif }
void Arbitrator::update_sensor_data() { sensor_data->touch_left = ev3_touch_sensor_is_pressed(sensors->TLEFT_P); sensor_data->touch_right = ev3_touch_sensor_is_pressed(sensors->TRIGHT_P); sensor_data->color = ev3_color_sensor_get_color(sensors->COLOR_P); sensor_data->ultrasonic = ev3_ultrasonic_sensor_get_distance(sensors->ULTRA_P); }