ADI (TriPort) C API module

Files

file adi.h

Namespaces

namespace pros::c

Functions

adi_port_config_e_t adi_port_get_config(uint8_t port)
Gets the configuration for the given ADI port.
int32_t adi_port_get_value(uint8_t port)
Gets the value for the given ADI port.
int32_t adi_port_set_config(uint8_t port, adi_port_config_e_t type)
Configures an ADI port to act as a given sensor type.
int32_t adi_port_set_value(uint8_t port, int32_t value)
Sets the value for the given ADI port.
int32_t adi_analog_calibrate(uint8_t port)
Calibrates the analog sensor on the specified port and returns the new calibration value.
int32_t adi_analog_read(uint8_t port)
Gets the 12-bit value of the specified port.
int32_t adi_analog_read_calibrated(uint8_t port)
Gets the 12 bit calibrated value of an analog input port.
int32_t adi_analog_read_calibrated_HR(uint8_t port)
Gets the 16 bit calibrated value of an analog input port.
int32_t adi_digital_read(uint8_t port)
Gets the digital value (1 or 0) of a port configured as a digital input.
int32_t adi_digital_get_new_press(uint8_t port)
Gets a rising-edge case for a digital button press.
int32_t adi_digital_write(uint8_t port, bool value)
Sets the digital value (1 or 0) of a port configured as a digital output.
int32_t adi_pin_mode(uint8_t port, uint8_t mode)
Configures the port as an input or output with a variety of settings.
int32_t adi_motor_set(uint8_t port, int8_t speed)
Sets the speed of the motor on the given port.
int32_t adi_motor_get(uint8_t port)
Gets the last set speed of the motor on the given port.
int32_t adi_motor_stop(uint8_t port)
Stops the motor on the given port.
int32_t adi_encoder_get(adi_encoder_t enc)
Gets the number of ticks recorded by the encoder.
adi_encoder_t adi_encoder_init(uint8_t port_top, uint8_t port_bottom, bool reverse)
Creates an encoder object and configures the specified ports accordingly.
int32_t adi_encoder_reset(adi_encoder_t enc)
Sets the encoder value to zero.
int32_t adi_encoder_shutdown(adi_encoder_t enc)
Disables the encoder and voids the configuration on its ports.
int32_t adi_ultrasonic_get(adi_ultrasonic_t ult)
Gets the current ultrasonic sensor value in centimeters.
adi_ultrasonic_t adi_ultrasonic_init(uint8_t port_ping, uint8_t port_echo)
Creates an ultrasonic object and configures the specified ports accordingly.
int32_t adi_ultrasonic_shutdown(adi_ultrasonic_t ult)
Disables the ultrasonic sensor and voids the configuration on its ports.
double adi_gyro_get(adi_gyro_t gyro)
Gets the current gyro angle in tenths of a degree.
adi_gyro_t adi_gyro_init(uint8_t port, double multiplier)
Initializes a gyroscope on the given port.
int32_t adi_gyro_reset(adi_gyro_t gyro)
Resets the gyroscope value to zero.
int32_t adi_gyro_shutdown(adi_gyro_t gyro)
Disables the gyro and voids the configuration on its port.
adi_potentiometer_t adi_potentiometer_init(uint8_t port)
Initializes a potentiometer on the given port of the original potentiometer.
adi_potentiometer_t adi_potentiometer_type_init(uint8_t port, adi_potentiometer_type_e_t potentiometer_type)
Initializes a potentiometer on the given port.
double adi_potentiometer_get_angle(adi_potentiometer_t potentiometer)
Gets the current potentiometer angle in tenths of a degree.
adi_led_t adi_led_init(uint8_t port)
Initializes a led on the given port of the original led.
int32_t adi_led_clear_all(adi_led_t led, uint32_t* buffer, uint32_t buffer_length)
Clear the entire led strip of color.
int32_t adi_led_set(adi_led_t led, uint32_t* buffer, uint32_t buffer_length)
Set the entire led strip using the colors contained in the buffer.
int32_t adi_led_set_all(adi_led_t led, uint32_t* buffer, uint32_t buffer_length, uint32_t color)
Set the entire led strip to one color.
int32_t adi_led_set_pixel(adi_led_t led, uint32_t* buffer, uint32_t buffer_length, uint32_t color, uint32_t pixel_position)
Set one pixel on the led strip.
int32_t adi_led_clear_pixel(adi_led_t led, uint32_t* buffer, uint32_t buffer_length, uint32_t pixel_position)
Clear one pixel on the led strip.

Ease of use macro definitions

These functions provide ease of use definitions for the ADI functions.

