Page 59 - MATINF Nr. 9-10
P. 59
a
Deprinderea elementelor fundamentale robotic˘ s , i de programare ˆın Python folosind robotul Finch 2.0 59
while not pasare.getButton(’A’): while not pasare.getButton(’A’):
if (pasare.getLine(’R’)<prag): # dac˘a este peste negru if (pasare.getDistance()<20): # Obstacle!
pasare.setMotors(20,0) # ˆıntoarce dreapta pasare.setMotors(0,0) # Stop
else: else: # altfel urmeaz˘ linia
a
pasare.setMotors(0,20) # ˆıntoarce stˆanga if (pasare.getLine(’R’)<prag): # peste negru
pasare.stop() pasare.setMotors(20,0) # ˆıntoarce dreapta
else:
pasare.setMotors(0,20) # ˆıntoarce stˆanga
pasare.stop()
Prin utilizarea ambilor senzori de linie, Finch poate detecta locurile ˆın care se ramific˘ o cale.
a
Cˆand Finch ajunge la punctul de ramificat , ie ˆıntr-o cale, ambii senzori de linie vor fi peste negru.
while not pasare.getButton(’A’): while not pasare.getButton(’A’):
if (pasare.getLine(’R’)<prag) and if (pasare.getLine(’R’)<prag) and
(pasare.getLine(’L’)>prag): # dreapta peste negru (pasare.getLine(’L’)>prag): #dreptul peste negru s , i
s , i stˆanga peste alb stˆangul peste alb
pasare.setMotors(20,0) # ˆıntoarce dreapta pasare.setMotors(20,0) # ˆıntoarce dreapta
elif (pasare.getLine(’R’)>prag) and elif (pasare.getLine(’R’)>prag) and
(pasre.getLine(’L’)<prag): # dreapta peste alb s , i (pasare.getLine(’L’)<prag): # dreptul peste alb s , i
stˆanga peste negru pasare.setMotors(0,20) #ˆıntoarce stˆangul peste negru
stˆanga pasare.setMotors(0,20) # ˆıntoarce stˆanga
else: # altfel merge ˆınainte elif (pasare.getLine(’R’)<prag) and
pasare.setMotors(20,20) (pasare.getLine(’L’)<prag): # ambele peste negru
pasare.stop() pasare.setMotors(0,0) # Stop
pasare.setTurn(’L’,45,50) # ˆıntoarcere spre stˆanga
if (pasare.getDistance()<60): # un obstacol
pasare.setTurn(’R’,90,50) # drumul din dreapta
pasare.setMove(’F’,5,50) # trecere peste intersect , ie
else: # ambele peste alb
pasare.setMotors(20,20) # mergere ˆınainte
pasare.stop()
Pentru a defini o funct , ie, se utilizeaz˘a cuvˆantul cheie def, urmat cum se dores , te s˘a fie
denumit˘a funct , ia. Numele nu trebuie s˘a cont , in˘a spat , ii sau semne de punctuat , ie. Numele este
urmat de o pereche de paranteze s , i de dou˘a puncte. Toate declarat , iile indentate dup˘a dou˘a
a
puncte sunt cont , inutul funct , iei. Dup˘ ce se defines , te o funct , ie, poate fi utilizat numele pentru a
a
a
apela funct , ia respectiv˘a. Funct , iile permit s˘ reutilizarea cu us , urint , ˘ a codului. Funct , iile sunt s , i
un instrument de abstractizare, care este ideea c˘ se pot face programele mai us , or de utilizat s , i
a
de ˆınt , eles prin plasarea grupurilor de act , iuni autonome ˆın cadrul funct , iilor. Un programator
poate utiliza apoi funct , iile f˘ar˘ a ˆınt , elege detaliile codului din interiorul lor!
a
# funct , ie trasare p˘atrat # functie trasare cerc
def trasarePatrat(): def trasareCerc():
for i in range(4): pasare.setMotors(40,80)
pasare.setMove(’F’,15,50) sleep(4)
pasare.setTurn(’R’,90,50) pasare.setMotors(0,0)
# trasarePatrat() # apel funct , ie # trasareCerc() # apel funct , ie
for i in range(6): for i in range(8):
trasarePatrat() drawCircle()
pasare.setTurn(’L’,60,50) bird.setTurn(’R’,45,50)