Outils pour utilisateurs

Outils du site


issue105:python

Welcome back to our Real World programming series. Last time, we programmed the RPi to turn on and off an LED when a button was pressed. Very simple, but this got us started. This month, we will do another simple project, a traffic light simulator using 3 LEDs, one Red, one Yellow and one Green. For the most part, the code is very similar to what we used last month, so you shouldn’t have any problems. If you have any questions, I suggest you look at last month’s article which should answer any of your concerns. First, let’s look at the schematic and the breadboard (below right). Notice that the wire colours correspond to its ‘job’, with the exception of the orange wire. The red wires supply 3.3 volts. The green wire controls the green LED, the yellow wire controls the yellow LED, and the orange wire controls the red LED, since the red wire is already being used. You should also know that the pins being used should work on a RPi v1a/b, RPi v1b+ and RPi v2b. The red LED cathode is connected to GPIO 17 (Physical pin 11), yellow LED cathode is connected to GPIO 23 (Physical pin 16), and the green LED cathode is connected to GPIO 22 (Physical pin 15). The Anodes of all three LEDs are connected to one side of 220 Ohm resistors and the other sides are connected to a common 3.3 VDC. We don’t need the ground voltage for this particular project.

Heureux de vous revoir dans notre série sur la programmation dans le monde réel. La dernière fois, nous avons programmé le RPi pour allumer et éteindre une LED quand on a appuyé sur un bouton. Très simple, mais c'est un bon démarrage. Ce mois-ci, nous allons réaliser un autre projet simple, un simulateur de feux tricolores routiers utilisant 3 LED, une rouge, une jaune et une verte. Majoritairement, le code va être très proche de celui utilisé le mois dernier ; il ne devrait donc pas y avoir de problème. Si vous avez des questions, je vous suggère de regarder l'article du mois dernier qui devrait répondre à toutes ces interrogations.

D'abord, regardons le schéma et la plaque d'essai (en bas à droite).

Notez que les couleurs des câbles correspondent à leur fonction, à l'exception du fil orange. Les fils rouges fournissent 3,3 volts. Le câble vert pilote la LED verte, le jaune, la LED jaune et le fil orange contrôle la LED rouge, puisque le fil rouge est déjà pris.

La cathode de la LED rouge est connecté à GPIO 17 (picot physique 11), la cathode de la LED jaune est connectée à GPIO 23 (picot physique 16) et la cathode de la LED verte est reliée à GPIO 22 (picot physique 15). Les anodes des trois LED sont connectées à un bout des résistances de 220 ohms et les autres terminaisons sont reliées au point haut de 3,3 volts. Nous n'avons pas besoin de la masse pour ce projet-ci.

Since I’ve driven only in the U.S. I’ve based the simulation on our traffic patterns. Long red light (10 seconds), green light is usually shorter than the red light time (8 seconds), and the yellow light is fairly short (2 seconds). These values are currently hard coded in the time.sleep() function calls. Feel free to change them as you see fit. Now let’s start working through the code. #!/usr/bin/env python # Traffic Light Simulator # Written by G. D. Walters #————————– import RPi.GPIO as GPIO import os import time import datetime #————————– RedLedPin = 17 YellowLedPin = 23 GreenLedPin = 22 The first 9 lines are our standard import statements and a few comment lines. The next three lines define the BCM pin numbers for our LED pins. If you wish to use physical pin numbers, be sure to change the GPIO.setmode() line in the next routine (top right).

Comme je n'ai conduit qu'aux États-Unis, j'ai basé la simulation sur la séquence US. Un long feu rouge (10 secondes), un vert habituellement plus court que le rouge (8 secondes) et un orange assez court (2 secondes). Ces valeurs sont actuellement codées en dur dans les appels de fonction time.sleep(). Vous pouvez les changer comme bon vous semble.

Maintenant, commençons à travailler sur le code.

#!/usr/bin/env python

# Traffic Light Simulator # Written by G. D. Walters

#————————–

import RPi.GPIO as GPIO import os import time import datetime

#————————–

RedLedPin = 17 YellowLedPin = 23 GreenLedPin = 22

Les 9 premières lignes sont des déclarations classiques d'import, plus quelques lignes de commentaires. Les 3 lignes suivantes définissent les numéros des picots BCM de nos picots de LED. Si vous voulez utiliser les numéros physiques des picots, assurez-vous de changer la ligne GPIO.setmode() dans la routine suivante (en haut à droite).

