69 lines
1.6 KiB
C++
69 lines
1.6 KiB
C++
|
#include <cstdio>
|
||
|
#include "pico/stdlib.h"
|
||
|
|
||
|
#include "inventor.hpp"
|
||
|
#include "analog.hpp"
|
||
|
|
||
|
/*
|
||
|
Shows how to initialise and read the 3 ADC headers of Inventor 2040 W.
|
||
|
|
||
|
Press "User" to exit the program.
|
||
|
*/
|
||
|
|
||
|
using namespace inventor;
|
||
|
|
||
|
// The brightness of the LEDs
|
||
|
constexpr float BRIGHTNESS = 0.4f;
|
||
|
|
||
|
// How many times to update LEDs per second
|
||
|
const uint UPDATES = 10;
|
||
|
|
||
|
const char* ADC_NAMES[] = {"A0", "A1", "A2"};
|
||
|
|
||
|
|
||
|
// Create a new Inventor2040W
|
||
|
Inventor2040W board;
|
||
|
|
||
|
// Create an analog object for each ADC
|
||
|
Analog analogs[] = {Analog(A0), Analog(A1), Analog(A2)};
|
||
|
|
||
|
|
||
|
int main() {
|
||
|
stdio_init_all();
|
||
|
|
||
|
// Attempt to initialise the board
|
||
|
if(board.init()) {
|
||
|
|
||
|
// Pull each analog pin low. This avoids random numbers
|
||
|
// when nothing is connected to any of the pins.
|
||
|
gpio_set_pulls(A0, false, true);
|
||
|
gpio_set_pulls(A1, false, true);
|
||
|
gpio_set_pulls(A2, false, true);
|
||
|
|
||
|
// Read the GPIOs until the user button is pressed
|
||
|
while(!board.switch_pressed()) {
|
||
|
|
||
|
// Read each ADC in turn and print its voltage
|
||
|
for(uint i = 0; i < NUM_ADCS; i++) {
|
||
|
float voltage = analogs[i].read_voltage();
|
||
|
printf("%s = %f, ", ADC_NAMES[i], voltage);
|
||
|
|
||
|
// Set the neighbouring LED to a colour based on the
|
||
|
// voltage, with Green for high and Blue for low
|
||
|
float hue = (2.0f - (voltage / 3.3f)) * 0.333f;
|
||
|
board.leds.set_hsv(i + LED_A0, hue, 1.0, BRIGHTNESS);
|
||
|
}
|
||
|
|
||
|
// Print a new line
|
||
|
printf("\n");
|
||
|
|
||
|
sleep_ms(1000 / UPDATES);
|
||
|
}
|
||
|
|
||
|
// Turn off the LED bars
|
||
|
board.leds.clear();
|
||
|
|
||
|
// Sleep a short time so the clear takes effect
|
||
|
sleep_ms(100);
|
||
|
}
|
||
|
}
|