Zkonstruujeme blikající maják na sanitku.

Schéma zapojení

Schéma zapojení v programu KiCAD

majak schema

Funkce použité v programu

void gpio_init_mask( uint32_t maska )   (1)
static void gpio_set_dir_out_masked( uint32_t maska ) (2)
gpio_set_mask( uint32_t maska ) (3)
gpio_clr_mask( uint32_t maska ) (4)
sleep_ms(uint milisekundy)  (5)
1 Počáteční inicializace pinů, které jsou jedničkové v masce.
2 Nastavení směru pinů na výstupní, které jsou jedničkové v masce.
3 Rozsvícení pinů, které jsou jedničkové v masce.
4 Zhasnutí pinů, které jsou jedničkové v masce.
5 Pauza programu v milisekundách.

Jak se tyto funkce používají si můžete přečíst zde: Práce s několika GPIO linkami současně

Program

/* Maják na sanitku
 * (c) Jirka Chráska 2025; <jirka@lixis.cz>
 * licence BSD 3 clause
 */

#include "pico/stdlib.h"
// GPIO0 až GPIO11 budou LED majáku
uint32_t piny_majak = 1 | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7) | (1<<8) | (1<<9) | (1<<10) | (1<<11);
// to samé mohu udělat pomocí: uint32_t piny_majak = 0xfff;
// anebo to samé mohu udělat pomocí: uint32_t piny_majak = 0b0000111111111111;

void majak_init()
{
    gpio_init_mask( piny_majak ); // nastavení pinů 0 a 11
    gpio_set_dir_out_masked( piny_majak ); // na výstupní
    gpio_set_mask( piny_majak ); // testovací rozsvícení
}

// masky pro jednotlivé stavy majáku
uint32_t masky[10] = {0x7, 0xe, 0x1c, 0x38, 0x70, 0xe0, 0x1c0, 0x380, 0x700, 0xe00};
// nebo se to dá zapsat binárně takto
/* uint32_t masky[10] = { 0b000000000111,
                          0b000000001110,
                          0b000000011100,
                          0b000000111000,
                          0b000001110000,
                          0b000011100000,
                          0b000111000000,
                          0b001110000000,
                          0b011100000000,
                          0b111000000000 };

*/

int main( void )
{
int sleep_time = 50;
int i = 0;
unsigned int j = 1;

        majak_init();
        sleep_ms(1000);
        gpio_clr_mask( piny_majak ); // zhasnu maják

        while(1) {
            for( i=0; i<10; i++ ) {
                gpio_set_mask( masky[i] );
                sleep_ms(sleep_time);
                gpio_clr_mask( masky[i] );
            }
            for( i=9; i>=0; i-- ) {
                gpio_set_mask( masky[i] );
                sleep_ms(sleep_time);
                gpio_clr_mask( masky[i] );
            }
            if( (j%5) == 4 ) {
                gpio_clr_mask( piny_majak );
                sleep_ms( sleep_time );
                gpio_set_mask( piny_majak );
                sleep_ms( sleep_time );
                gpio_clr_mask( piny_majak );
                j = 0;
                sleep_ms( sleep_time/2 );
                gpio_set_mask( piny_majak );
                sleep_ms( sleep_time );
                gpio_clr_mask( piny_majak );
            }
            j++;
        }
}
cmake_minimum_required(VERSION 3.13)
include(pico_sdk_import.cmake)

project(majak1 C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
pico_sdk_init()
add_executable(majak1
    majak1.c
)
target_link_libraries(majak1 pico_stdlib)
pico_add_extra_outputs(majak1)
Sestavení programu
$ cd majak1
$ mkdir build
$ cd build
$ cmake ..
$ make -j8

Konstrukce

Konstrukce roku 2025

IMG 20250220 023555

Fungující prototyp majáku na sanitku
Konstrukce roku 2026

IMG 20260222 221738