As I mentioned above, the GPIO.setmode needs to be changed from ‘GPIO.BCM’ to ‘GPIO.BOARD’ if you want to use the physical pin numbers instead of the BCM numbers in our definitions. The next three lines set the LED pins as output pins, and then turn all three LEDs off to start the program by setting the output value to HIGH. def LEDLoop(): print “Green On…” GPIO.output(GreenLedPin,0) time.sleep(8) GPIO.output(GreenLedPin,1) print “Green Off…” print “Yellow On…” GPIO.output(YellowLedPin,0) time.sleep(2) GPIO.output(YellowLedPin,1) print “Yellow Off…” print“Red On…” GPIO.output(RedLedPin, 0) time.sleep(10) GPIO.output(RedLedPin,1) print “Red Off…” The LEDLoop routine is very simple: • We print on the console “<color> On…”,# • Turn the LED on by setting the output value to 0 or low, • Sleep for a designated period, • Set the output value of the pin back to 1 or high, • Then print that the LED is now off.

Comme indiqué dans l'article précédent, GPIO.setmode doit être changé de « GPIO.BCM » en « GPIO.BOARD » si vous voulez utiliser les numéros des picots physiques à la place des numéros BCM dans nos définitions. Les trois lignes suivantes déclarent les picots de LED comme des sorties, puis les éteignent toutes les trois pour démarrer le programme, en plaçant la valeur de sortie à HIGH (haut).

def LEDLoop():

  print "Green On..."
  GPIO.output(GreenLedPin,0)
  time.sleep(8)
  GPIO.output(GreenLedPin,1)
  print "Green Off..."
  print "Yellow On..."
  GPIO.output(YellowLedPin,0)
  time.sleep(2)
  GPIO.output(YellowLedPin,1)
  print "Yellow Off..."
  print"Red On..."
  GPIO.output(RedLedPin, 0)
  time.sleep(10)
  GPIO.output(RedLedPin,1)
  print "Red Off..."

La routine LEDLoop est très simple : • imprimer « <color> On… » (<couleur> allumée) sur la console, • allumer la LED en mettant la valeur de sortie à 0 (niveau bas), • puis une période d'attente de la valeur convenue, • remettre la sortie à la valeur 1 (niveau haut), • puis imprimer que la LED est éteinte.

This is then duplicated for the Yellow and Red LEDs. The loop() routine simply forces the LEDLoop() routine to be called over and over until the user hits <CTRL> C on the RPi keyboard. def loop(): while True: LEDLoop() The destroy routine and the main loop are the same as last month. We simply set all the LED pins to high, turning them off, and then call GPIO.cleanup(). I’m not sure that we could make a much simpler program to do what we need to do. If you want, you could duplicate the 3 LEDS and make an intersection simulation before next time. Next time, we’ll have something that is a bit more challenging. Until then, happy programming.

Puis, ceci est copié pour les LED jaune et rouge. La routine loop() force simplement l'appel répété à l'infini de la routine LEDLoop() jusqu'à ce que l'uilisateur tape <Ctrl> C sur le clavier du RPi.

def loop():

  while True:
 	 LEDLoop()

La routine destroy() et la boucle principale sont les mêmes que le mois dernier : nous mettons toutes les sorties de LED au point haut, pour les éteindre, puis nous appelons GPIO.cleanup().

Je ne suis pas sûr que nous puissions construire un programme plus simple pour faire ce que nous devons faire.

Si vous voulez, vous pouvez dupliquer les 3 LED et programmer une simulation de carrefour avant la prochaine fois.

La prochaine fois, nous aurons quelque chose d'un peu plus corsé. Jusque-là, bonne programmation.

ENCART APP The Official Full Circle App for Ubuntu Touch Brian Douglass has created a fantastic app for Ubuntu Touch devices that will allow you to view current issues, and back issues, and to download and view them on your Ubuntu Touch phone/tablet. Install Either search for 'full circle' in the Ubuntu Touch store and click install, or view the URL below on your device and click install to be taken to the store page. https://uappexplorer.com/app/ fullcircle.bhdouglass

ENCART APP

L'appli officielle du FullCircle pour Ubuntu Touch

Brian Douglass a créé une appli fantastique pour les appareils Ubuntu Touch, qui vous permettra de voir les numéros actuels et les numéros plus anciens, et de les télécharger et de les lire sur votre téléphone/tablette Ubuntu Touch.

Installation

Soit vous cherchez « full circle » dans le magasin Ubuntu Touch et vous cliquez sur Installer, soit vous affichez l'URL ci-dessous sur votre appareil et vous cliquez sur Installer pour être transféré sur la page des téléchargements.

https://uappexplorer.com/app/fullcircle.bhdouglass

issue105/python.txt · Dernière modification : 2016/02/12 11:33 de auntiee