• 5B/7

Knap

Guide: Få knappen til at virke 

Du skal bruge følgende:

  • Et breadboard
  • En Raspberry Pi Pico Microcontroller
  • En lysdiode
  • En knap
  • 2 modstande
  • Ledninger

Beskrivelse: 

Hvis man skal læse en knap fra picoen kan man bygge følgende kredsløb. Vi bygger det sammen med lysdiode kredsløbet fra opgave 5A, så vi kan bruge knappen til at tænde og slukke led’en.

Knappen er forbundet til GP3, og har desuden en pull-up modstand på 10K ohm (brun-sort-orange).

1. Prøv at bygge dette kredsløb:

Skriv følgende program i Thonny og prøv det:

import machine
button = machine.Pin(3, machine.Pin.IN)
while True:
    if button.value() == 0:
        print("Du trykkede på knappen!")
    

Beskrivelse af koden 

Først checker vi om knappen virker og er forbundet rigtigt med følgende program

  • For at få adgang til alle picoens benforbindelser og forskellige måder at styre dens hardware på skal vi importere biblioteket "machine"
  • Vi sætter en variabel, button til at være lig med GP3 fra vores machine bibliotek ved at skrive tallet 3 og sætter samtidig den pin til at være input, da vi gerne vil registere et tryk på knappen.
  • Derefter laver vi et uendeligt loop med while True:
  • Følgende if sætning checker om knappen bliver trykket på. Da vi i vores kredsløb bruger en pull-up modstand, i stedet for pull-down, vil der være 0V på GP3, når vi trykker knappen ned, og ellers 3,3V. Derfor skal vi checke om knappens værdi er lav/0, for at checke om den bliver trykket ned.

Tænkeopgave: Virker dit program også? - Og kan du regne ud, hvordan du skal bygge kredsløbet om, hvis du gerne vil kunne skrive if button.value() == 1: i stedet for? (Hint der skal bruges en pull-down modstand i stedet for pull-high). Prøv at bygge det og lav ændringen i programmet.

Yderligere beskrivelse:

Med picoen er det også muligt helt at undvære pull-up eller pull-down modstande, da den har indbyggede modstande den kan koble til og fra via programmet.

2. Prøv at bygge dette kredsløb:

Bemærk modstanden er fjernet fra knap-kredsløbet, så vi kan bede picoen om at bruge en intern pull-down modstand i stedet. Derfor forsyner vi knappen med 3,3V og fører knappens andet ben tilbage til GP3.

Skriv følgende program i Thonny og prøv det:

import machine
import utime
led = machine.Pin(4, machine.Pin.OUT)
button = machine.Pin(3, machine.Pin.IN, machine.Pin.PULL_DOWN)
while True:
    if button.value() == 1:
        print("Du trykkede på knappen!")
        utime.sleep(0.5)

Beskrivelse af koden 

De første lignjer kode er identiske med ovenstående kode.

  • Vi sætter en variabel, button, til at være lig med GP3 fra vores machine bibliotek ved at skrive tallet 3, og sætter samtidig den pin til at være input. Derudover anvendes den indbyggede pull down modstand.
  • Derefter laver vi et uendeligt loop med while True:
  • Følgende if sætning checker om knappen bliver trykket på. Da vi i vores kredsløb bruger den indbyggede pull-down modstand, vil der være 3,3V på GP3, når vi trykker knappen ned. Derfor skal vi checke om knappens værdi er høj/3,3V, for at checke om den bliver trykket ned.
  • Vi holder også en kort pause med utime.sleep(0.5) for at sikre os, at vi ikke skriver ud for ofte (hver halve sekund), da picoen ellers ville skrive “Du trykkede på knappen!” virkelig mange gange, hver gang vi bare trykker kort på knappen.

Spørgsmål: Hvis vi nu gerne vil bruge knappen til at tænde og slukke vores eksterne lysdiode med, hvordan skal programmet så se ud?

Svaret: Du kan anvende kommandoen toggle(). Se nedenstående kodeeksempel/kodebeskrivelse. 

Skriv følgende program i Thonny og prøv det:

import machine
import utime
led = machine.Pin(4, machine.Pin.OUT)
button = machine.Pin(3, machine.Pin.IN, machine.Pin.PULL_DOWN)
while True:
    if button.value() == 1:
        led.toggle()
        utime.sleep(0.5)

Beskrivelse af koden 

De første lignjer kode er identiske med ovenstående kode.

  • Programmet er lavet, så led’en automatisk skifter, hver gang der trykkes på knappen. Hvis den er tændt, slukker den, og hvis den er slukket tænder den. Det kaldes på engelsk for toggle, og der findes heldigvis en kommando med samme navn, led.toggle() som vi kan bruge.

Tænkeopgave: Prøv at fjerne pausen utime.sleep(0.5) fra programmet og se hvad der sker? Toggler den altid til fra tændt til slukket eller slukket til tændt? Hvorfor tror du det virker dårligere uden en pause?

Ekstra opgave: Du kan også prøve at lave et program, der tænder lysdioden, når du trykker på knappen, og automatisk slukker den 5 sekunder senere.