← Område 2 Guide · Bibliotek och listor Felsökning

Teknik 1 · område 2 · pass 7

Bibliotek och listor

Linjeföljaren under roboten läses via en krets och en teknik som ligger långt utanför den här kursen. Någon annan har skrivit den koden. Du använder den. Det är vad ett bibliotek är – och det är så nästan all programmering fungerar.

1. Vad ett bibliotek är

from machine import Pin – det har du skrivit sedan första passet. machine är ett bibliotek: en samling färdig kod som följer med MicroPython. Du hämtar det du behöver med import.

Idag lägger du till två bibliotek till. De är vanliga Python-filer som läggs på Pico:n, och sedan importeras precis som machine:

FilVad den kanVad du skriver
TRSensor.pyLäser de fem IR-sensorerna under frontenfrom TRSensor import TRSensor
ST7789.pyRitar text på skärmenfrom ST7789 import ST7789

Du behöver inte förstå vad som står i filerna. Du behöver veta vad de kan – det står i en kommentar överst i varje fil.

2. Ladda upp två filer

  1. Klicka på filnamnen i tabellen ovanför och spara båda i mappen teknik1.
  2. I VS Code: högerklicka på TRSensor.py → Upload file to Pico. Samma med ST7789.py.
  3. Kontrollera i Pico:ns filträd att de ligger där.
Pico
  ├── main.py         (om du har en)
  ├── TRSensor.py     ← ny
  └── ST7789.py       ← ny
På Pico:n, inte bara på datorn

import letar på Pico:n. Ligger filen bara i mappen på datorn får du ImportError: no module named 'TRSensor'. Ladda upp.

3. Fem tal i ett namn

Ny fil linje.py:

from TRSensor import TRSensor
from time import sleep

sensor = TRSensor()

while True:
    varden = sensor.AnalogRead()
    print(varden)
    sleep(0.2)

Kör. Terminalen visar något i stil med [812, 790, 65, 780, 805]. Fem tal i hakparenteser – det är en lista. Håll roboten över tejpen och flytta den i sidled: ett tal i taget hoppar upp.

SkrivsättBetyder
vardenHela listan, fem tal
varden[0]Första talet – sensorn längst till vänster
varden[2]Tredje talet – mitten
varden[4]Femte talet – längst till höger. Index börjar på noll, så det sista är 4, inte 5
sensor.AnalogRead()"Fråga sensorn." Svaret är listan. Högre tal = mörkare underlag
Så ser sensorn

Varje sensor har en IR-lampa och en mottagare bredvid varandra. På vitt underlag studsar ljuset upp i mottagaren – lågt tal. På svart tejp sugs ljuset upp – högt tal. Sensorn ser alltså inte "svart", den mäter hur mycket ljus som kommer tillbaka.

4. Skärmen

Samma sak igen, ett bibliotek till:

from TRSensor import TRSensor
from ST7789 import ST7789
from time import sleep

sensor = TRSensor()
lcd = ST7789()

while True:
    varden = sensor.AnalogRead()
    lcd.fill(lcd.SVART)
    for i in range(5):
        lcd.text(str(varden[i]), 10, 10 + i * 15, lcd.VIT)
    lcd.show()
    sleep(0.2)
RadenVad den gör
lcd.fill(lcd.SVART)Fyller hela skärmen med en färg – rensar
lcd.text(text, x, y, färg)Skriver text på plats x, y. Texten är 8 pixlar hög. Skärmen är 240 bred och 135 hög
lcd.show()Skickar det du ritat till skärmen. Inget syns förrän show()
lcd.VIT, lcd.SVART, lcd.GRON, lcd.ROD, lcd.BLA, lcd.GULFärgerna

Nu ser du sensorvärdena utan USB-kabel. Det är felsökningsverktyget resten av blocket: vad ser roboten just nu?

5. for-loopen

Raden for i in range(5): är ny. Den betyder: gör det indragna fem gånger, med i = 0, 1, 2, 3, 4. Det är så man går genom en lista.

Varvivarden[i]10 + i * 15
10vänster kant10
2125
32mitten40
4355
54höger kant70

str(varden[i]) gör om talet till text – lcd.text vill ha text. 10 + i * 15 är raden på skärmen: varje varv 15 pixlar längre ner.

Prova själv

Skriv de fem talen bredvid varandra i stället för under varandra. Vad ska ändras – x eller y?

Klart när — det här ska alla ha

Kryssen sparas i din webbläsare.

Nästa sida: linjeföljaren – kalibrering, position och att följa linjen.

6. Felsökning

6 rader

SymptomTrolig orsakÅtgärd
ImportError: no module named 'TRSensor'Filen ligger på datorn, inte på Pico:nHögerklicka → Upload file to Pico. Kontrollera filträdet
Alla fem tal är lika och ändras inteSensorkortet sitter löst i headernTryck fast det. Det ska peka rakt ner mot golvet
Skärmen är svartshow() saknaslcd.show() sist i loopen
TypeError på lcd.textEtt tal skickas in i stället för textstr(varden[i])
IndexError: list index out of rangevarden[5] – listan har index 0–4range(5) ger 0–4. Inte 5
Skärmen visar konstiga färgerFel färgkonstantAnvänd lcd.VIT osv, inte egna tal

Ord på den här sidan

OrdBetyder
bibliotekFärdig kod som någon annan skrivit, som du hämtar med import och använder
importHämta ett bibliotek så att det går att använda
listaFlera värden i ett namn. Skrivs med hakparenteser: [812, 790, 65]
indexNumret på en plats i listan. Börjar på 0
for-loopGör något ett bestämt antal gånger, med en variabel som räknar
range(5)Talen 0, 1, 2, 3, 4
str()Gör om ett tal till text
IRInfrarött ljus. Osynligt för ögat, synligt för sensorn

Ordträning