Stap 4: Het schrijven van het programma
Voordat we erin, is het belangrijk op te merken dat de manier van inspringen belangrijk in de Python taal is. Andere talen gebruiken leestekens zoals haken om te vertellen het programma de volgorde uit te voeren dingen; Python maakt gebruik van inspringen. Hierdoor kan u niet zitten kundig voor kopieer en plak de code uit deze pagina aan uw programma, zoals de opmaak kan niet worden volledig behouden. Gelieve te voelen vrij om te volgen en uw eigen code schrijven als u gaan, of gewoon mijn voorbeeldcode hier downloaden.
Als je nieuw bij codering bent, dan is het belangrijk om te vermelden dat er geen een manier om een programma te schrijven. Mensen hebben hun eigen stijl, maar meestal komt het neer op hoe u denkt over het oplossen van een probleem. Ik zal bieden voorbeeldcode en uitleggen van het regel-voor-regel, maar gelieve te weten dat dit niet de enige manier om de exacte hetzelfde resultaat te bereiken.
import sys, time
Hier, importeren wij twee ingebouwde bibliotheken - functies, variabelen, etc. die al is gedefinieerd en dat we kunnen bellen op.
import RPi.GPIO as GPIO
Dit is een bibliotheek van Raspbian dat ons toelaat om het gebruik van Python op controle GPIO pinnen.
redPin = 11 greenPin = 13 bluePin = 15
We definiëren nu, sommige variabelen - welke pinnen we verbinding met die RGB leiden maken zullen. Deze stap is niet nodig, maar het maakt het gemakkelijker om te pinnen veranderen als u wilt.
def blink(pin):
Hier, definiëren we een functie. Een functie is een set van stappen die de computer wordt uitgevoerd in de volgorde die we aan het geven. Deze bijzondere functie vergt één variabele om te draaien: het nummer van de pin die we willen oplichten.
GPIO.setmode(GPIO.BOARD)
We beginnen onze functie door te verwijzen naar een van onze bibliotheken, GPIO. Dan, we vertellen dat we een naamgevingsconventie voor de GPIO pinnen (waarvan er twee zijn), willen zodat het programma welke wij weet naar verwijst. Vervolgens vertellen we het gebruik van de 'board' Conventie (i.p.v. Verdragvan van de BMC), opnieuw met behulp van de bibliotheek van de GPIO.
GPIO.setup(pin, GPIO.OUT)
Nu, opnieuw met behulp van de bibliotheek van de GPIO, wij vertellen de Pi dat we willen gebruik maken van een pin. Maar eerst, we moeten specificeren die pin en hoe we willen gebruiken - ingang of uitgang. "Pin" is hier de variabele dat zal worden aangesloten op blink(pin).
GPIO.output(pin, GPIO.HIGH)
Nu dat de pin is opgezet, wordt deze regel het ingeschakeld. U moet de syntaxis herkent inmiddels; hier gebruiken we dezelfde variabele "pin" en het gebruik van de bibliotheek GPIO om de pincode instellen op de waarde "hoog". In het geval van GPIO pinnen, een "hoge" waarde resulteert in 3.3V wordt doorgegeven, of "op", terwijl een "laag" resultaten in 0v wordt doorgegeven waarde, of "off".
Nu gaan we om een functie als u wilt uitschakelen van lichten te definiëren. It's gonna er bijna identiek aan de vorige functie, alleen wij zal het instellen van de pinnen terug naar laag.
def turnOff(pin): def turnOff(pin): GPIO.setmode(GPIO.BOARD) GPIO.setup(pin, GPIO.OUT) GPIO.output(pin, GPIO.LOW)
We moeten sommige specifieke functies definiëren voor kleur met behulp van de functies die we net gemaakt. Herinneren dat we pinnen 11, 13 en 15 voor rood, groen en blauw gebruiken. We beginnen met functies die verlichting inschakelen. Met dit soort functie nodig we niet eventuele parameters, zodat de haakjes leeg blijven; aanroepen van deze functie later in het programma zal gewoon uitvoeren.
def redOn(): blink(redPin)
Hier geven we de "blink" functie een pin-nummer te gebruiken, 11. Wanneer wij redOn() noemen, zal onze knipperen-functie beginnen uitvoeren met "pin" vervangen door "redPin". Herinneren dat eerder, zetten we redPin gelijk aan 11.
Nu doen we hetzelfde voor de rest van de kleuren.
def greenOn(): blink(greenPin) def blueOn(): blink(bluePin)
Vergeet niet dat bij de behandeling van licht, geel wordt gemaakt door het mengen van rood met groen, cyaan, groen en blauw, magenta met rood en blauw, en wit met door de combinatie van alle drie.
def yellowOn(): blink(redPin) blink(greenPin) def cyanOn(): blink(greenPin) blink(bluePin) def magentaOn(): blink(redPin) blink(bluePin) def whiteOn(): blink(redPin) blink(greenPin) blink(bluePin)
Tot slot, we de functies schrijven om te lichten uit te schakelen. Nogmaals, zullen de syntaxis vergelijkbaar met de bovenstaande functies.
def redOff(): turnOff(redPin) def greenOff(): turnOff(greenPin) def blueOff(): turnOff(bluePin) def yellowOff(): turnOff(redPin) turnOff(greenPin) def cyanOff(): turnOff(greenPin) turnOff(bluePin) def magentaOff(): turnOff(redPin) turnOff(bluePin) def whiteOff(): turnOff(redPin) turnOff(greenPin) turnOff(bluePin)
Nu zijn we klaar om te definiëren van onze belangrijkste functie; een lus die voortdurend zal vragen om gebruikersinvoer en reageren door te bellen naar verschillende functies. In dit geval, zal de gebruiker zitten kundig voor kleuren aan en uit zetten. Dit programma is zo geschreven dat het accepteert alleen een paar vooraf opgegeven ingangen. Anders, zal het niets doen en u een bericht in die zin.
Nogmaals, we niet vragen om alle variabelen met deze functie, zodat de haakjes leeg blijven. "terwijl True" in wezen zegt "terwijl het programma wordt uitgevoerd, dit doen", dus het draaien zal voortdurend totdat we stoppen.
def main(): while True: cmd = raw_input("Choose an option:")
We definiëren een nieuwe variabele "cmd" om later gebruiken en stel deze gelijk aan invoer van de gebruiker. Het zal ook voortdurend de gebruiker vragen om een optie te kiezen.
Nu is een "if"-instructie die alleen wordt uitgevoerd als de gebruikersinvoer precies overeenkomt met de tekst tussen de aanhalingstekens. Merk op dat hier gebruiken we twee "gelijk aan" symbolen. In Python, en inderdaad de meeste talen, wordt een enkele "gelijk is aan" gebruikt voor het wijzigen van de waarde van een variabele terwijl dubbelspel worden gebruikt om te vergelijken al dan niet variabele waarden met elkaar overeenkomen.
if cmd == "red on": redOn()
"elif" staat voor "anders, als". Dit laveert op de eerdere verklaring van 'als' en voegt nieuwe parameters, waardoor wij een keten van 'anders, als' verklaringen gemakkelijk maken.
elif cmd == "red off": redOff() elif cmd == "green on": greenOn() elif cmd == "green off" greenOff() elif cmd == "blue on": blueOn() elif cmd == "blue off": blueOff() elif cmd == "yellow on": yellowOn() elif cmd == "yellow off": yellowOff() elif cmd == "cyan on": cyanOn() elif cmd == "cyan off": cyanOff() elif cmd == "magenta on": magentaOn() elif cmd == "magenta off": magentaOff() elif cmd == "white on": whiteOn() elif cmd == "white off": whiteOff() else: print("Not a valid command.") return
Met onze laatste "else" statement, als de gebruiker probeert om input iets anders dan een van de opdrachten die hierboven opgegeven, zal het vertellen de gebruiker dat er een ongeldige opdracht. Het laatste wat dat de functie nodig heeft is dat "terugkeer" zodat het programma wanneer weet lus sequentieel doorzoeken.
main()
Dit is de laatste regel van onze code. Wanneer het programma wordt uitgevoerd, is deze regel noem de belangrijkste functie die we zojuist hebt gedefinieerd en de lus wordt ingesteld.