#define HIGH
Used for adi_digital_write() to specify a logic HIGH state to output.
#define LOW
Used for adi_digital_write() to specify a logic LOW state to output.
#define INPUT
adi_pin_mode() state for a digital input.
#define OUTPUT
adi_pin_mode() state for a digital output.
#define INPUT_ANALOG
adi_pin_mode() state for an analog input.
#define OUTPUT_ANALOG
adi_pin_mode() state for an analog output.

Enums

enum adi_port_config_e { E_ADI_ANALOG_IN = 0, E_ADI_ANALOG_OUT = 1, E_ADI_DIGITAL_IN = 2, E_ADI_DIGITAL_OUT = 3, _DEPRECATE_DIGITAL_IN, _DEPRECATE_ANALOG_IN, _DEPRECATE_DIGITAL_IN, _DEPRECATE_ANALOG_IN, _DEPRECATE_DIGITAL_IN, _DEPRECATE_ANALOG_IN, _DEPRECATE_ANALOG_IN, _DEPRECATE_ANALOG_IN, E_ADI_LEGACY_GYRO = 10, _DEPRECATE_ANALOG_IN, E_ADI_LEGACY_SERVO = 12, E_ADI_LEGACY_PWM = 13, E_ADI_LEGACY_ENCODER = 14, E_ADI_LEGACY_ULTRASONIC = 15, E_ADI_TYPE_UNDEFINED = 255, E_ADI_ERR = PROS_ERR }
enum adi_potentiometer_type_e { E_ADI_POT_EDR = 0, E_ADI_POT_V2 }

Typedefs

using adi_encoder_t = int32_t
Reference type for an initialized encoder.
using adi_ultrasonic_t = int32_t
Reference type for an initialized ultrasonic.
using adi_gyro_t = int32_t
Reference type for an initialized gyroscope.
using adi_potentiometer_t = int32_t
Reference type for an initialized potentiometer.
using adi_led_t = int32_t
Reference type for an initialized addressable led.

Defines

#define _DEPRECATE_DIGITAL_IN
#define _DEPRECATE_ANALOG_IN
#define INTERNAL_ADI_PORT
#define NUM_ADI_PORTS

Function documentation

adi_port_config_e_t adi_port_get_config(uint8_t port)
#include <pros/adi.h>

Gets the configuration for the given ADI port.

Parameters
port The ADI port number (from 1-8, 'a'-'h', 'A'-'H') for which to return the configuration
Returns The ADI configuration for the given port

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports.

Example

#define ANALOG_SENSOR_PORT 1

void initialize() {
  adi_port_set_config(ANALOG_SENSOR_PORT, E_ADI_ANALOG_IN);
  // Displays the value of E_ADI_ANALOG_IN
  printf("Port Type: %d\n", adi_port_get_config(ANALOG_SENSOR_PORT));
}

int32_t adi_port_get_value(uint8_t port)
#include <pros/adi.h>

Gets the value for the given ADI port.

Parameters
port The ADI port number (from 1-8, 'a'-'h', 'A'-'H') for which the value will be returned
Returns The value stored for the given port

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports.

Example

#define ANALOG_SENSOR_PORT 1

void opcontrol() {
  adi_port_set_config(ANALOG_SENSOR_PORT, E_ADI_ANALOG_IN);
  printf("Port Value: %d\n", adi_get_value(ANALOG_SENSOR_PORT));
}

int32_t adi_port_set_config(uint8_t port, adi_port_config_e_t type)
#include <pros/adi.h>

Configures an ADI port to act as a given sensor type.

Parameters
port The ADI port number (from 1-8, 'a'-'h', 'A'-'H') to configure
type The configuration type for the port
Returns 1 if the operation was successful or PROS_ERR if the operation failed, setting errno.

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports.

Example

#define ANALOG_SENSOR_PORT 1

void initialize() {
  adi_port_set_config(ANALOG_SENSOR_PORT, E_ADI_ANALOG_IN);
}

int32_t adi_port_set_value(uint8_t port, int32_t value)
#include <pros/adi.h>

Sets the value for the given ADI port.

Parameters
port The ADI port number (from 1-8, 'a'-'h', 'A'-'H') for which the value will be set
value The value to set the ADI port to
Returns 1 if the operation was successful or PROS_ERR if the operation failed, setting errno.

This only works on ports configured as outputs, and the behavior will change depending on the configuration of the port.

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports.

Example

#define DIGITAL_SENSOR_PORT 1

void initialize() {
  adi_port_set_config(DIGITAL_SENSOR_PORT, E_ADI_DIGITAL_OUT);
  adi_set_value(DIGITAL_SENSOR_PORT, HIGH);
}

int32_t adi_analog_calibrate(uint8_t port)
#include <pros/adi.h>

Calibrates the analog sensor on the specified port and returns the new calibration value.

Parameters
port The ADI port to calibrate (from 1-8, 'a'-'h', 'A'-'H')
Returns The average sensor value computed by this function

