Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.99 KB | None | 0 0
  1. from microbit import *
  2. import radio
  3. import music
  4.  
  5. radio.config(channel=1)
  6. radio.on()
  7.  
  8. #Hvilken modus bit:boten er i. 0 = fjernkontroll, 1 = linjefølger
  9. #Modusen byttes ved å dobbeltrykke begge knappene samtidig på fjernkontrollen
  10. MODE = 0
  11.  
  12. #Definerer noen hastighetskonstanter
  13. MAX_SPEED, MIN_SPEED = 1023, 100
  14. LEFT_SPEED, RIGHT_SPEED = 0, 0
  15.  
  16. #Konstant for den maksimale verdien g kan ha i absoluttverdi i alle retninger
  17. g_MAX = 1023
  18. #Konstanter for de maksimale og minimale verdiene x og y kan ha
  19. #Blir regnet ut i funksjonen maksVerdier() ved kjøring av scriptet
  20. X_MAX, Y_MAX = 0, 0
  21. X_MIN, Y_MIN = 40, 40 #Absoluttverdier
  22.  
  23. #Angir hvilken retning bilen kjører. 0 = framover, 1 = bakover
  24. DIRECTION = -1
  25. #Angir hvilken side bilen svinger mot. 0 = venstre, 1 = høyre
  26. SIDE = -1
  27.  
  28. #Angir sensitiviteten for svinging.
  29. #Kan være en verdi mellom 1 og 100.
  30. X_SENS = 70
  31. # Angir sensitiviteten for kjøring framover.
  32. # Kan være en verdi mellom 1 og 100.
  33. Y_SENS = 50
  34.  
  35. #Regner ut den maksimale verdien x og y kan ha basert på sensitiviteten
  36. def maksVerdier():
  37. global X_MAX
  38. global Y_MAX
  39. X_MAX, Y_MAX = (X_SENS*g_MAX)/100, (Y_SENS*g_MAX)/100
  40. print(X_MAX, Y_MAX)
  41.  
  42. maksVerdier()
  43.  
  44. #Regner ut prosent
  45. def prosent(delen, maksimale):
  46. return round((delen*100)/maksimale)
  47.  
  48. #Regner ut hastighet fra prosent
  49. def hastighetFraProsent(prosent):
  50. return round((MAX_SPEED*prosent)/100)
  51.  
  52. #Regner ut farten til hjulet som skal svinge
  53. def svingFart(xProsent, framFart):
  54. return round((xProsent*framFart)/100)
  55.  
  56. def calcSpeed(x, y):
  57. #Regner ut farten framover basert på akselerometerverdien til y:
  58. yProsent = prosent(abs(y), Y_MAX)
  59. framFart = hastighetFraProsent(yProsent)
  60.  
  61. #Regner ut svingefarten basert på akselerometerverdien til x:
  62. xProsent = 100-prosent(abs(x), X_MAX)
  63. sFart = svingFart(xProsent, framFart)
  64.  
  65. setSpeed(framFart, sFart)
  66.  
  67. #Setter hastighetene på hvert hjul ut fra hvilken retning bilen går
  68. def setSpeed(framFart, sFart):
  69. global LEFT_SPEED
  70. global RIGHT_SPEED
  71. if DIRECTION == -1 and SIDE == -1:
  72. LEFT_SPEED = MIN_SPEED
  73. RIGHT_SPEED = MIN_SPEED
  74. elif DIRECTION == 0:
  75. #Kjører framover
  76. if SIDE == 0:
  77. #Svinger til venstre
  78. LEFT_SPEED = sFart
  79. RIGHT_SPEED = framFart
  80. elif SIDE == 1:
  81. #Svinger til høyre
  82. LEFT_SPEED = framFart
  83. RIGHT_SPEED = sFart
  84. else:
  85. #Svinger ikke
  86. LEFT_SPEED = framFart
  87. RIGHT_SPEED = framFart
  88. elif DIRECTION == 1:
  89. #Subtraherer hastigheten fra maks hastighet
  90. #(Maksimum hastighet blir minimum hastighet når
  91. #motorene går motsatt vei rundt)
  92. sFart = MAX_SPEED-sFart
  93. framFart = MAX_SPEED-framFart
  94. #Kjører bakover
  95. if SIDE == 0:
  96. #Svinger til venstre
  97. LEFT_SPEED = sFart
  98. RIGHT_SPEED = framFart
  99. elif SIDE == 1:
  100. #Svinger til høyre
  101. LEFT_SPEED = framFart
  102. RIGHT_SPEED = sFart
  103. else:
  104. #Svinger ikke
  105. LEFT_SPEED = framFart
  106. RIGHT_SPEED = framFart
  107.  
  108. #Passer på at farten til hjulene holder seg innenfor grensene
  109. checkBounds()
  110.  
  111. #Denne funksjonen skjekker verdiene til LEFT_SPEED og RIGHT_SPEED
  112. #og avgjør om de er innenfor grensene som er satt, for så å
  113. #endre farten om de overstiger eller ligger under grensene.
  114. def checkBounds():
  115. global LEFT_SPEED
  116. if LEFT_SPEED > MAX_SPEED:
  117. LEFT_SPEED = MAX_SPEED
  118. elif LEFT_SPEED < MIN_SPEED:
  119. LEFT_SPEED = MIN_SPEED
  120. global RIGHT_SPEED
  121. if RIGHT_SPEED > MAX_SPEED:
  122. RIGHT_SPEED = MAX_SPEED
  123. elif RIGHT_SPEED < MIN_SPEED:
  124. RIGHT_SPEED = MIN_SPEED
  125.  
  126. while True:
  127. a = button_a.is_pressed()
  128. b = button_b.is_pressed()
  129. #Hvis både knapp A og B trykkes samtidig sender vi signaler med fart til bit:boten
  130. if a and b:
  131. #Får akselerometerverdiene i de ulike retningene
  132. x = accelerometer.get_x()
  133. y = accelerometer.get_y()
  134.  
  135. #Finner ut av hvilken retning bit:boten går i
  136. DIRECTION = -1
  137. if y < -Y_MIN:
  138. DIRECTION = 0
  139. elif y > Y_MIN:
  140. DIRECTION = 1
  141. #Finner hvilken side bit:boten svinger til
  142. SIDE = -1
  143. if x < -X_MIN:
  144. SIDE = 0
  145. elif x > X_MIN:
  146. SIDE = 1
  147.  
  148. calcSpeed(x, y)
  149.  
  150. data = str(DIRECTION) + " " + str(LEFT_SPEED) + " " + str(RIGHT_SPEED)
  151. #Sender signalet med retning og fart til bit:boten
  152. radio.send(data)
  153. display.show(Image.TARGET)
  154. sleep(90)
  155. else:
  156. ac = button_a.get_presses()
  157. bc = button_b.get_presses()
  158. if ac == 2 and bc == 2:
  159. music.play(music.BA_DING)
  160. if MODE == 0:
  161. MODE = 1
  162. else:
  163. MODE = 0
  164. radio.send(str(MODE))
  165. display.show(MODE)
  166. sleep(750)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement