KAmodRPi Pico Prototyping Platform (PL): Difference between revisions
From Kamamilabs.com - Wiki
| Line 87: | Line 87: | ||
=====Wymiary===== | =====Wymiary===== | ||
=====Przykładowy program===== | =====Przykładowy program===== | ||
Program został przygotowany w środowisku Arduino IDE i służy do kompleksowego przetestowania wszystkich funkcji KAmodRPi Pico Prototyping Platform. Demonstruje on interakcję między czujnikami analogowymi a elementami wykonawczymi (LED, Buzzer, RGB).<br> | Program został przygotowany zarówno w środowisku Arduino IDE jak i w MicroPythonie (uproszczona wersja), i służy do kompleksowego przetestowania wszystkich funkcji KAmodRPi Pico Prototyping Platform. Demonstruje on interakcję między czujnikami analogowymi a elementami wykonawczymi (LED, Buzzer, RGB).<br> | ||
''' | Wymagania '''Arduino''':<br> | ||
*Board Manager: Raspberry Pi Pico/RP2040/RP2350 | *Board Manager: <code>Raspberry Pi Pico/RP2040/RP2350</code> | ||
*Biblioteki: Adafruit NeoPixel | *Biblioteki: <code>Adafruit NeoPixel</code> | ||
Wymagania '''MicroPython''':<br> | |||
*Skrypt wykorzystuje standardowe biblioteki MicroPythona (<code>machine, neopixel</code>)<br><br> | |||
'''Działanie programu:'''<br> | '''Działanie programu:'''<br> | ||
; 1. Sekwencja startowa (Self-test): | ; 1. Sekwencja startowa (Self-test): | ||
: • Po uruchomieniu i inicjalizacji portu szeregowego, program wykonuje charakterystyczną sekwencję dźwiękową za pomocą buzzera, sygnalizując gotowość do pracy. | : • Po uruchomieniu i inicjalizacji portu szeregowego, program wykonuje charakterystyczną sekwencję dźwiękową za pomocą buzzera, sygnalizując gotowość do pracy. | ||
; 2. Inteligentne sterowanie diodami LED (Sekcja Cyfrowa): | ; 2. Inteligentne sterowanie diodami LED (Sekcja Cyfrowa): | ||
: • Tryb automatyczny: Czerwone diody LED wykonują efekt płynnego "wędrowania" (knight rider). Prędkość animacji jest dynamicznie regulowana przez fotorezystor | : • Tryb automatyczny: Czerwone diody LED wykonują efekt płynnego "wędrowania" (knight rider). Prędkość animacji jest dynamicznie regulowana przez fotorezystor – im jaśniej, tym szybciej diody zmieniają stan. | ||
: • Tryb ręczny: Po naciśnięciu dowolnego z 4 przycisków, animacja zostaje wstrzymana, a diody LED odpowiadają bezpośrednio stanom przycisków. | : • Tryb ręczny: Po naciśnięciu dowolnego z 4 przycisków, animacja zostaje wstrzymana, a diody LED odpowiadają bezpośrednio stanom przycisków. | ||
; 3. Interaktywny Buzzer: | ; 3. Interaktywny Buzzer: | ||
:• Każdy z czterech przycisków przypisany jest do innej częstotliwości dźwięku (od 500 Hz do 2000 Hz). Naciśnięcie przycisku generuje | :• Każdy z czterech przycisków przypisany jest do innej częstotliwości dźwięku (od 500 Hz do 2000 Hz). Naciśnięcie przycisku generuje sygnał dźwiękowy o unikalnym tonie. | ||
; 4. Pasek LED RGB (WS2812): | ; 4. Pasek LED RGB (WS2812): | ||
:• Program cyklicznie wypełnia pasek 8 diod kolorami: czerwonym, zielonym i niebieskim. | :• Program cyklicznie wypełnia pasek 8 diod kolorami: czerwonym, zielonym i niebieskim. | ||
| Line 105: | Line 107: | ||
:• Program wysyła powitanie ''KAmodRPi Pico Prototyping Platform'' na port szeregowy (115200 bps) przy każdym restarcie, ułatwiając weryfikację połączenia z komputerem. | :• Program wysyła powitanie ''KAmodRPi Pico Prototyping Platform'' na port szeregowy (115200 bps) przy każdym restarcie, ułatwiając weryfikację połączenia z komputerem. | ||
; 5. Mapowanie pinów w programie: | ; 5. Mapowanie pinów w programie: | ||
:• Diody | :• Diody LED: '''LED1-LED4 ▶ GP6, GP7, GP8, GP9''' | ||
:• Przyciski | :• Przyciski: '''SW1-SW4 ▶ GP10, GP11, GP12, GP13''' (z podciąganiem PULLUP) | ||
:• | :• Fotorezystor: '''LIGHT ▶ GP27 (ADC1)''' | ||
:• Buzzer: GP15 | :• Buzzer: '''BUZZER ▶ GP15''' | ||
:• Potencjometr: GP26 (ADC0) | :• Potencjometr: '''POT ▶ GP26 (ADC0)''' | ||
:• Fotorezystor: | :• Diody WS2812: '''WS2812 ▶ GP14''' | ||
<center> | |||
[[File:KAmodRPi_Pico_Prototyping_Platform_test.png|none|900px|thumb|center]] | |||
</center> | |||
Program testowy w Arduino: | |||
<syntaxhighlight lang="arduino" line> | |||
//board manager potrzebuje: "Raspberry Pi Pico/RP2040/RP2350" -> https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json | |||
//potrzebna biblioteka: Adafruit NeoPixel | |||
#include <Adafruit_NeoPixel.h> | |||
//#include <Wire.h> | |||
//-------------------------------- | |||
#define LED1 6 | |||
#define LED2 7 | |||
#define LED3 8 | |||
#define LED4 9 | |||
#define LED_ON 1 | |||
#define LED_OFF 0 | |||
#define LED_ALL 4 | |||
#define LED_DELAY 8 | |||
#define SW1 10 | |||
#define SW2 11 | |||
#define SW3 12 | |||
#define SW4 13 | |||
#define SW_ON 0 | |||
#define SW_OFF 1 | |||
#define SW_ALL 4 | |||
#define POT_PIN 26 | |||
#define LIGHT_PIN 27 | |||
#define WS2812_PIN 14 | |||
#define NUMPIXELS 8 | |||
#define BUZZ_PIN 15 | |||
//-------------------------------- | |||
int led_sw_man(int delay); | |||
int ws_man(int delay); | |||
void buzz_show(int d); | |||
int buttons; | |||
int adj; | |||
int buzz_time; | |||
Adafruit_NeoPixel pixels(NUMPIXELS, WS2812_PIN, NEO_GRB + NEO_KHZ800); | |||
//-------------------------------- | |||
void setup() { | |||
Serial.begin(115200); | |||
delay(2000); | |||
Serial.println("KAmodRPi Pico Prototyping Platform"); | |||
pinMode(LED1, OUTPUT); | |||
pinMode(LED2, OUTPUT); | |||
pinMode(LED3, OUTPUT); | |||
pinMode(LED4, OUTPUT); | |||
pinMode(SW1, INPUT_PULLUP); | |||
pinMode(SW2, INPUT_PULLUP); | |||
pinMode(SW3, INPUT_PULLUP); | |||
pinMode(SW4, INPUT_PULLUP); | |||
pinMode(BUZZ_PIN, OUTPUT); | |||
pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED) | |||
pixels.show(); | |||
buzz_show(200); | |||
} | |||
//-------------------------------- | |||
void loop() { | |||
adj = analogRead(LIGHT_PIN); | |||
buttons = led_sw_man(adj/16); | |||
if (buttons > 0) { | |||
buzz_time = 10; | |||
//digitalWrite(BUZZ_PIN, 1); | |||
if (buttons == 1) tone(BUZZ_PIN, 500); | |||
if (buttons == 2) tone(BUZZ_PIN, 1000); | |||
if (buttons == 4) tone(BUZZ_PIN, 1500); | |||
if (buttons == 8) tone(BUZZ_PIN, 2000); | |||
} | |||
if (buzz_time > 0){ | |||
buzz_time--; | |||
//if (buzz_time == 0) digitalWrite(BUZZ_PIN, 0); | |||
if (buzz_time == 0) noTone(BUZZ_PIN); | |||
} | |||
adj = analogRead(POT_PIN); | |||
ws_man(adj/16); | |||
delay(10); | |||
} | |||
//-------------------------------- | |||
int ws_man(int delay){ | |||
static int ws_i = 0; | |||
static int ws_led = 0; | |||
static int ws_color = 0; | |||
if (ws_i < delay){ | |||
ws_i++; | |||
} else { | |||
ws_i=0; | |||
for (uint l = 0; l<NUMPIXELS; l++){ | |||
if (ws_led >= l){ | |||
if (ws_color == 0) pixels.setPixelColor(l, 255, 0, 0); | |||
if (ws_color == 1) pixels.setPixelColor(l, 0, 255, 0); | |||
if (ws_color == 2) pixels.setPixelColor(l, 0, 0, 255); | |||
} | |||
} | |||
pixels.show(); | |||
ws_led++; | |||
if (ws_led >= NUMPIXELS) { | |||
ws_led = 0; | |||
ws_color++; | |||
if (ws_color > 2) ws_color = 0; | |||
} | |||
} | |||
return 1; | |||
} | |||
//-------------------------------- | |||
int led_sw_man(int delay){ | |||
static int led_i = 0; | |||
static int led_pos = 0; | |||
static int led_dir = 0; | |||
static int led_map[LED_ALL] = {LED1, LED2, LED3, LED4}; | |||
int push_map; | |||
static int sw_map[SW_ALL] = {SW1, SW2, SW3, SW4}; | |||
push_map = 0; | |||
for (int i=0; i<SW_ALL; i++){ | |||
if (digitalRead(sw_map[i]) == SW_ON){ | |||
push_map |= (1<<i); | |||
} | |||
} | |||
if (push_map > 0){ | |||
for (int i=0; i<SW_ALL; i++){ | |||
if ((push_map & (1<<i)) > 0){ | |||
digitalWrite(led_map[i], LED_ON); | |||
} else { | |||
digitalWrite(led_map[i], LED_OFF); | |||
} | |||
} | |||
//no any push | |||
} else { | |||
if (led_i < delay){ | |||
led_i++; | |||
} else { | |||
led_i=0; | |||
if (led_pos >= 0 && led_pos < LED_ALL) | |||
digitalWrite(led_map[led_pos], LED_OFF); | |||
if (led_dir == 0){ | |||
led_pos++; | |||
if (led_pos >= LED_ALL){ | |||
led_pos = (LED_ALL - 2); | |||
led_dir = 1; | |||
} | |||
} else { | |||
led_pos--; | |||
if (led_pos < 0){ | |||
led_pos = 1; | |||
led_dir = 0; | |||
} | |||
} | |||
if (led_pos >= 0 && led_pos < LED_ALL){ | |||
digitalWrite(led_map[led_pos], LED_ON); | |||
} | |||
} | |||
} | |||
return push_map; | |||
} | |||
//-------------------------------- | |||
void buzz_show(int d){ | |||
tone(BUZZ_PIN, 1000); delay(d); | |||
noTone(BUZZ_PIN); delay(d); | |||
tone(BUZZ_PIN, 1000); delay(d); | |||
noTone(BUZZ_PIN); delay(d); | |||
tone(BUZZ_PIN, 1000); delay(d/4); | |||
noTone(BUZZ_PIN); delay(d/4); | |||
tone(BUZZ_PIN, 1000); delay(d); | |||
noTone(BUZZ_PIN); delay(d); | |||
tone(BUZZ_PIN, 1200); delay(d); | |||
noTone(BUZZ_PIN); delay(d); | |||
tone(BUZZ_PIN, 1100); delay(d/4); | |||
noTone(BUZZ_PIN); delay(d/4); | |||
tone(BUZZ_PIN, 1100); delay(d); | |||
noTone(BUZZ_PIN); delay(d); | |||
tone(BUZZ_PIN, 1000); delay(d/4); | |||
noTone(BUZZ_PIN); delay(d/4); | |||
tone(BUZZ_PIN, 1000); delay(d); | |||
noTone(BUZZ_PIN); delay(d); | |||
tone(BUZZ_PIN, 900); delay(d/4); | |||
noTone(BUZZ_PIN); delay(d/4); | |||
tone(BUZZ_PIN, 1000); delay(d); | |||
noTone(BUZZ_PIN); delay(d); | |||
} | |||
</syntaxhighlight> | |||
<br><br> | |||
Uproszczona wersja testu w MicroPythonie: | |||
<syntaxhighlight lang="python" line> | |||
import machine | |||
import utime | |||
import neopixel | |||
# --- Konfiguracja PINów --- | |||
# Diody LED i Przyciski | |||
led_pins = [6, 7, 8, 9] | |||
leds = [machine.Pin(p, machine.Pin.OUT) for p in led_pins] | |||
sw_pins = [10, 11, 12, 13] | |||
buttons = [machine.Pin(p, machine.Pin.IN, machine.Pin.PULL_UP) for p in sw_pins] | |||
# Analogowe (Potencjometr i Fotorezystor) | |||
pot = machine.ADC(26) | |||
ldr = machine.ADC(27) | |||
# Buzzer i WS2812 | |||
buzzer = machine.PWM(machine.Pin(15)) | |||
pixels = neopixel.NeoPixel(machine.Pin(14), 8) | |||
def play_tone(freq, duration): | |||
if freq > 0: | |||
buzzer.freq(freq) | |||
buzzer.duty_u16(32768) # 50% wypełnienia | |||
utime.sleep_ms(duration) | |||
buzzer.duty_u16(0) # Wyłącz dźwięk | |||
print("RPi Pico Prototyping Platform - Start Test") | |||
play_tone(1000, 100) # Sygnał startowy | |||
while True: | |||
# 1. Odczyt fotorezystora i sterowanie diodami LED | |||
light_val = ldr.read_u16() | |||
# Im ciemniej, tym szybciej mrugają diody (prosta logika testowa) | |||
speed = max(50, light_val // 100) | |||
# 2. Obsługa przycisków i buzzera | |||
for i in range(4): | |||
if buttons[i].value() == 0: # Przycisk wciśnięty | |||
leds[i].value(1) | |||
buzzer.freq(500 * (i + 1)) | |||
buzzer.duty_u16(1000) # Cichy dźwięk przycisku | |||
else: | |||
leds[i].value(0) | |||
if all(b.value() == 1 for b in buttons): | |||
buzzer.duty_u16(0) | |||
# 3. Odczyt potencjometru i sterowanie RGB (WS2812) | |||
pot_val = pot.read_u16() | |||
brightness = pot_val // 256 # Skalowanie do 0-255 | |||
# Ustawienie wszystkich diod na kolor zależny od potencjometru | |||
for i in range(8): | |||
pixels[i] = (brightness, 0, 255 - brightness) | |||
pixels.write() | |||
utime.sleep_ms(10) | |||
</syntaxhighlight> | |||
<hr> | |||
=====Linki===== | =====Linki===== | ||
Revision as of 11:38, 6 February 2026

Opis
KAmodRPi Pico Prototyping Platform - Uniwersalny System Prototypowy dla Raspberry Pi Pico
KAmodRPi Pico Prototyping Platform to wielofunkcyjna płyta rozszerzeń dla modułów z serii Raspberry Pi Pico, zaprojektowana w celu usprawnienia procesów prototypowania. Urządzenie integruje najczęściej używane komponenty elektroniczne z polem stykowym, tworząc uporządkowane środowisko pracy. Dzięki wyprowadzonym złączom GPIO i wbudowanym peryferiom, użytkownik może błyskawicznie budować i testować układy bez konieczności każdorazowego przygotowywania podstawowych elementów wejścia/wyjścia.

Podstawowe parametry
- Standardowe złącze żeńskie 2×20 pinów dla Raspberry Pi Pico, Pico W, Pico 2 (i inne pinowo zgodne z RP2040/RP2350)
- 20-pinowe złącza męskie z wyprowadzonymi wszystkimi sygnałami RPi Pico (raster 2,54 mm)
- Złącze I2C Qwire typu JST SH 4-pin 1 mm (kompatybilne z Qwiic / STEMMA QT)
- Prototypowa płytka stykowa 400 punktów
- 4 czerwone diody LED
- 8 adresowalnych diod LED WS2812
- 4 przyciski monostabilne
- Wbudowany potencjometr oraz fotorezystor do testów ADC
- Zintegrowany przetwornik piezoelektryczny do sygnalizacji dżwiękowej
- Diody LED dla każdej linii zasilającej (3.3V, 5V, VBUS)
- Wbudowany przycisk RESET połączony z pinem RUN mikrokontrolera
- Napięcie zasilania: 5V (z portu USB Raspberry Pi Pico).
- Wymiary: 85 × 140 mm
- Obsługa mikrokontrolerów:
- Standardowe złącze żeńskie 2×20 pinów dla Raspberry Pi Pico, Pico W, Pico 2 oraz innych modułów pinowo zgodnych z układami RP2040/RP2350.
- Wyprowadzenia sygnałów:
- 20-pinowe złącza męskie (goldpin) z wyprowadzonymi wszystkimi sygnałami RPi Pico (raster 2,54 mm).
- Ekosystem I2C:
- Złącze I2C Qwire typu JST SH 4-pin 1 mm (kompatybilne ze standardem Qwiic oraz STEMMA QT).
- Przestrzeń prototypowa:
- Wysokiej jakości płytka stykowa (400 punktów połączeniowych).
- Sygnalizacja wizualna:
- 4 czerwone diody LED.
- 8 adresowalnych diod RGB WS2812 (standard Neopixel).
- Dedykowane diody LED dla każdej linii zasilającej (3.3V, 5V, VBUS).
- Interfejs użytkownika:
- 4 przyciski monostabilne.
- Wbudowany przycisk RESET połączony bezpośrednio z pinem RUN mikrokontrolera.
- Sekcja pomiarowa i audio:
- Wbudowany potencjometr oraz fotorezystor do testów przetwornika ADC.
- Zintegrowany przetwornik piezoelektryczny do sygnalizacji dźwiękowej.
- Zasilanie:
- 5V (pobierane bezpośrednio z portu USB Raspberry Pi Pico).
- Wymiary płytki: 85 × 140 mm.
Wyposażenie standardowe
| Kod | Opis |
|---|---|
| KAmodRPi Pico Prototyping Platform |
|
| Prototypowa płytka stykowa |
|
| Przewody połączeniowe |
|
| Symetryczne końcówki złącz 2,54 mm |
|
Przyciski
Pamiętaj o skonfigurowaniu pinów w trybie PULL_UP w kodzie
Diody LED
Wymagają sygnału wysokiego (High), aby się zaświecić
Diody WS2812
Cały pasek 8 diod sterowany jest z jednego pinu za pomocą protokołu jednoprzewodowego.
Przycisk RESET
Ten przycisk jest połączony na stałe z pinem RUN Raspberry Pi Pico – naciśnięcie powoduje natychmiastowy restart mikrokontrolera.
Wymiary
Przykładowy program
Program został przygotowany zarówno w środowisku Arduino IDE jak i w MicroPythonie (uproszczona wersja), i służy do kompleksowego przetestowania wszystkich funkcji KAmodRPi Pico Prototyping Platform. Demonstruje on interakcję między czujnikami analogowymi a elementami wykonawczymi (LED, Buzzer, RGB).
Wymagania Arduino:
- Board Manager:
Raspberry Pi Pico/RP2040/RP2350 - Biblioteki:
Adafruit NeoPixel
Wymagania MicroPython:
- Skrypt wykorzystuje standardowe biblioteki MicroPythona (
machine, neopixel)
Działanie programu:
- 1. Sekwencja startowa (Self-test)
- • Po uruchomieniu i inicjalizacji portu szeregowego, program wykonuje charakterystyczną sekwencję dźwiękową za pomocą buzzera, sygnalizując gotowość do pracy.
- 2. Inteligentne sterowanie diodami LED (Sekcja Cyfrowa)
- • Tryb automatyczny: Czerwone diody LED wykonują efekt płynnego "wędrowania" (knight rider). Prędkość animacji jest dynamicznie regulowana przez fotorezystor – im jaśniej, tym szybciej diody zmieniają stan.
- • Tryb ręczny: Po naciśnięciu dowolnego z 4 przycisków, animacja zostaje wstrzymana, a diody LED odpowiadają bezpośrednio stanom przycisków.
- 3. Interaktywny Buzzer
- • Każdy z czterech przycisków przypisany jest do innej częstotliwości dźwięku (od 500 Hz do 2000 Hz). Naciśnięcie przycisku generuje sygnał dźwiękowy o unikalnym tonie.
- 4. Pasek LED RGB (WS2812)
- • Program cyklicznie wypełnia pasek 8 diod kolorami: czerwonym, zielonym i niebieskim.
- • Szybkość wypełniania paska i zmiany kolorów jest kontrolowana w czasie rzeczywistym za pomocą wbudowanego potencjometru.
- 5. Monitor Szeregowy
- • Program wysyła powitanie KAmodRPi Pico Prototyping Platform na port szeregowy (115200 bps) przy każdym restarcie, ułatwiając weryfikację połączenia z komputerem.
- 5. Mapowanie pinów w programie
- • Diody LED: LED1-LED4 ▶ GP6, GP7, GP8, GP9
- • Przyciski: SW1-SW4 ▶ GP10, GP11, GP12, GP13 (z podciąganiem PULLUP)
- • Fotorezystor: LIGHT ▶ GP27 (ADC1)
- • Buzzer: BUZZER ▶ GP15
- • Potencjometr: POT ▶ GP26 (ADC0)
- • Diody WS2812: WS2812 ▶ GP14

Program testowy w Arduino:
//board manager potrzebuje: "Raspberry Pi Pico/RP2040/RP2350" -> https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
//potrzebna biblioteka: Adafruit NeoPixel
#include <Adafruit_NeoPixel.h>
//#include <Wire.h>
//--------------------------------
#define LED1 6
#define LED2 7
#define LED3 8
#define LED4 9
#define LED_ON 1
#define LED_OFF 0
#define LED_ALL 4
#define LED_DELAY 8
#define SW1 10
#define SW2 11
#define SW3 12
#define SW4 13
#define SW_ON 0
#define SW_OFF 1
#define SW_ALL 4
#define POT_PIN 26
#define LIGHT_PIN 27
#define WS2812_PIN 14
#define NUMPIXELS 8
#define BUZZ_PIN 15
//--------------------------------
int led_sw_man(int delay);
int ws_man(int delay);
void buzz_show(int d);
int buttons;
int adj;
int buzz_time;
Adafruit_NeoPixel pixels(NUMPIXELS, WS2812_PIN, NEO_GRB + NEO_KHZ800);
//--------------------------------
void setup() {
Serial.begin(115200);
delay(2000);
Serial.println("KAmodRPi Pico Prototyping Platform");
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(SW1, INPUT_PULLUP);
pinMode(SW2, INPUT_PULLUP);
pinMode(SW3, INPUT_PULLUP);
pinMode(SW4, INPUT_PULLUP);
pinMode(BUZZ_PIN, OUTPUT);
pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
pixels.show();
buzz_show(200);
}
//--------------------------------
void loop() {
adj = analogRead(LIGHT_PIN);
buttons = led_sw_man(adj/16);
if (buttons > 0) {
buzz_time = 10;
//digitalWrite(BUZZ_PIN, 1);
if (buttons == 1) tone(BUZZ_PIN, 500);
if (buttons == 2) tone(BUZZ_PIN, 1000);
if (buttons == 4) tone(BUZZ_PIN, 1500);
if (buttons == 8) tone(BUZZ_PIN, 2000);
}
if (buzz_time > 0){
buzz_time--;
//if (buzz_time == 0) digitalWrite(BUZZ_PIN, 0);
if (buzz_time == 0) noTone(BUZZ_PIN);
}
adj = analogRead(POT_PIN);
ws_man(adj/16);
delay(10);
}
//--------------------------------
int ws_man(int delay){
static int ws_i = 0;
static int ws_led = 0;
static int ws_color = 0;
if (ws_i < delay){
ws_i++;
} else {
ws_i=0;
for (uint l = 0; l<NUMPIXELS; l++){
if (ws_led >= l){
if (ws_color == 0) pixels.setPixelColor(l, 255, 0, 0);
if (ws_color == 1) pixels.setPixelColor(l, 0, 255, 0);
if (ws_color == 2) pixels.setPixelColor(l, 0, 0, 255);
}
}
pixels.show();
ws_led++;
if (ws_led >= NUMPIXELS) {
ws_led = 0;
ws_color++;
if (ws_color > 2) ws_color = 0;
}
}
return 1;
}
//--------------------------------
int led_sw_man(int delay){
static int led_i = 0;
static int led_pos = 0;
static int led_dir = 0;
static int led_map[LED_ALL] = {LED1, LED2, LED3, LED4};
int push_map;
static int sw_map[SW_ALL] = {SW1, SW2, SW3, SW4};
push_map = 0;
for (int i=0; i<SW_ALL; i++){
if (digitalRead(sw_map[i]) == SW_ON){
push_map |= (1<<i);
}
}
if (push_map > 0){
for (int i=0; i<SW_ALL; i++){
if ((push_map & (1<<i)) > 0){
digitalWrite(led_map[i], LED_ON);
} else {
digitalWrite(led_map[i], LED_OFF);
}
}
//no any push
} else {
if (led_i < delay){
led_i++;
} else {
led_i=0;
if (led_pos >= 0 && led_pos < LED_ALL)
digitalWrite(led_map[led_pos], LED_OFF);
if (led_dir == 0){
led_pos++;
if (led_pos >= LED_ALL){
led_pos = (LED_ALL - 2);
led_dir = 1;
}
} else {
led_pos--;
if (led_pos < 0){
led_pos = 1;
led_dir = 0;
}
}
if (led_pos >= 0 && led_pos < LED_ALL){
digitalWrite(led_map[led_pos], LED_ON);
}
}
}
return push_map;
}
//--------------------------------
void buzz_show(int d){
tone(BUZZ_PIN, 1000); delay(d);
noTone(BUZZ_PIN); delay(d);
tone(BUZZ_PIN, 1000); delay(d);
noTone(BUZZ_PIN); delay(d);
tone(BUZZ_PIN, 1000); delay(d/4);
noTone(BUZZ_PIN); delay(d/4);
tone(BUZZ_PIN, 1000); delay(d);
noTone(BUZZ_PIN); delay(d);
tone(BUZZ_PIN, 1200); delay(d);
noTone(BUZZ_PIN); delay(d);
tone(BUZZ_PIN, 1100); delay(d/4);
noTone(BUZZ_PIN); delay(d/4);
tone(BUZZ_PIN, 1100); delay(d);
noTone(BUZZ_PIN); delay(d);
tone(BUZZ_PIN, 1000); delay(d/4);
noTone(BUZZ_PIN); delay(d/4);
tone(BUZZ_PIN, 1000); delay(d);
noTone(BUZZ_PIN); delay(d);
tone(BUZZ_PIN, 900); delay(d/4);
noTone(BUZZ_PIN); delay(d/4);
tone(BUZZ_PIN, 1000); delay(d);
noTone(BUZZ_PIN); delay(d);
}
Uproszczona wersja testu w MicroPythonie:
import machine
import utime
import neopixel
# --- Konfiguracja PINów ---
# Diody LED i Przyciski
led_pins = [6, 7, 8, 9]
leds = [machine.Pin(p, machine.Pin.OUT) for p in led_pins]
sw_pins = [10, 11, 12, 13]
buttons = [machine.Pin(p, machine.Pin.IN, machine.Pin.PULL_UP) for p in sw_pins]
# Analogowe (Potencjometr i Fotorezystor)
pot = machine.ADC(26)
ldr = machine.ADC(27)
# Buzzer i WS2812
buzzer = machine.PWM(machine.Pin(15))
pixels = neopixel.NeoPixel(machine.Pin(14), 8)
def play_tone(freq, duration):
if freq > 0:
buzzer.freq(freq)
buzzer.duty_u16(32768) # 50% wypełnienia
utime.sleep_ms(duration)
buzzer.duty_u16(0) # Wyłącz dźwięk
print("RPi Pico Prototyping Platform - Start Test")
play_tone(1000, 100) # Sygnał startowy
while True:
# 1. Odczyt fotorezystora i sterowanie diodami LED
light_val = ldr.read_u16()
# Im ciemniej, tym szybciej mrugają diody (prosta logika testowa)
speed = max(50, light_val // 100)
# 2. Obsługa przycisków i buzzera
for i in range(4):
if buttons[i].value() == 0: # Przycisk wciśnięty
leds[i].value(1)
buzzer.freq(500 * (i + 1))
buzzer.duty_u16(1000) # Cichy dźwięk przycisku
else:
leds[i].value(0)
if all(b.value() == 1 for b in buttons):
buzzer.duty_u16(0)
# 3. Odczyt potencjometru i sterowanie RGB (WS2812)
pot_val = pot.read_u16()
brightness = pot_val // 256 # Skalowanie do 0-255
# Ustawienie wszystkich diod na kolor zależny od potencjometru
for i in range(8):
pixels[i] = (brightness, 0, 255 - brightness)
pixels.write()
utime.sleep_ms(10)