kopia lustrzana https://github.com/pimoroni/pimoroni-pico
73 wiersze
1.6 KiB
C++
73 wiersze
1.6 KiB
C++
#include "pico/stdlib.h"
|
|
|
|
#include "inventor.hpp"
|
|
|
|
/*
|
|
An example of applying a wave pattern to Inventor 2040 W's motors and LEDs.
|
|
|
|
Press "User" to exit the program.
|
|
*/
|
|
|
|
using namespace inventor;
|
|
|
|
// The speed that the LEDs and motors will cycle at
|
|
const uint SPEED = 5;
|
|
|
|
// The brightness of the LEDs
|
|
constexpr float BRIGHTNESS = 0.4;
|
|
|
|
// How many times to update LEDs and motors per second
|
|
const uint UPDATES = 50;
|
|
|
|
// How far from zero to drive the motors
|
|
constexpr float SPEED_EXTENT = 1.0f;
|
|
|
|
const uint HALF_LEDS = NUM_LEDS / 2;
|
|
|
|
|
|
// Create a new Inventor2040W
|
|
Inventor2040W board;
|
|
|
|
|
|
int main() {
|
|
stdio_init_all();
|
|
|
|
// Attempt to initialise the board
|
|
if(board.init()) {
|
|
|
|
float offset = 0.0f;
|
|
|
|
// Make rainbows until the user button is pressed
|
|
while(!board.switch_pressed()) {
|
|
|
|
offset += (float)SPEED / 1000.0f;
|
|
|
|
// Update the LED bars
|
|
for(auto i = 0u; i < HALF_LEDS; i++) {
|
|
float hue = (float)i / (float)(NUM_LEDS * 4);
|
|
board.leds.set_hsv(i, hue + offset, 1.0, BRIGHTNESS);
|
|
board.leds.set_hsv(NUM_LEDS - i - 1, hue + offset, 1.0, BRIGHTNESS);
|
|
}
|
|
|
|
// Update both motors
|
|
for(auto m = 0u; m < NUM_MOTORS; m++) {
|
|
float angle = ((float)m + offset) * (float)M_PI;
|
|
board.motors[m].speed(sin(angle) * SPEED_EXTENT);
|
|
}
|
|
|
|
sleep_ms(1000 / UPDATES);
|
|
}
|
|
|
|
// Stop both motors
|
|
for(auto m = 0u; m < NUM_MOTORS; m++) {
|
|
board.motors[m].disable();
|
|
}
|
|
|
|
// Turn off the LEDs
|
|
board.leds.clear();
|
|
|
|
// Sleep a short time so the clear takes effect
|
|
sleep_ms(100);
|
|
}
|
|
}
|