ev3dev_lang_rust/sensors/
ir_seeker_sensor.rs

1//! HiTechnic EV3 / NXT Infrared Sensor. (<https://www.generationrobots.com/de/401172-nxt-irseeker-v2-infrarot-sensor-f%C3%BCr-nxt-und-ev3-mindstorms-.html>)
2
3use super::{Sensor, SensorPort};
4use crate::{sensor_mode, Attribute, Device, Driver, Ev3Error, Ev3Result};
5
6/// HiTechnic EV3 / NXT Infrared Sensor.
7#[derive(Debug, Clone, Device, Sensor)]
8pub struct IrSeekerSensor {
9    driver: Driver,
10}
11
12impl IrSeekerSensor {
13    fn new(driver: Driver) -> Self {
14        Self { driver }
15    }
16
17    findable!(
18        "lego-sensor",
19        ["ht-nxt-ir-seek-v2"],
20        SensorPort,
21        "IrSeeker",
22        "in"
23    );
24
25    sensor_mode!(
26        "AC",
27        MODE_AC,
28        "Sensor mode alternating current -> filters the infrared signal of the hitechnic ball -> only shows direction",
29        set_mode_ac,
30        is_mode_ac
31    );
32    sensor_mode!(
33        "DC",
34        MODE_DC,
35        "Sensor mode direct current -> reacts on all infrared signals, sun infrared signal included -> only shows direction",
36        set_mode_dc,
37        is_mode_dc
38    );
39    sensor_mode!(
40        "AC-ALL",
41        MODE_AC_ALL,
42        "Sensor mode alternating current -> shows direction (value0) and values of each of the five sensors",
43        set_mode_ac_all,
44        is_mode_ac_all
45    );
46    sensor_mode!(
47        "DC-ALL",
48        MODE_DC_ALL,
49        "Sensor mode direct current -> shows direction (value0) and values of each of the five sensors",
50        set_mode_dc_all,
51        is_mode_dc_all
52    );
53
54    /// gets direction of incoming ir light (calculated by the sensor)
55    pub fn get_ir_direction(&self) -> Ev3Result<i32> {
56        self.get_value0()
57    }
58
59    /// gets the values of the five sensors of the HiTechnic IR Seeker (only works if dc_all or ac_all mode is activated)
60    pub fn get_raw_values(&self) -> Ev3Result<[i32; 5]> {
61        let val1 = self.get_value1()?;
62        let val2 = self.get_value2()?;
63        let val3 = self.get_value3()?;
64        let val4 = self.get_value4()?;
65        let val5 = self.get_value5()?;
66        Ok([val1, val2, val3, val4, val5])
67    }
68}