← Område 1 Guide · Knapp och ljussensor Felsökning

Teknik 1 · område 1 · pass 3

Knapp och ljussensor

Förra veckan skickade Pico:n ut. Nu ska den lyssna. Två sorters ingångar: knappen, som är av eller på, och ljussensorn, som ger ett tal. Med if kan programmet fatta beslut utifrån det den hör.

1. Knappen: av eller på

Koppla: knappens ena ben till GP14, andra benet till GND. Inget motstånd. LED:n sitter kvar på GP15 sedan förra veckan.

Pico GP14 ──── knapp ──── Pico GND

Fyra ben? De sitter ihop parvis. Sätt knappen över mittspåret
så att paren hamnar på var sin sida.

Ny fil knapp.py:

from machine import Pin
from time import sleep

knapp = Pin(14, Pin.IN, Pin.PULL_UP)
led = Pin(15, Pin.OUT)

while True:
    if knapp.value() == 0:
        led.on()
    else:
        led.off()
    sleep(0.05)
RadenVad den gör
Pin.INNu lyssnar vi på pinnen i stället för att styra den
Pin.PULL_UPPinnen vilar på 1. Knappen drar ner den till 0 när du trycker. Regeln: nedtryckt = 0
knapp.value()Frågar pinnen: vad är du just nu? Svaret är 0 eller 1
if knapp.value() == 0:Om det stämmer: gör raderna som är indragna under
else:Annars: gör de här raderna i stället
==Två likamed jämför. Ett likamed sätter. Blanda inte

Kör. LED:n lyser bara medan knappen hålls nere.

2. Ett tryck tänder, nästa släcker

Programmet måste minnas om lampan är tänd. Det är en variabel. Vid varje tryck vänds den.

from machine import Pin
from time import sleep

knapp = Pin(14, Pin.IN, Pin.PULL_UP)
led = Pin(15, Pin.OUT)
tand = False

while True:
    if knapp.value() == 0:
        tand = not tand
        sleep(0.3)
    if tand:
        led.on()
    else:
        led.off()
    sleep(0.05)
Varför sleep(0.3) efter trycket?

En knapp studsar: under några tusendels sekunder efter trycket hoppar signalen mellan 0 och 1 flera gånger. Utan pausen räknas ett tryck som tio, och lampan hamnar var som helst. Pausen väntar ut studsen.

not tand betyder "motsatsen till tand". Var tand False blir det True, och tvärtom.

3. Ljussensorn: ett tal

Sensormodulen har tre stift. S till GP26, + till 3V3, − till GND. GP26 är en av tre pinnar på Pico:n som kan läsa analogt: 26, 27 och 28.

modul S ──── Pico GP26
modul + ──── Pico 3V3
modul − ──── Pico GND

Ny fil ljus.py:

from machine import ADC
from time import sleep

ljus = ADC(26)

while True:
    print(ljus.read_u16())
    sleep(0.2)

Kör. Talen rullar i terminalen. Håll handen över sensorn och se talet ändras. Det är skillnaden: knappen svarar 0 eller 1. Sensorn svarar med ett tal mellan 0 och 65535.

Prova själv

Anteckna två tal: värdet i vanligt ljus, och värdet med handen tätt över. Åt vilket håll går det när det blir mörkt – upp eller ner? Det beror på modulen, och du behöver veta det i nästa avsnitt.

OrdBetyder
digitalAv eller på. 0 eller 1. Inget däremellan. Knappen
analogEtt värde som kan vara vad som helst mellan lägsta och högsta. Ljuset
ADCAnalog-to-digital converter. Kretsen i Pico:n som gör om en spänning till ett tal. read_u16() ger 0–65535

4. Tröskeln – och nattlampan

Ett tal är inget beslut. För att göra något av det behövs en gräns: en tröskel. Under tröskeln – gör en sak. Över – gör en annan. Var tröskeln ligger bestämmer du.

from machine import ADC, Pin
from time import sleep

ljus = ADC(26)
led = Pin(15, Pin.OUT)
troskel = 30000

while True:
    varde = ljus.read_u16()
    print(varde)
    if varde < troskel:
        led.on()
    else:
        led.off()
    sleep(0.1)

Tröskeln hittar du med de två talen du antecknade: lägg den mittemellan. Låt print stå kvar i loopen – det är så du ser vad programmet ser.

Gör lampan tvärtom?

Tänds den i ljus och släcks i mörker ger din modul högre tal i mörker. Byt < mot >. Inget annat behöver ändras.

Skriv ut värdet. Alltid.

När något inte fungerar resten av blocket: lägg en print() i loopen och titta. Nio gånger av tio står svaret i terminalen.

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

Kryssen sparas i din webbläsare.

Nästa sida: buzzern. Klar med allt? Stationerna.

5. Felsökning

7 rader

SymptomTrolig orsakÅtgärd
LED:n flimrar utan att någon rör knappenPin.PULL_UP saknas – pinnen svävarLägg till Pin.PULL_UP som tredje argument
Knappen är "alltid tryckt"Fyrbensknappen sitter så att två ben som redan sitter ihop hamnar i samma radVrid knappen 90 grader
Toggle-lampan hoppar hit och dit vid ett tryckStuds – sleep(0.3) efter trycket saknasLägg till pausen direkt efter tand = not tand
Sensorn ger alltid samma talS sitter inte i GP26, eller + saknasKontrollera alla tre trådar. GP26, inte GP25
Nattlampan gör tvärtomModulen ger högre tal i mörkerByt < mot >
Röd text: SyntaxError på if-raden= i stället för ==, eller kolonet saknasTvå likamed jämför. Kolon sist på raden
Röd text: IndentationErrorRaden under if är inte indragen ett steg tillFyra mellanslag mer än if-raden