RP2040
Created at: Wednesday, 9 April 2025 1:58:58 am Last Modify: Wednesday, 9 April 2025 1:58:58 am
RP2040
Connection Detection
Just a simple GPIO-out with a GPIO-in
#include <stdio.h> #include "pico/stdlib.h" int main() { stdio_init_all(); gpio_init(0); gpio_init(1); gpio_set_dir(0,true); gpio_set_dir(1,false); gpio_put(0, 1); while (true) { bool b = gpio_get(1); if (b) printf("Hello, world!\n"); else { printf("Disconnected!\n"); } sleep_ms(1000); } }
Joystick
#include <stdio.h> #include "pico/stdlib.h" #include "hardware/adc.h" #include "../PicoInterface/src/interface/Display.h" #include "hardware/i2c.h" int main() { stdio_init_all(); adc_init(); adc_gpio_init(26); adc_gpio_init(27); adc_gpio_init(28); //--My display part of code, irrelevant Display_SetMode(128, 64); Display_DriverInit(i2c_default); gpio_set_function(PICO_DEFAULT_I2C_SDA_PIN, GPIO_FUNC_I2C); gpio_set_function(PICO_DEFAULT_I2C_SCL_PIN, GPIO_FUNC_I2C); gpio_pull_up(PICO_DEFAULT_I2C_SDA_PIN); gpio_pull_up(PICO_DEFAULT_I2C_SCL_PIN); Display_DeviceInit(); struct render_area frame_area; Display_RenderAreaInit(&frame_area); Display_RenderAreaCalcBufferLen(&frame_area); uint8_t buf[Display_GetBufferLen()]; uint8_t cmdBuf[128]; memset(buf, 0, Display_GetBufferLen()); Display_render(buf, &frame_area); uint8_t SSD1306_SET_ALL_ON = 0xA5; uint8_t SSD1306_SET_ENTIRE_ON = 0xA4; Display_DeviceCommand(&SSD1306_SET_ALL_ON); // Set all pixels on sleep_ms(500); Display_DeviceCommand(&SSD1306_SET_ENTIRE_ON); // go back to following RAM for pixel state sleep_ms(500); Display_WriteString(buf, 0, 40, "JOYSTICK"); Display_render(buf, &frame_area); char frames[128]; //--My display part of code, irrelevant const float conversion_factor = 1.0f / (1 << 12); const float conversion_factor3v3 = 3.3f / (1 << 12); int DX = 0; int DY = 0; while (true) { adc_select_input(0); uint16_t x = adc_read(); adc_select_input(1); uint16_t y = adc_read(); adc_select_input(2); uint16_t z = adc_read(); float X = x * conversion_factor; float Y = y * conversion_factor; float Z = z * conversion_factor3v3; printf("X=%f,Y=%f,Z=%f\n", X, Y, Z); sprintf(frames, "0x%03x,%f", z, Z); if(z>=0xfff){ Display_WriteString(buf, 90, 00, "CLK!"); }else{ Display_WriteString(buf, 90, 00, " "); } Display_WriteString(buf, 0, 40, frames); Display_SetPixel(buf, DX, DY, false); DX = X * 64; DY = Y * 64; Display_SetPixel(buf, DX, DY, true); Display_render(buf, &frame_area); sleep_ms(10); } }