Get started
Die Programmierung des Edison erfolgt auf der Seite Edpy. Dort gibt es Beispielprogramme und eine Anleitung für jede einzelne Funktion in Edpy.
Analyse von Beispielcode
Schauen wir uns für den Anfang einmal den Beispielcode für die Hinderniserkennung und -vermeidung an. Die Erklärung die einzelnen Schritte sind in den Kommentaren im Code.
#-------------Setup----------------
import Ed
Ed.EdisonVersion = Ed.V2
Ed.DistanceUnits = Ed.CM
Ed.Tempo = Ed.TEMPO_MEDIUM
#--------Your code below-----------
# Bis hierhin sollte nichts an dem Code verändert werden.
# Der Edison erkennt Hindernisse mithilfe von Infrarotlicht. Dazu hat der Edison eine Infrarot-LED vorne, die mit diesem Befehl eingeschaltet wird.
Ed.ObstacleDetectionBeam(Ed.ON)
Diese beiden Variablen werden später verwendet, um zu bestimmen, ob sich der Edison rechts oder links herum drehen soll und ob ein Hindernis erkannt wurde.
#set up veriables
SideTurn = 0
obstacle = 0
#loop#Diese foreverSchleife läuft undendlich lange. Bis das Programm mit der Quardrattaste beendet wird.
while True:
#start# Der Edison driving,fährt withoutmit ahalber duration,Geschwindigkeit. soDie drei Parameter bedeuten:
# Ed.FORWARD: eigentlich selbsterklärend.
# Ed.Speed_5: Die Geschwindigkeit, mit dem der Edison isfahren movingsoll. whileEs checkinggibt fordie obstaclesGeschwindigkeitsstufen 1-10.
# Ed.DISTANCE_UNLIMITED: Der Edison fährt solange, bis das Programm etwas anderes sagt.
Ed.Drive(Ed.FORWARD, Ed.SPEED_5, Ed.DISTANCE_UNLIMITED)
#read# obstacleNachdem detectionder stateEdison intoanfing azu variablefahren, wird jetzt gemessen, ob ein Hindernis im Weg ist. Das Ergebnis wird in einer der folgenden Variablen gespeichert:
# Ed.OBSTACLE_NONE: Kein Hindernis erkannt
# Ed.OBSTACLE_RIGHT: Hindernis an der rechten Seite
# Ed.OBSTACLE_LEFT: Hindernis an der linken Seite
# Ed.OBSTACLE_AHEAD: Hindernis voraus
# Diese Variablen einthalten Zahlen Ed.OBSTACLE_NONE ist die Nummer 0. Daher funktioniert folgende Abfrage:
obstacle = Ed.ReadObstacleDetection()
#check# ifWenn anyeine obstacleZahl has> been0 detectedzurückgegeben wird, ist ein Hindernis erkannt worden. Egal wo.
if obstacle>Ed.OBSTACLE_NONE:
#turn# onBeide bothLED LEDsgehen andan backund upder Edison fährt mit halber Geschwindigkeit 3cm zurück.
Ed.LeftLed(Ed.ON)
Ed.RightLed(Ed.ON)
Ed.PlayBeep()
Ed.Drive(Ed.BACKWARD, Ed.SPEED_5, 3)
#look at where the obstacle is and turn away from it (if obstacle ahead turn a random direction)
if obstacle==Ed.OBSTACLE_LEFT:
Ed.Drive(Ed.SPIN_RIGHT, Ed.SPEED_5, 90)
elif obstacle==Ed.OBSTACLE_RIGHT:
Ed.Drive(Ed.SPIN_LEFT, Ed.SPEED_5, 90)
elif obstacle==Ed.OBSTACLE_AHEAD:
if SideTurn ==1:
Ed.Drive(Ed.SPIN_RIGHT, Ed.SPEED_5, 90)
else:
Ed.Drive(Ed.SPIN_LEFT, Ed.SPEED_5, 90)
#after the obstacle has been avoided turn the LEDs off
Ed.LeftLed(Ed.OFF)
Ed.RightLed(Ed.OFF)
#change the direction varible, when no obstacle is being detected, this value changes rapidly, giving a sudo random direction when used
if SideTurn==1:
SideTurn=0
else:
SideTurn=1