This method assumes that the true sensor value is not actively changing at this time and computes an average from approximately 500 samples, 1 ms apart, for a 0.5 s period of calibration. The average value thus calculated is returned and stored for later calls to the adi_analog_read_calibrated() and adi_analog_read_calibrated_HR() functions. These functions will return the difference between this value and the current sensor value when called.

Do not use this function when the sensor value might be unstable (gyro rotation, accelerometer movement).

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports

Example

#define ANALOG_SENSOR_PORT 1

void initialize() {
  adi_analog_calibrate(ANALOG_SENSOR_PORT);
  printf("Calibrated Reading: %d\n", adi_analog_read_calibrated(ANALOG_SENSOR_PORT));
  // All readings from then on will be calibrated
}

int32_t adi_analog_read(uint8_t port)
#include <pros/adi.h>

Gets the 12-bit value of the specified port.

Parameters
port The ADI port (from 1-8, 'a'-'h', 'A'-'H') for which the value will be returned
Returns The analog sensor value, where a value of 0 reflects an input voltage of nearly 0 V and a value of 4095 reflects an input voltage of nearly 5 V

The value returned is undefined if the analog pin has been switched to a different mode.

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EADDRINUSE - The port is not configured as an analog input

Example

#define ANALOG_SENSOR_PORT 1

void opcontrol() {
  while (true) {
    printf("Sensor Reading: %d\n", adi_analog_read(ANALOG_SENSOR_PORT));
    delay(5);
  }
}

int32_t adi_analog_read_calibrated(uint8_t port)
#include <pros/adi.h>

Gets the 12 bit calibrated value of an analog input port.

Parameters
port The ADI port (from 1-8, 'a'-'h', 'A'-'H') for which the value will be returned
Returns The difference of the sensor value from its calibrated default from -4095 to 4095

The adi_analog_calibrate() function must be run first. This function is inappropriate for sensor values intended for integration, as round-off error can accumulate causing drift over time. Use adi_analog_read_calibrated_HR() instead.

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EADDRINUSE - The port is not configured as an analog input

Example

#define ANALOG_SENSOR_PORT 1

void opcontrol() {
  while (true) {
    printf("Sensor Reading: %d\n", adi_analog_read_calibrated(ANALOG_SENSOR_PORT));
    delay(5);
  }
}

int32_t adi_analog_read_calibrated_HR(uint8_t port)
#include <pros/adi.h>

Gets the 16 bit calibrated value of an analog input port.

Parameters
port The ADI port (from 1-8, 'a'-'h', 'A'-'H') for which the value will be returned
Returns The difference of the sensor value from its calibrated default from -16384 to 16384

The adi_analog_calibrate() function must be run first. This is intended for integrated sensor values such as gyros and accelerometers to reduce drift due to round-off, and should not be used on a sensor such as a line tracker or potentiometer.

The value returned actually has 16 bits of "precision", even though the ADC only reads 12 bits, so that error induced by the average value being between two values when integrated over time is trivial. Think of the value as the true value times 16.

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EADDRINUSE - The port is not configured as an analog input

Example

#define ANALOG_SENSOR_PORT 1

void opcontrol() {
  while (true) {
    adi_analog_calibrate(ANALOG_SENSOR_PORT);
    printf("Sensor Reading: %d\n", adi_analog_read_calibrated_HR(ANALOG_SENSOR_PORT));
    delay(5);
  }
}

int32_t adi_digital_read(uint8_t port)
#include <pros/adi.h>

Gets the digital value (1 or 0) of a port configured as a digital input.

Parameters
port The ADI port to read (from 1-8, 'a'-'h', 'A'-'H')
Returns True if the pin is HIGH, or false if it is LOW

If the port is configured as some other mode, the digital value which reflects the current state of the port is returned, which may or may not differ from the currently set value. The return value is undefined for ports configured as any mode other than a Digital Input.

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EADDRINUSE - The port is not configured as a digital input

Example

#define DIGITAL_SENSOR_PORT 1

void opcontrol() {
  while (true) {
    printf("Sensor Value: %d\n", adi_digital_read(DIGITAL_SENSOR_PORT));
    delay(5);
  }
}

int32_t adi_digital_get_new_press(uint8_t port)
#include <pros/adi.h>

Gets a rising-edge case for a digital button press.

Parameters
port The ADI port to read (from 1-8, 'a'-'h', 'A'-'H')
Returns 1 if the button is pressed and had not been pressed the last time this function was called, 0 otherwise.

This function is not thread-safe. Multiple tasks polling a single button may return different results under the same circumstances, so only one task should call this function for any given button. E.g., Task A calls this function for buttons 1 and 2. Task B may call this function for button 3, but should not for buttons 1 or 2. A typical use-case for this function is to call inside opcontrol to detect new button presses, and not in any other tasks.

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EADDRINUSE - The port is not configured as a digital input

Example

