TigerJython xx
für Gymnasien

LEDs


Pi2Go, Pi2Go TTS und Pi2Go Ultimate verfügen über 4 Paare farbfähiger LEDs, die vorne, hinten und seitwärts links und rechts angebracht sind. Die einzelne LEDs-Paare können mit dem Parameter 0, 1, 2 oder 3 oder mit der Bezeichner LED_FRONT = 0, LED_LEFT = 1, LED_REAR = 2, RED_RIGHT = 3 angesprochen werden.

 

Die Farbe wird durch Aufruf der Funktion setColor("color") mit einem Farbnamen oder mit setColor(r, g, b) mit den RGB-Farbanteilen gewählt. Wie üblich liegen diese im Bereich 0..255, z.B. setColor(255, 0, 0). Bei den Farbnamen können alle X11-Farben gewählt werden z.B. setColor("fuchsia").

Mit setColorAll() werden alle LEDs angesteuert. Will man beispielsweise alle 8 LEDs weiss leuchten lassen, so verwendet man den Befehl: Led.setColorAll("white"). Dabei wird der Klassenname an Stelle eines Objekts verwendet (sog. statische Methode).

 
 
LED_FRONT
 
LED_LEFT
LED_RIGHT
 
LED_REAR
 

Der Roboter Pi2Go-Lite hat nur 2 Paare weisse LEDs, die vorne und hinten angebracht sind. Diese werden auf gleiche Art mit den Werten LED_FRONT und RED_REAR angesprochen.


Beispiel 1: Leds in verschiedenen Farben einschalten

Im Remote- und Simulationsmodus können die Leds mit den Cursortasten eingeschaltet werden: UP: vorne, DOWN: hinten, LEFT links, RIGHT: rechts, ENTER: alle. Im autonomen Modus (Leds1a.py) leuchten zuerst die vorderen LEDs 2000 Millisekunden rot, dann die hinteren 2000 ms grün, danach die linken und rechten gelb und am Schluss alle 8 LEDs weiss.

# Leds1.py

#from raspisim import *
from raspibrick import *

robot = Robot()
ledFront = Led(LED_FRONT)
ledLeft = Led(LED_LEFT)
ledRight = Led(LED_RIGHT)
ledRear = Led(LED_REAR)
    
while not isEscapeHit():
    if isUpHit():
        Led.clearAll()
        ledFront.setColor("white")    
    if isLeftHit():
        Led.clearAll()
        ledLeft.setColor("yellow") 
    if isRightHit():
        Led.clearAll()
        ledRight.setColor("yellow")                
    if isDownHit():
        Led.clearAll()
        ledRear.setColor("red")         
robot.exit()
  Autonomer Modus (ohne Cursortasten)

# Leds1a.py

from raspibrick import *

robot = Robot()
ledFront = Led(LED_FRONT)
ledLeft = Led(LED_LEFT)
ledRight = Led(LED_RIGHT)
ledRear = Led(LED_REAR)
ledFront.setColor("red")
Tools.delay(2500)
ledRear.setColor("geen")
Tools.delay(2500)
ledLeft.setColor("yellow")
Tools.delay(2500)  
ledRight.setColor(255, 255, 0)
Tools.delay(2500)
Led.setColorAll("white")
robot.exit()
Programmcode markieren (Ctrl+C kopieren)   Programmcode markieren (Ctrl+C kopieren)
   

Erklärungen zum Programmcode:

ledLeft.setColor("yellow"), oder ledRear.setColor(0, 255, 0): die Led leuchtet grün
Led.clearAll(): alle Leds werden abgeschaltet

 

Beispiel 2: SOS senden

In einer mit Escape abbrechbaren Wiederholschleife leuchten alle LEDs zuerst dreimal kurz (S) und danach dreimal lang (O). Die Pausen werden mit dem Befehl Led.clearAll() programmiert. Dabei werden alle LEDs ausgeschaltet.

# Leds2.py

from raspisim import *
#from raspibrick import *

def blink(short):
    for i in range(3):
        Led.setColorAll("yellow")
        if short:
            Tools.delay(300)
        else:
            Tools.delay(1500)
        Led.clearAll()
        Tools.delay(300)


robot = Robot()

while not robot.isEscapeHit():
    blink(True)
    blink(False)
    blink(True)
    Tools.delay(2000)
robot.exit() 
Programmcode markieren (Ctrl+C kopieren)
   

Erklärungen zum Programmcode:

Led.clearAll(): schaltet alle LEDs aus

 

Beispiel 3: Blinker ein- und ausschalten (Remote und Simulationsmodus)

Mit den Cursortasten LEFT bzw. RIGHT werden linken bzw. rechten Leds blinkend eingeschaltet, so wie bei einem Autoblinker. Mit der ENTER-Taste wird der Blinker ausgeschaltet.

Die Funktion blinker() läuft im eigenen Thread. Der Thread wird durch Aufruf der Methode start_new_thread() gestartet. Dieser führt die Funktion blinker() aus. Die zugehörige Parameterliste muss mehr als ein Element enthalten, deswegen das Komma und die Leerstelle.

# Leds3.py

from raspisim import *
#from raspibrick import *
import thread

def blinker(period):
    while isRunning:
        if isLeftBlinking:
           ledLeft.setColor("white")
           Tools.delay(period // 2)
           ledLeft.setColor("black")
        if isRightBlinking:
           ledRight.setColor("white")
           Tools.delay(period // 2)
           ledRight.setColor("black")
        Tools.delay(period // 2)
    print "Thread finished"    

robot = Robot()
gear = Gear()
gear.setSpeed(25)
ledLeft = Led(LED_LEFT)
ledRight = Led(LED_RIGHT)
isLeftBlinking = False
isRightBlinking = False    
isRunning = True
thread.start_new_thread(blinker, (500,))
    
while not isEscapeHit():
    if isLeftHit():
        isLeftBlinking = True
        isRightBlinking = False 
        gear.leftArc(0.1)      
    if isRightHit():
        isLeftBlinking = False
        isRightBlinking = True 
        gear.rightArc(0.1)  
    if isUpHit():
        isLeftBlinking = False
        isRightBlinking = False 
        gear.forward()          
    if isEnterHit():
        isLeftBlinking = False
        isRightBlinking = False
isRunning = False
robot.exit()
Programmcode markieren (Ctrl+C kopieren)
   

Erklärungen zum Programmcode:

while isRunning: damit der rechte und linke Blinker beliebig oft verwendet werden kann, wird dieser Flag gesetzt. Erst wenn das Programm mit ESCAPE beendet wird, wird der Thread mit der Funktion blinker() beendet.

 


Aufgaben Serie 7:

1)

Schreibe ein Programm, mit dem die Leds mit Cursortasten eingeschaltet werden: UP: vorne, DOWN: hinten, LEFT links, RIGHT: rechts. Wähle verschiedene Ledsfarben. Ergänze das Beispiel 1 so, dass mit ENTER-Taste alle Leds ausgeschaltet werden. Die Cursortasten können nur im Remote- und Simulationsmodus verwendet werden.

 

2)

Ergänze das Programm im Beispiel 3 so, dass der Roboter gesteuert mit Cursortasten LEFT, RIGHT, UP auf dem linken Bogen, rechten Bogen oder Geradeaus fährt. Wenn er links fährt, blinken die Leds auf der linken Seite, beim Rechtsfahren auf der rechten Seite. Beim Geradeausfahren sind beide Blinker abgestellt.