PyPrintPi på en Raspberry Pi (21 / 23 steg)
Steg 21: Ansluta knappar eller en knappsats till Raspberry Pi
I den slutliga iterationen Raspberry Pi kommer att starta upp utan en skärm, tillåter användaren att välja hur många siffror av π de vill skriva ut och sedan skriva ut dem.
Det skulle vara lite bökigt att göra detta med full storlek klaviatur så jag beslutade att använda en mini keypad. Du kan också använda 3 individuella knapparna om du inte har en knappsats.
Följa kopplingsschemat ovan att ansluta tangentbordet eller knappar till din Pi. Om du använder ett tangentbord bör det finnas en gemensam pin som du ska ansluta till V ++ på Pi; Anslut 3 andra knappsatsen pins till motstånden visas i diagrammet.
Du kanske undrar hur krets funktioner, och varför vi inte bara ansluta ingångar på Pi direkt till knapparna. Svaret är att till skillnad från en LED som lyser upp baserat på ström, Pi upptäcker spänning på dess ingångar vilket innebär att en bygga upp av statisk elektricitet kan utlösa indata. För att undvika detta koppla vi varje stift till marken genom en 10 k motstånd. Detta håller spänningen till Pi "drog" till 0v, men när knappen trycks in PIN-koden blir ansluten till 5v källan. Motståndet skall vara tillräckligt stor för att förhindra en stor ström dras från Pi när knappen trycks, som skulle skada Pi.
När du har anslutit den knappar eller tangentbordet till din Pi kan du testa om Pi kan upptäcka knapptryckningar genom att skriva:
sudo python3 button_check.py
Om du trycker på någon knapp, programmet ska skriva ut (för att skärmen inte skrivaren):
Knappen Tryckte
Om detta inte sker kontrollera ditt ledningar och försök igen. Om en knapp fortfarande inte kommer att göra programmet print, prova att ansluta pinnen direkt till 5v. Om programmet svarar du har en trasig knapp, om inte du kan ha en felaktig Pi.
För att se hur button_check.py fungerar öppna den med nano genom att skriva:
Nano button_check.py
Programmet bör se ut så här:
importera RPi.GPIO som GPIO
Importera tid
#set är upp gpio korrekt
GPIO.setmode (GPIO. BCM)
GPIO.setup (23, GPIO. I)
GPIO.setup (24, GPIO. I)
GPIO.setup (25, GPIO. I)
samtidigt sant:
om (GPIO.input(23)):
skriva ut ("Knapp1 pressad")
Time.Sleep(0.2) #waits 0,2 sekunder att undvika knappen bounce
om (GPIO.input(24)):
skriva ut ("Button2" tryckt")
Time.Sleep(0.2) #waits 0,2 sekunder att undvika knappen bounce
om (GPIO.input(25)):
skriva ut ("Button3" tryckt")
Time.Sleep(0.2) #waits 0,2 sekunder att undvika knappen bounce
Om du inte är bekant med någon typ av GPIO bibliotek ska jag förklara grunderna.
Först måste en pin på Pi ställas in till antingen upptäcka en spänning eller till en utspänning.
Om vi vill identifiera knapptryckningar på stift 23 använder vi:
GPIO.setup (23, GPIO. I)
Om vi istället ville utspänning till stift 23 använder vi:
GPIO.setup (23, GPIO. OUT)
Att läsa spänningen på pin 23 av GPIO vi använder:
GPIO.input(23)
som returnerar en 1 om en spänning finns på PIN-koden eller 0 om ingen spänning på stiftet.
Den första raden är avgörande för en korrekt fungerande programmet eftersom det säger Pi vilka krets är det med:
GPIO.setmode (GPIO. BCM)
När programmet upptäcker en knapptryckning väntar det 0.2 sekunder att förhindra program utskriva ut för många meddelanden:
Time.Sleep(0.2)