#define DIGITAL_SENSOR_PORT 1

void opcontrol() {
  while (true) {
    if (adi_digital_get_new_press(DIGITAL_SENSOR_PORT)) {
      // Toggle pneumatics or other state operations
    }
    delay(5);
  }
}

int32_t adi_digital_write(uint8_t port, bool value)
#include <pros/adi.h>

Sets the digital value (1 or 0) of a port configured as a digital output.

Parameters
port The ADI port to read (from 1-8, 'a'-'h', 'A'-'H')
value An expression evaluating to "true" or "false" to set the output to HIGH or LOW respectively, or the constants HIGH or LOW themselves
Returns 1 if the operation was successful or PROS_ERR if the operation failed, setting errno.

If the port is configured as some other mode, behavior is undefined.

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EADDRINUSE - The port is not configured as a digital output

Example

#define DIGITAL_SENSOR_PORT

void opcontrol() {
  bool state = LOW;
  while (true) {
    state != state;
    adi_digital_write(DIGITAL_SENSOR_PORT, state);
    delay(5); // toggle the sensor value every 50ms
  }
}

int32_t adi_pin_mode(uint8_t port, uint8_t mode)
#include <pros/adi.h>

Configures the port as an input or output with a variety of settings.

Parameters
port The ADI port to read (from 1-8, 'a'-'h', 'A'-'H')
mode One of INPUT, INPUT_ANALOG, INPUT_FLOATING, OUTPUT, or OUTPUT_OD
Returns 1 if the operation was successful or PROS_ERR if the operation failed, setting errno.

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports

Example

#define ANALOG_SENSOR_PORT 1

void initialize() {
  adi_pin_mode(ANALOG_SENSOR_PORT, INPUT_ANALOG);
}

int32_t adi_motor_set(uint8_t port, int8_t speed)
#include <pros/adi.h>

Sets the speed of the motor on the given port.

Parameters
port The ADI port to set (from 1-8, 'a'-'h', 'A'-'H')
speed The new signed speed; -127 is full reverse and 127 is full forward, with 0 being off
Returns 1 if the operation was successful or PROS_ERR if the operation failed, setting errno.

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EADDRINUSE - The port is not configured as an motor

Example

#define MOTOR_PORT 1

void opcontrol() {
  adi_motor_set(MOTOR_PORT, 127); // Go full speed forward
  delay(1000);
  adi_motor_set(MOTOR_PORT, 0); // Stop the motor
}

int32_t adi_motor_get(uint8_t port)
#include <pros/adi.h>

Gets the last set speed of the motor on the given port.

Parameters
port The ADI port to get (from 1-8, 'a'-'h', 'A'-'H')
Returns The last set speed of the motor on the given port

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EADDRINUSE - The port is not configured as an motor

Example

#define MOTOR_PORT 1

void opcontrol() {
  adi_motor_set(MOTOR_PORT, 127); // Go full speed forward
  printf("Commanded Motor Power: %d\n", adi_motor_get(MOTOR_PORT)); // Will display 127
  delay(1000);
  adi_motor_set(MOTOR_PORT, 0); // Stop the motor
}

int32_t adi_motor_stop(uint8_t port)
#include <pros/adi.h>

Stops the motor on the given port.

Parameters
port The ADI port to set (from 1-8, 'a'-'h', 'A'-'H')
Returns 1 if the operation was successful or PROS_ERR if the operation failed, setting errno.

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EADDRINUSE - The port is not configured as an motor

Example

#define MOTOR_PORT 1

void opcontrol() {
  adi_motor_set(MOTOR_PORT, 127); // Go full speed forward
  delay(1000);
  // adi_motor_set(MOTOR_PORT, 0); // Stop the motor
  adi_motor_stop(MOTOR_PORT); // use this instead
}

int32_t adi_encoder_get(adi_encoder_t enc)
#include <pros/adi.h>

Gets the number of ticks recorded by the encoder.

Parameters
enc The adi_encoder_t object from adi_encoder_init() to read
Returns The signed and cumulative number of counts since the last start or reset

There are 360 ticks in one revolution.

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EADDRINUSE - The port is not configured as an encoder

Example

#define PORT_TOP 1
#define PORT_BOTTOM 2

void opcontrol() {
  adi_encoder_t enc = adi_encoder_init(PORT_TOP, PORT_BOTTOM, false);
  while (true) {
  printf("Encoder Value: %d\n", adi_encoder_get(enc));
  delay(5);
  }
}

adi_encoder_t adi_encoder_init(uint8_t port_top, uint8_t port_bottom, bool reverse)
#include <pros/adi.h>

Creates an encoder object and configures the specified ports accordingly.

