示例#1
0
//*****************************************************************************
// 関数名 : 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;
}
示例#2
0
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);
}