Podstawy programowania

Python / MicroPython

Raspberry Pi Pico

Spis treści

  1. Podstawowe pojęcia - zmienne i print
  2. Jeden program - jeden plik
  3. Importy "machine" i "utime"
  4. Pętla nieskończona "while True"
  5. Pętla "while - warunek"
  6. Pętla "for i in range"
  7. Warunki if, elif, else

0. Podstawowe pojęcia

Zanim zaczniemy - poznajmy podstawy!

Co to jest zmienna?

Zmienna to jak pudełko z etykietą

  • Możesz w nim przechowywać różne rzeczy
  • Etykieta to nazwa zmiennej
  • Zawartość to wartość zmiennej

Jak tworzymy zmienną?


# Tworzymy zmienną - przypisujemy wartość
imie = "Ania"
wiek = 10
wzrost = 145.5
lubię_programowanie = True

# Możemy wyświetlić wartość zmiennej
print(imie)          # Wyświetli: Ania
print(wiek)          # Wyświetli: 10
                

Używamy znaku = do przypisania wartości

Typy zmiennych

Typ Opis Przykład
int Liczba całkowita wiek = 10
float Liczba z przecinkiem temperatura = 23.5
str Tekst (string) imie = "Kasia"
bool Prawda/Fałsz wlaczone = True

Nazwy zmiennych - zasady


# ✅ DOBRE nazwy zmiennych
wiek = 10
imie_ucznia = "Tomek"
liczba_diod = 5
temperatura_pokoju = 22.5

# ❌ ŹLE - nie można tak nazywać
123zmienna = 10      # Nie zaczynaj od cyfry!
moje imie = "Ania"   # Nie używaj spacji!
if = 5               # Nie używaj słów zarezerwowanych!

# 💡 Używaj małych liter i podkreślników _
                

Operacje na zmiennych


# Matematyka
liczba = 5
liczba = liczba + 3      # Teraz liczba = 8
liczba = liczba * 2      # Teraz liczba = 16
liczba = liczba - 6      # Teraz liczba = 10

# Skrócony zapis
licznik = 0
licznik += 1             # To samo co: licznik = licznik + 1
licznik -= 1             # To samo co: licznik = licznik - 1

# Łączenie tekstów
imie = "Ania"
nazwisko = "Kowalska"
pełne_imie = imie + " " + nazwisko
print(pełne_imie)        # Wyświetli: Ania Kowalska
                

Co robi print()?

print() wyświetla informacje na ekranie


# Wyświetl tekst
print("Witaj świecie!")

# Wyświetl zmienną
wiek = 10
print(wiek)

# Wyświetl kilka rzeczy naraz
imie = "Kasia"
print("Mam na imię", imie, "i mam", wiek, "lat")
# Wyświetli: Mam na imię Kasia i mam 10 lat

# Wyświetl wynik działania
print(5 + 3)             # Wyświetli: 8
print(10 * 2)            # Wyświetli: 20
                

⚠️ WAŻNE - Wielkość liter!


# Python rozróżnia wielkie i małe litery!

wiek = 10
Wiek = 20
WIEK = 30

print(wiek)      # Wyświetli: 10
print(Wiek)      # Wyświetli: 20
print(WIEK)      # Wyświetli: 30

# To są TRZY RÓŻNE zmienne!

# ❌ Częsty błąd:
imie = "Kasia"
print(Imie)      # Błąd! Zmienna 'Imie' nie istnieje!
                

Zawsze używaj małych liter w nazwach zmiennych!

Ćwiczenie - sprawdź, czy rozumiesz!


# Co wyświetli ten program?
a = 5
b = 3
wynik = a + b
print("Wynik to:", wynik)

imie = "Ola"
wiek = 12
print(imie + " ma " + wiek + " lat")

licznik = 0
licznik += 10
licznik -= 3
print("Licznik:", licznik)
                

Odpowiedzi: Wynik to: 8 | Ola ma 12 lat | Licznik: 7

1. Jeden program - jeden plik

W MicroPython piszemy programy w jednym pliku

Jak to działa?

  • Raspberry Pi Pico to mały komputer
  • Zapisujemy kod w pliku moja_nazwa.py
  • Program uruchamia się po umieszczeniu go w pamięci płytki

Przykład


# To jest plik main.py
# Wszystko co napiszemy tutaj wykona się po kolei

print("Witaj!")
print("To jest mój pierwszy program")
                