Parameters
port_top The "top" wire from the encoder sensor with the removable cover side up. This should be in port 1, 3, 5, or 7 ('A', 'C', 'E', or 'G').
port_bottom The "bottom" wire from the encoder sensor
reverse If "true", the sensor will count in the opposite direction
Returns An adi_encoder_t object to be stored and used for later calls to encoder functions

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EADDRINUSE - The port is not configured as an encoder

Example

#define PORT_TOP 1
#define PORT_BOTTOM 2

void opcontrol() {
  adi_encoder_t enc = adi_encoder_init(PORT_TOP, PORT_BOTTOM, false);
  while (true) {
    printf("Encoder Value: %d\n", adi_encoder_get(enc));
    delay(5);
  }
}

int32_t adi_encoder_reset(adi_encoder_t enc)
#include <pros/adi.h>

Sets the encoder value to zero.

Parameters
enc The adi_encoder_t object from adi_encoder_init() to reset
Returns 1 if the operation was successful or PROS_ERR if the operation failed, setting errno.

It is safe to use this method while an encoder is enabled. It is not necessary to call this method before stopping or starting an encoder.

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EADDRINUSE - The port is not configured as an encoder

Example

#define PORT_TOP 1
#define PORT_BOTTOM 2

void opcontrol() {
  adi_encoder_t enc = adi_encoder_init(PORT_TOP, PORT_BOTTOM, false);
  delay(1000); // Move the encoder around in this time
  adi_encoder_reset(enc); // The encoder is now zero again
}

int32_t adi_encoder_shutdown(adi_encoder_t enc)
#include <pros/adi.h>

Disables the encoder and voids the configuration on its ports.

Parameters
enc The adi_encoder_t object from adi_encoder_init() to stop
Returns 1 if the operation was successful or PROS_ERR if the operation failed, setting errno.

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EADDRINUSE - The port is not configured as an encoder

Example

#define PORT_TOP 1
#define PORT_BOTTOM 2

void opcontrol() {
  adi_encoder_t enc = adi_encoder_init(PORT_TOP, PORT_BOTTOM, false);
  // Use the encoder
  adi_encoder_shutdown(enc);
}

int32_t adi_ultrasonic_get(adi_ultrasonic_t ult)
#include <pros/adi.h>

Gets the current ultrasonic sensor value in centimeters.

Parameters
ult The adi_ultrasonic_t object from adi_ultrasonic_init() to read
Returns The distance to the nearest object in m^-4 (10000 indicates 1 meter), measured from the sensor's mounting points.

If no object was found, zero is returned. If the ultrasonic sensor was never started, the return value is undefined. Round and fluffy objects can cause inaccurate values to be returned.

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EADDRINUSE - The port is not configured as an ultrasonic

Example

#define PORT_PING 1
#define PORT_ECHO 2

void opcontrol() {
  adi_ultrasonic_t ult = adi_ultrasonic_init(PORT_PING, PORT_ECHO);
  while (true) {
    // Print the distance read by the ultrasonic
    printf("Distance: %d\n", adi_ultrasonic_get(ult));
    delay(5);
  }
}

adi_ultrasonic_t adi_ultrasonic_init(uint8_t port_ping, uint8_t port_echo)
#include <pros/adi.h>

Creates an ultrasonic object and configures the specified ports accordingly.

Parameters
port_ping The port connected to the orange OUTPUT cable. This should be in port 1, 3, 5, or 7 ('A', 'C', 'E', 'G').
port_echo The port connected to the yellow INPUT cable. This should be in the next highest port following port_ping.
Returns An adi_ultrasonic_t object to be stored and used for later calls to ultrasonic functions

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EADDRINUSE - The port is not configured as an ultrasonic

Example

#define PORT_PING 1
#define PORT_ECHO 2

void opcontrol() {
  adi_ultrasonic_t ult = adi_ultrasonic_init(PORT_PING, PORT_ECHO);
    while (true) {
    // Print the distance read by the ultrasonic
    printf("Distance: %d\n", adi_ultrasonic_get(ult));
    delay(5);
  }
}

int32_t adi_ultrasonic_shutdown(adi_ultrasonic_t ult)
#include <pros/adi.h>

Disables the ultrasonic sensor and voids the configuration on its ports.

Parameters
ult The adi_ultrasonic_t object from adi_ultrasonic_init() to stop
Returns 1 if the operation was successful or PROS_ERR if the operation failed, setting errno.

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EADDRINUSE - The port is not configured as an ultrasonic

Example

#define PORT_PING 1
#define PORT_ECHO 2

void opcontrol() {
  adi_ultrasonic_t ult = adi_ultrasonic_init(PORT_PING, PORT_ECHO);
  while (true) {
    // Print the distance read by the ultrasonic
    printf("Distance: %d\n", adi_ultrasonic_get(ult));
    delay(5);
  }
  adi_ultrasonic_shutdown(ult);
}

double adi_gyro_get(adi_gyro_t gyro)
#include <pros/adi.h>

