diff --git a/solution.c b/solution.c new file mode 100644 index 0000000000000000000000000000000000000000..0ba830c7652d50f2049a35ee1801aba7a8b7d322 --- /dev/null +++ b/solution.c @@ -0,0 +1,60 @@ +#include "pico/stdlib.h" +#include "hardware/pio.h" +#include "ws2812.pio.h" + +#define IS_RGBW true +#define WS2812_PIN 28 + +#define BUTTON_1_PIN 20 +#define BUTTON_2_PIN 21 +#define BUTTON_3_PIN 22 + +static inline void put_pixel(uint32_t pixel_grb) { + pio_sm_put_blocking(pio0, 0, pixel_grb << 8u); +} + +static inline uint32_t urgb_u32(uint8_t r, uint8_t g, uint8_t b) { + return + ((uint32_t) (r) << 8) | + ((uint32_t) (g) << 16) | + (uint32_t) (b); +} + +int main() { + stdio_init_all(); + + // Setting up the ws2812 + PIO pio = pio0; + int sm = 0; + uint offset = pio_add_program(pio, &ws2812_program); + + ws2812_program_init(pio, sm, offset, WS2812_PIN, 800000, IS_RGBW); + + // Initializing buttons + gpio_init(BUTTON_1_PIN); + gpio_set_dir(BUTTON_1_PIN, GPIO_IN); + gpio_pull_up(BUTTON_1_PIN); + + gpio_init(BUTTON_2_PIN); + gpio_set_dir(BUTTON_2_PIN, GPIO_IN); + gpio_pull_up(BUTTON_2_PIN); + + gpio_init(BUTTON_3_PIN); + gpio_set_dir(BUTTON_3_PIN, GPIO_IN); + gpio_pull_up(BUTTON_3_PIN); + + // Main loop + while (true) { + if (!gpio_get(BUTTON_1_PIN)) { + put_pixel(urgb_u32(0xff, 0, 0)); + } + if (!gpio_get(BUTTON_2_PIN)) { + put_pixel(urgb_u32(0, 0xff, 0)); + } + if (!gpio_get(BUTTON_3_PIN)) { + put_pixel(urgb_u32(0, 0, 0xff)); + } + } + + return 0; // This will never be reached +} \ No newline at end of file