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
   51   52   53   54   55   56   57   58   59   60   61