Gets the current gyro angle in tenths of a degree.

Parameters
gyro The adi_gyro_t object for which the angle will be returned
Returns The gyro angle in degrees.

Unless a multiplier is applied to the gyro, the return value will be a whole number representing the number of degrees of rotation times 10.

There are 360 degrees in a circle, thus the gyro will return 3600 for one whole rotation.

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EADDRINUSE - The port is not configured as a gyro

Example

#define GYRO_PORT 1
#define GYRO_MULTIPLIER 1 // Standard behavior

void opcontrol() {
  adi_gyro_t gyro = adi_gyro_init(GYRO_PORT, GYRO_MULTIPLIER);
  while (true) {
    // Print the gyro's heading
    printf("Heading: %lf\n", adi_gyro_get(gyro));
    delay(5);
  }
}

adi_gyro_t adi_gyro_init(uint8_t port, double multiplier)
#include <pros/adi.h>

Initializes a gyroscope on the given port.

Parameters
port The ADI port to initialize as a gyro (from 1-8, 'a'-'h', 'A'-'H')
multiplier A scalar value that will be multiplied by the gyro heading value supplied by the ADI
Returns An adi_gyro_t object containing the given port, or PROS_ERR if the initialization failed.

If the given port has not previously been configured as a gyro, then this function starts a 1300 ms calibration period.

It is highly recommended that this function be called from initialize() when the robot is stationary to ensure proper calibration.

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EADDRINUSE - The port is not configured as a gyro

Example

#define GYRO_PORT 1
#define GYRO_MULTIPLIER 1 // Standard behavior

void opcontrol() {
  adi_gyro_t gyro = adi_gyro_init(GYRO_PORT, GYRO_MULTIPLIER);
  while (true) {
    // Print the gyro's heading
    printf("Heading: %lf\n", adi_gyro_get(gyro));
    delay(5);
  }
}

int32_t adi_gyro_reset(adi_gyro_t gyro)
#include <pros/adi.h>

Resets the gyroscope value to zero.

Parameters
gyro The adi_gyro_t object for which the angle will be returned
Returns 1 if the operation was successful or PROS_ERR if the operation failed, setting errno.

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EADDRINUSE - The port is not configured as a gyro

Example

#define GYRO_PORT 1
#define GYRO_MULTIPLIER 1 // Standard behavior

void opcontrol() {
  adi_gyro_t gyro = adi_gyro_init(GYRO_PORT, GYRO_MULTIPLIER);
  uint32_t now = millis();
  while (true) {
    // Print the gyro's heading
    printf("Heading: %lf\n", adi_gyro_get(gyro));

    if (millis() - now > 2000) {
      // Reset the gyro every 2 seconds
      adi_gyro_reset(gyro);
      now = millis();
    }

  delay(5);
  }
}

int32_t adi_gyro_shutdown(adi_gyro_t gyro)
#include <pros/adi.h>

Disables the gyro and voids the configuration on its port.

Parameters
gyro The adi_gyro_t object to be shut down
Returns 1 if the operation was successful or PROS_ERR if the operation failed, setting errno.

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EADDRINUSE - The port is not configured as a gyro

Example

#define GYRO_PORT 1
#define GYRO_MULTIPLIER 1 // Standard behavior

void opcontrol() {
  adi_gyro_t gyro = adi_gyro_init(GYRO_PORT, GYRO_MULTIPLIER);
  uint32_t now = millis();
  while (true) {
    // Print the gyro's heading
    printf("Heading: %lf\n", adi_gyro_get(gyro));

    if (millis() - now > 2000) {
      adi_gyro_shutdown(gyro);
      // Shut down the gyro after two seconds
      break;
    }

    delay(5);
  }
}

adi_potentiometer_t adi_potentiometer_init(uint8_t port)
#include <pros/adi.h>

Initializes a potentiometer on the given port of the original potentiometer.

Parameters
port The ADI port to initialize as a gyro (from 1-8, 'a'-'h', 'A'-'H')
Returns An adi_potentiometer_t object containing the given port, or PROS_ERR if the initialization failed.

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EADDRINUSE - The port is not configured as a potentiometer

Example

#define POTENTIOMETER_PORT 1

void opcontrol() {
  adi_potentiometer_t potentiometer = adi_potentiometer_init(POTENTIOMETER_PORT);
  while (true) {
    // Print the potentiometer's angle
    printf("Angle: %lf\n", adi_potentiometer_get_angle(potentiometer));
    delay(5);
  }
}

adi_potentiometer_t adi_potentiometer_type_init(uint8_t port, adi_potentiometer_type_e_t potentiometer_type)
#include <pros/adi.h>

Initializes a potentiometer on the given port.