Każda linijka wykonuje się jedna po drugiej

2. Importy - dodajemy narzędzia

Import to jak wypożyczenie specjalnych narzędzi

Co możemy zaimportować?

  • machine - kontroluje piny (wejścia/wyjścia)
  • utime - obsługuje czas (czekanie, pomiar)

Przykład - Import machine


# Importujemy narzędzie do kontrolowania pinów
from machine import Pin

# Tworzymy diodę LED na pinie 25
led = Pin(25, Pin.OUT)

# Włączamy diodę
led.value(1)
                

PIN.OUT = wyjście (wysyłamy sygnał)
PIN.IN = wejście (odbieramy sygnał)

Przykład - Import utime


# Importujemy funkcje czasu
from utime import sleep, sleep_ms, ticks_ms, ticks_diff

# Czekaj 1 sekundę
sleep(1)

# Czekaj 500 milisekund (pół sekundy)
sleep_ms(500)

# Zmierz czas w milisekundach
start = ticks_ms()
sleep(1)
koniec = ticks_ms()
print("Upłynęło:", ticks_diff(koniec, start), "ms")
                

3. Pętla nieskończona

while True:

Powtarza kod w nieskończoność!

Dlaczego pętla nieskończona?

  • Raspberry Pi Pico ma działać cały czas
  • Mrugająca dioda musi mrugać w kółko
  • Czujnik musi sprawdzać wartości ciągle

Przykład - Mrugająca dioda


from machine import Pin
from utime import sleep

led = Pin(25, Pin.OUT)

# PĘTLA NIESKOŃCZONA - działa zawsze!
while True:
    led.value(1)      # Włącz diodę
    sleep(1)          # Czekaj sekundę
    led.value(0)      # Wyłącz diodę
    sleep(1)          # Czekaj sekundę
                

⚠️ WAŻNE - Wcięcia!


# ✅ DOBRZE - kod jest wcięty (4 spacje)
while True:
    led.value(1)
    sleep(1)

# ❌ ŹLE - brak wcięć!
while True:
led.value(1)
sleep(1)
                

W Pythonie wcięcia są OBOWIĄZKOWE!

Wcięcia pokazują, co należy do pętli

4. Pętla z warunkiem

while warunek:

Powtarza kod, dopóki warunek jest prawdziwy

Jak to działa?

  • Sprawdza warunek przed każdym powtórzeniem
  • Jeśli warunek = True → wykonaj kod
  • Jeśli warunek = False → zakończ pętlę

Przykład - Licznik do 10


from machine import Pin
from utime import sleep

led = Pin(25, Pin.OUT)
licznik = 0

# Mrugaj tylko 10 razy
while licznik < 10:
    led.value(1)
    sleep(0.5)
    led.value(0)
    sleep(0.5)
    licznik = licznik + 1    # Zwiększ licznik

print("Koniec mrugania!")
                

⚠️ WAŻNE - Wcięcia w warunkach!


# ✅ DOBRZE
while licznik < 10:
    led.value(1)           # Wcięcie - należy do pętli
    sleep(0.5)             # Wcięcie - należy do pętli
    licznik = licznik + 1  # Wcięcie - należy do pętli

print("Koniec")            # Bez wcięcia - poza pętlą

# ❌ ŹLE - złe wcięcia
while licznik < 10:
led.value(1)        # Błąd! Brak wcięcia
    sleep(0.5)      # Niekonsekwentne
                

5. Pętla for i in range

Powtarza kod określoną liczbę razy

Jak działa range()?

  • range(5) → 0, 1, 2, 3, 4 (5 liczb)
  • range(1, 6) → 1, 2, 3, 4, 5
  • range(0, 10, 2) → 0, 2, 4, 6, 8

Przykład - Mrugaj 5 razy


from machine import Pin
from utime import sleep

led = Pin(25, Pin.OUT)

# Powtórz dokładnie 5 razy
for i in range(5):
    print("Mrugam", i, "raz")
    led.value(1)
    sleep(0.3)
    led.value(0)
    sleep(0.3)

print("Gotowe!")
                

Przykład - Szybsze mruganie


from machine import Pin
from utime import sleep_ms

led = Pin(25, Pin.OUT)

# Mrugaj coraz szybciej
for czas in range(500, 50, -50):
    led.value(1)
    sleep_ms(czas)
    led.value(0)
    sleep_ms(czas)
    print("Czas:", czas, "ms")
                

