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);
    }
}

Generated in 47.4816 ms.

Mobile Version