ev3dev_lang_rust/sensors/
ir_seeker_sensor.rs1use super::{Sensor, SensorPort};
4use crate::{sensor_mode, Attribute, Device, Driver, Ev3Error, Ev3Result};
5
6#[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 pub fn get_ir_direction(&self) -> Ev3Result<i32> {
56 self.get_value0()
57 }
58
59 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}