Page 56 - MATINF Nr. 9-10
P. 56
56 R.D. Albu
a
Pentru a obt , ine o gam˘ mai larg˘ de mis , c˘ari, se poate utiliza setMotors() pentru a seta viteza
a
a
a
fiec˘arei rot , i ˆın parte. Aceast˘ metod˘ ia doi parametri, care sunt viteza rot , ilor din stˆanga s , i din
dreapta. Pentru a muta Finch folosind setMotors, trebuie pornite rot , ile, ˆıntrerupt programul s , i
apoi oprite rot , ile (se poate utiliza, de asemenea, setMotors (0,0) sau stopAll() pentru a opri
motoarele).
userResponse=input(”Viteza pentru roata stˆang˘a (-100 to 100): ”) pasare.setMotors(40,40) # ˆınainte
stˆanga = int(userResponse) sleep(3)
userResponse = input(”Viteza pentru roata dreapt˘a (-100 to 100): pasare.setMotors(50,25) # ˆıntoarcere la dreapta
”) sleep(4)
dreapta = int(userResponse) pasare.setMotors(40,40) # ˆınainte
pasare.setMotors(left,right) sleep(3)
sleep(2) pasare.setMotors(25,50) # ˆıntoarcere la stˆanga
pasare.stop() sleep(4)
pasare.stop()
Este o idee bun˘ s˘ se verifice dac˘ utilizatorul a introdus valori valide, ce se poate face cu o
a
a
a
a
a
declarat , ie if-else, care permite programului s˘ ia o decizie. S˘ presupunem c˘ se dores , te pornirea
a
motoarelor Finch pentru un anumit num˘ar de secunde: ˆın primul rˆand se cer utilizatorului
informat , ii s , i se convertes , te r˘aspunsul s˘au la o valoare flotant˘a, apoi se pornesc motoarele pentru
a
a
aceast˘ perioad˘ de timp.
userResponse = input(”Timpul ˆın secunde: ”) directie = input(”Introducet , i d sau s: ”)
timp = float(userResponse) if (direct , ie == ’d’):
if (timp < 0): # Dac˘a timp este mai mic decˆat 0 pasare.setMotors(50,25)
print(”Timp negativ nu este luat ˆın calcul!”) # Eroare else:
else: # Altfel pasare.setMotors(25,50)
pasare.setMotors(100,0) # ruleaz˘a pentru acel timp sleep(1)
sleep(timp) pasare.setMotors(0,0)
pasare.stop()
a
a
Uneori se dores , te s˘ se verifice dac˘ dou˘ declarat , ii booleene sunt adev˘arate. Se poate face
a
acest lucru cu operatorii logici and s , i or.
userResponse = input(”Introducet , i viteza (-100 to 100): ”) userResponse=input(”Viteza pentru roata stˆang˘a(0-50): ”)
viteza = int(userResponse) stˆanga = int(userResponse)
if (viteza>=-100) and (viteza<=100): # Dac˘ ambele sunt if (stˆanga >= 0) and (stˆanga <= 50):
a
true dreapta = 2*stˆanga
pasare.setMotors(viteza,viteza) # Mis , care ˆınainte pasare.setMotors(stˆanga,dreapta)
sleep(1) sleep(5)
pasare.stop() pasare.setMotors(0,0)
else: # Altfel else:
print(”Vitez˘ nevalid˘a!”) # Eroare print(”Eroare: Viteza nu este ˆıntre 0 s , i 50.”)
a
Se pot utiliza operatori de comparat , ie pentru a crea condit , ii booleene care utilizeaz˘a alt , i
senzori Finch, cum ar fi senzorul de distant , ˘a. Metoda getDistance() returneaz˘ distant , a pˆan˘ la
a
a
cel mai apropiat obiect ˆın centimetri. Gama senzorilor de distant , ˘a Finch este de aproximativ
2-200 cm. Senzorul de distant , ˘ nu poate m˘asura un obiect care este ap˘asat direct pe acesta!.
a
print(pasare.getDistance()) if (pasare.getDistance() > 30): # Niciun obstacol
if pasare.getDistance() < 30: # dac˘a aproape de senzor pasare.setMove(”forward”,20,50)
a
pasare.setTail(”all”,0,0,100) # Coada albastr˘ else:
else: pasare.setMove(”backward”,20,50)
pasare.setTail(”all”,100,0,0) # Coada ros , ie
sleep(2)
pasare.stopAll()
Uneori se dores , te continuarea verific˘arii st˘arii, atˆata timp cˆat este adev˘arat˘a, lucru ce se
realizeaz˘a utilizˆand o bucl˘a while, ce repet˘a declarat , iile din interiorul ei, atˆata timp cˆat o
expresie boolean˘ este adev˘arat˘a.
a