Parameters
port The ADI port to initialize as a gyro (from 1-8, 'a'-'h', 'A'-'H')
potentiometer_type An adi_potentiometer_type_e_t enum value specifying the potentiometer version type
Returns An adi_potentiometer_t object containing the given port, or PROS_ERR if the initialization failed.

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EADDRINUSE - The port is not configured as a potentiometer

Example

#define POTENTIOMETER_PORT 1
#define POTENTIOMETER_TYPE E_ADI_POT_EDR

void opcontrol() {
  adi_potentiometer_t potentiometer = adi_potentiometer_type_init(POTENTIOMETER_PORT, POTENTIOMETER_TYPE);
  while (true) {
    // Print the potentiometer's angle
    printf("Angle: %lf\n", adi_potentiometer_get_angle(potentiometer));
    delay(5);
  }
}

double adi_potentiometer_get_angle(adi_potentiometer_t potentiometer)
#include <pros/adi.h>

Gets the current potentiometer angle in tenths of a degree.

Parameters
potentiometer The adi_potentiometer_t object for which the angle will be returned
Returns The potentiometer angle in degrees.

The original potentiometer rotates 250 degrees thus returning an angle between 0-250 degrees. Potentiometer V2 rotates 330 degrees thus returning an angle between 0-330 degrees.

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EADDRINUSE - The port is not configured as a potentiometer

Example

#define POTENTIOMETER_PORT 1

void opcontrol() {
  adi_potentiometer_t potentiometer = adi_potentiometer_t(POTENTIOMETER_PORT);
  while (true) {
    // Print the potnetiometer's angle
    printf("Angle: %lf\n", adi_potentiometer_get_angle(potentiometer));
    delay(5);
  }
}

adi_led_t adi_led_init(uint8_t port)
#include <pros/adi.h>

Initializes a led on the given port of the original led.

Parameters
port The ADI port to initialize as a led (from 1-8, 'a'-'h', 'A'-'H')
Returns An adi_led_t object containing the given port, or PROS_ERR if the initialization failed, setting errno

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EINVAL - The ADI port given is not a valid port as defined below EADDRINUSE - The port is not configured for ADI output

Example

#define LED_PORT 1
    
void opcontrol() {
  adi_led_t led = adi_led_init(LED_PORT);
  uint32_t buffer[10] = {0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0x00FFFF, 0xFF00FF, 0xFFFFFF, 0x000000, 0x000000, 0x000000};
  while (true) {
    // Set the led to the colors in the buffer
    adi_led_set(led, buffer, 10);
    delay(5);
  }
}

int32_t adi_led_clear_all(adi_led_t led, uint32_t* buffer, uint32_t buffer_length)
#include <pros/adi.h>

Clear the entire led strip of color.

Parameters
led port of type adi_led_t
buffer array of colors in format 0xRRGGBB, recommended that individual RGB value not to exceed 0x80 due to current draw
buffer_length length of buffer to clear
Returns PROS_SUCCESS if successful, PROS_ERR if not

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EINVAL - A given value is not correct, or the buffer is null EADDRINUSE - The port is not configured for ADI output

Example

#define LED_PORT 1
    
void opcontrol() {
  adi_led_t led = adi_led_init(LED_PORT);
     uint32_t buffer[10] = {0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0x00FFFF, 0xFF00FF, 0xFFFFFF, 0x000000, 0x000000, 0x000000};
  while (true) {
       // Set the led to the colors in the buffer
    adi_led_set(led, buffer, 10);
    delay(5);

    // Clear the led strip
    adi_led_clear(led);
    delay(5);
  }
}

int32_t adi_led_set(adi_led_t led, uint32_t* buffer, uint32_t buffer_length)
#include <pros/adi.h>

Set the entire led strip using the colors contained in the buffer.

Parameters
led port of type adi_led_t
buffer array of colors in format 0xRRGGBB, recommended that individual RGB value not to exceed 0x80 due to current draw
buffer_length length of buffer to clear
Returns PROS_SUCCESS if successful, PROS_ERR if not

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EINVAL - A given value is not correct, or the buffer is null EADDRINUSE - The port is not configured for ADI output

Example

#define LED_PORT 1
    
void opcontrol() {
  adi_led_t led = adi_led_init(LED_PORT);
  uint32_t buffer[10] = {0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0x00FFFF, 0xFF00FF, 0xFFFFFF, 0x000000, 0x000000, 0x000000};
  while (true) {
    // Set the led strip to the colors in the buffer
    adi_led_set(led, buffer, 10);
    delay(5);
  }
}

int32_t adi_led_set_all(adi_led_t led, uint32_t* buffer, uint32_t buffer_length, uint32_t color)
#include <pros/adi.h>

Set the entire led strip to one color.

Parameters
led port of type adi_led_t
buffer array of colors in format 0xRRGGBB, recommended that individual RGB value not to exceed 0x80 due to current draw
buffer_length length of buffer to clear
color color to set all the led strip value to
Returns PROS_SUCCESS if successful, PROS_ERR if not

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EINVAL - A given value is not correct, or the buffer is null EADDRINUSE - The port is not configured for ADI output