Czas zmienia się: 500, 450, 400, 350... 100 ms

⚠️ SUPER WAŻNE - Wcięcia w for!


# ✅ DOBRZE - kod jest wcięty
for i in range(5):
    led.value(1)      # 4 spacje wcięcia
    sleep(0.5)        # 4 spacje wcięcia
    led.value(0)      # 4 spacje wcięcia

# ❌ ŹLE
for i in range(5):
led.value(1)          # Błąd! Brak wcięcia!

# ❌ BARDZO ŹLE - mieszane wcięcia
for i in range(5):
    led.value(1)      # 4 spacje
  sleep(0.5)          # 2 spacje - BŁĄD!
                

Zawsze używaj 4 spacji!

6. Warunki if, elif, else

Program podejmuje decyzje!

Jak działają warunki?

  • if - jeśli warunek jest prawdziwy
  • elif - w przeciwnym razie, jeśli...
  • else - w przeciwnym razie

Przykład - Przycisk i dioda


from machine import Pin
from utime import sleep

przycisk = Pin(14, Pin.IN, Pin.PULL_DOWN)
led = Pin(25, Pin.OUT)

while True:
    if przycisk.value() == 1:
        led.value(1)           # Włącz gdy wciśnięty
        print("Przycisk wciśnięty!")
    else:
        led.value(0)           # Wyłącz gdy niewciśnięty
        print("Przycisk puszczony")

    sleep(0.1)
                

Przykład - Wiele warunków


from machine import Pin, ADC
from utime import sleep

czujnik = ADC(26)  # Czujnik światła

while True:
    swiatlo = czujnik.read_u16()

    if swiatlo > 50000:
        print("Bardzo jasno!")
    elif swiatlo > 30000:
        print("Jasno")
    elif swiatlo > 10000:
        print("Ciemno")
    else:
        print("Bardzo ciemno!")

    sleep(1)
                

⚠️ KRYTYCZNE - Wcięcia w if!


# ✅ DOBRZE - wcięcia są poprawne
if temperatura > 25:
    print("Gorąco!")        # 4 spacje
    led.value(1)            # 4 spacje
elif temperatura > 15:
    print("Ciepło")         # 4 spacje
else:
    print("Zimno")          # 4 spacje

# ❌ ŹLE
if temperatura > 25:
print("Gorąco!")            # Brak wcięcia - BŁĄD!
    led.value(1)
                

⚠️ Wcięcia zagnieżdżone


# Warunki w pętli - podwójne wcięcie!
for i in range(10):              # Poziom 0
    if i % 2 == 0:               # Poziom 1 (4 spacje)
        print("Parzysta:", i)    # Poziom 2 (8 spacji)
        led.value(1)             # Poziom 2 (8 spacji)
    else:                        # Poziom 1 (4 spacje)
        print("Nieparzysta:", i) # Poziom 2 (8 spacji)
        led.value(0)             # Poziom 2 (8 spacji)
                

Każdy poziom = dodatkowe 4 spacje!

Podsumowanie

Co zapamiętać?

Najważniejsze zasady

  • ✅ Jeden program = jeden plik main.py
  • ✅ Importy na początku programu
  • ✅ while True: dla nieskończonych pętli
  • ✅ for i in range(): dla liczonych pętli
  • ✅ if/elif/else do podejmowania decyzji

⚠️ PAMIĘTAJ O WCIĘCIACH!

  • Wcięcia to 4 spacje
  • Wcięcia pokazują, co należy do pętli/warunku
  • Bez wcięć program się nie uruchomi!
  • Python jest bardzo wymagający w tym temacie

To najważniejsza różnica między Pythonem a innymi językami!

Przykładowy kompletny program


# Importy
from machine import Pin
from utime import sleep

# Konfiguracja
led = Pin(25, Pin.OUT)
przycisk = Pin(14, Pin.IN, Pin.PULL_DOWN)

# Główna pętla
while True:
    if przycisk.value() == 1:
        # Szybkie mruganie
        for i in range(5):
            led.value(1)
            sleep(0.1)
            led.value(0)
            sleep(0.1)
    else:
        # Wolne mruganie
        led.value(1)
        sleep(1)
        led.value(0)
        sleep(1)
                

Teraz czas na praktykę!

🚀 Powodzenia w programowaniu Raspberry Pi Pico!