This repository has been archived on 2025-11-23. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
RP2040_Resources/1_Basic_GPIO/digitalOut.md

2.5 KiB

Blinky

The classic, helloWorld of embedded programming. This program turns the LED on and off periodically.

Initial steps:

  • Create new project with project generator.
  • Open the project folder in VSCode.
  • Build the project by pressing the build button at the bottom and select the option with arm-none-eabi.
  • Make sure the build exits with code 0.

Basic Code:

int main()
{
    stdio_init_all();

    const uint OnBoardLED = PICO_DEFAULT_LED_PIN;
    gpio_init(OnBoardLED);
    gpio_set_dir(OnBoardLED, GPIO_OUT);
    while (true){
        gpio_put(OnBoardLED, true);
        sleep_ms(500);
        gpio_put(OnBoardLED, false);
        sleep_ms(500);
    }
}

Explanation:

stdio_init_all(): initialize stuff

OnBoardLED = PICO_DEFAULT_LED_PIN: Get the GPIO number of onboard LED. Remember: this is GPIO Number, NOT PIN NUMBER.

gpio_init(OnBoardLED): Initialize that GPIO pin.

gpio_set_dir(OnBoardLED, GPIO_OUT): Set GPIO direction (GPIO_OUT for writing and GPIO_IN for reading).

while (true){}: Super loop of the program

gpio_put(OnBoardLED, true): Set OnBoardLED pin to on (true to turn on/set to high/voltage to VDD, false to turn off/set to low/voltage to GND)

Pico logic HIGH voltage is 3.3v and LOW voltage is 0v.

sleep_ms(500): sleep for 500ms.


Different Blinky

This makes the pico blink like a beacon, 2 short blinks followed by long delay. A for loop is used for repeating the short blink twice.

for (int i = 0; i < 2; i++)
{
    gpio_put(OnBoardLED, true);
    sleep_ms(50);
    gpio_put(OnBoardLED, false);
    sleep_ms(100);
}
sleep_ms(500);

External Blinky

This program blinks an LED connected to one of the GPIO(General Purpose Input/Output) ports.

For this example, I used Pin 20 == GP15. I connected a resistor to this pin and connected an LED in series with the resistor to the ground, as shown in the image below.

const uint LEDPin = 15;
gpio_init(LEDPin);
gpio_set_dir(LEDPin, GPIO_OUT);
while (true)
{
    for (int i = 0; i < 2; i++)
    {
        gpio_put(LEDPin, true);
        sleep_ms(50);
        gpio_put(LEDPin, false);
        sleep_ms(100);
    }
    sleep_ms(500);
}

The only change here is in line 1, PICO_DEFAULT_LED_PIN is changed to 15, to represent GP15. Remember: in the program, a GPIO pin is represented by the GP number and NOT by the pin number, as shown in the Pico's Pinout.