Example

#define LED_PORT 1
    
void opcontrol() {
  adi_led_t led = adi_led_init(LED_PORT);
  uint32_t buffer[10] = {0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0x00FFFF, 0xFF00FF, 0xFFFFFF, 0x000000, 0x000000, 0x000000};
  while (true) {
    // Set the led strip to red
    adi_led_set_all(led, buffer, 10, 0xFF0000);
    delay(5);
  }
}

int32_t adi_led_set_pixel(adi_led_t led, uint32_t* buffer, uint32_t buffer_length, uint32_t color, uint32_t pixel_position)
#include <pros/adi.h>

Set one pixel on the led strip.

Parameters
led port of type adi_led_t
buffer array of colors in format 0xRRGGBB, recommended that individual RGB value not to exceed 0x80 due to current draw
buffer_length length of the input buffer
color color to clear all the led strip to
pixel_position position of the pixel to clear
Returns PROS_SUCCESS if successful, PROS_ERR if not

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EINVAL - A given value is not correct, or the buffer is null EADDRINUSE - The port is not configured for ADI output

Example

#define LED_PORT 1

void opcontrol() {
  adi_led_t led = adi_led_init(LED_PORT);
  uint32_t buffer[10] = {0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0x00FFFF, 0xFF00FF, 0xFFFFFF, 0x000000, 0x000000, 0x000000};
  while (true) {
    // Set the first pixel to red
    adi_led_set_pixel(led, buffer, 10, 0xFF0000, 0);
    delay(5);
  }
}

int32_t adi_led_clear_pixel(adi_led_t led, uint32_t* buffer, uint32_t buffer_length, uint32_t pixel_position)
#include <pros/adi.h>

Clear one pixel on the led strip.

Parameters
led port of type adi_led_t
buffer array of colors in format 0xRRGGBB, recommended that individual RGB value not to exceed 0x80 due to current draw
buffer_length length of the input buffer
pixel_position position of the pixel to clear
Returns PROS_SUCCESS if successful, PROS_ERR if not

This function uses the following values of errno when an error state is reached: ENXIO - The given value is not within the range of ADI Ports EINVAL - A given value is not correct, or the buffer is null EADDRINUSE - The port is not configured for ADI output

Example

#define LED_PORT 1
    
void opcontrol() {
  adi_led_t led = adi_led_init(LED_PORT);
  uint32_t buffer[10] = {0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0x00FFFF, 0xFF00FF, 0xFFFFFF, 0x000000, 0x000000, 0x000000};
  while (true) {
    // Set the first pixel to red
    adi_led_set_pixel(led, buffer, 10, 0xFF0000, 0);
    delay(5);

    // Clear the first pixel
    adi_led_clear_pixel(led, buffer, 10, 0);
    delay(5);
  }
}

Enum documentation

enum adi_port_config_e
#include <pros/adi.h>

Represents the port type for an ADI port.

Typedef documentation

typedef int32_t adi_encoder_t
#include <pros/adi.h>

Reference type for an initialized encoder.

This merely contains the port number for the encoder.

typedef int32_t adi_ultrasonic_t
#include <pros/adi.h>

Reference type for an initialized ultrasonic.

This merely contains the port number for the ultrasonic.

typedef int32_t adi_gyro_t
#include <pros/adi.h>

Reference type for an initialized gyroscope.

This merely contains the port number for the gyroscope.

typedef int32_t adi_potentiometer_t
#include <pros/adi.h>

Reference type for an initialized potentiometer.

This merely contains the port number for the potentiometer.

typedef int32_t adi_led_t
#include <pros/adi.h>

Reference type for an initialized addressable led.

This merely contains the port number for the led, unlike its use as an object to store led data in the C++ API.

Define documentation

#define INTERNAL_ADI_PORT
#include <pros/adi.h>

#define NUM_ADI_PORTS
#include <pros/adi.h>

#define HIGH
#include <pros/adi.h>

Used for adi_digital_write() to specify a logic HIGH state to output.

In reality, using any non-zero expression or "true" will work to set a pin to HIGH.

#define LOW
#include <pros/adi.h>

Used for adi_digital_write() to specify a logic LOW state to output.

In reality, using a zero expression or "false" will work to set a pin to LOW.

#define INPUT
#include <pros/adi.h>

adi_pin_mode() state for a digital input.

#define OUTPUT
#include <pros/adi.h>

adi_pin_mode() state for a digital output.

#define INPUT_ANALOG
#include <pros/adi.h>

adi_pin_mode() state for an analog input.

#define OUTPUT_ANALOG
#include <pros/adi.h>

adi_pin_mode() state for an analog output.