Reading Data

After configuring the sensor via I2C, the pins will retain the stored output mode in the next power cycle. You can then disconnect the sensor from the I2C port and connect it to the appropriate port type based on your configuration. The process for reading data from the control or expansion hub in the new mode is outlined below.

Digital Reads

In the configuration screen, go to "Digital Devices," select "Digital Device," and name your digital pins. After activating the config, the following code can be used to read the digital values:

DigitalChannel pin0 = hardwareMap.digitalChannel.get("digital0");
DigitalChannel pin1 = hardwareMap.digitalChannel.get("digital1");

waitForStart();

while (opModeIsActive()) {
    telemetry.addData("digital 0", pin0.getState());
    telemetry.addData("digital 1", pin1.getState());
    telemetry.update();
}

Analog Reads

In the configuration screen, go to "Analog Inputs," select "Analog Input," and name your analog pin. After activating the config, the following code can be used to read the analog value:

AnalogInput pin0 = hardwareMap.analogInput.get("analog0");
 
waitForStart();
while (opModeIsActive()) {
    telemetry.addData("voltage", pin0.getVoltage());
    telemetry.update();
}

Scaling Analog Voltage

The voltage from analog reads will always be in the range 0-3.3, but we can turn this into a useful form by scaling it to represent our data.

HSV Hue Value

double hue = pin0.getVoltage() / 3.3 * 360;

Distance in mm

double distance = pin0.getVoltage() / 3.3 * 100;

Bulk Reading

Individual digital/analog port reads still take time, but by utilizing bulk reads one can read every single non-i2c port on a hub in only 3-4ms. Here is the gm0 page on implementing bulk reads: https://gm0.org/en/latest/docs/software/tutorials/bulk-reads.html

Last updated