# Naast het importeren van de time
# importeer ik hier ook mijn custom code
# zoals de 'bengine'
import time, threading
from basecode import lineFollow
from ben import bengine, light
# Dit wordt gebruikt om aan te duiden dat het
# pad is teruggevonden en dat de voorwaartse beweging
# kan worden voortgezet
retrievedPath = 0
# De zoekfunctie
def seekMove(jumpCycle, timeTurn):
global retrievedPath
# De eerste draai
print("Right")
bengine.rightF(jumpCycle)
bengine.leftB(jumpCycle)
for i in range(timeTurn):
time.sleep(0.1)
if lineFollow.follow_line() is True:
print('Right: %d out of %d' % (i, timeTurn))
bengine.halt()
retrievedPath = 1
return
bengine.halt()
# korte pauze
time.sleep(0.01)
# De tweede draai
print("Left")
bengine.leftF(jumpCycle)
bengine.rightB(jumpCycle)
for i in range(timeTurn * 2):
time.sleep(0.1)
if lineFollow.follow_line() is True:
print('Right: %d out of %d' % (i, timeTurn))
bengine.halt()
retrievedPath = 1
return
bengine.halt()
# korte pauze
time.sleep(0.01)
# De derde draai terug naar de originele richting
print("Right")
bengine.rightF(jumpCycle)
bengine.leftB(jumpCycle)
for i in range(timeTurn):
time.sleep(0.1)
if lineFollow.follow_line() is True:
print('Right: %d out of %d' % (i, timeTurn))
bengine.halt()
retrievedPath = 1
return
bengine.halt()
# Deze functie wordt aangeroepen wanneer de lijn kwijt is
def search():
global retrievedPath
# De duty-cycle van de pwm
jumpCycle = 30
# De minimale tijd die gedraaid wordt
# gedeeld door 10
timeTurn = 2
# Aanroepen van de eerste rechts-links-rechts beweging
# Deze duurt 2x de basistijd
print('\nseekmove @ 2x')
seekMove(jumpCycle, timeTurn * 2)
if retrievedPath == 1:
retrievedPath = 0
return
# Aanroepen van de tweede rechts-links-rechts functie
# Ditmaal duurt deze 4x de basistijd
print('\nseekmove @ 4x')
seekMove(jumpCycle, timeTurn * 4)
if retrievedPath == 1:
retrievedPath = 0
return
# Aanroepen van de laatste rechts-links-rechts functie
# Ditmaal duurt deze 8x de basistijd
print('\nseekmove @ 8x')
seekMove(jumpCycle, timeTurn * 8)
if retrievedPath == 1:
retrievedPath = 0
return
def main():
# Roep de 'init' functie van lineFollow aan, lineFollow is mijn
# code die verantwoordelijk is voor het volgen van de lijn
lineFollow.init()
# Roep de 'init' functie in de bengine aan, bengine is mijn code
# die verantwoordelijk is voor het aansturen van de motoren
bengine.init()
# Het try-catch block zorgt ervoor dat de alle GPIO pinnen netjes
# worden uitgezet na het stoppen van de scripts
try:
while True:
# Zolang de robot zich op de lijn bevindt beweegt de robot
# zich voorwaarts met de 'bengine.forward' functie
if lineFollow.follow_line() is True:
print("Op lijn")
bengine.forward(35)
# Zodra de robot van de lijn af is wordt de 'search' functie
# aangeroepen
else:
print("Lijn kwijt")
time.sleep(0.01)
bengine.halt()
search()
#break
time.sleep(0.2)
# Bij een ctrl-c worden de GPIO pinnen
# schoongemaakt in de 'linefollow.end' functie
except KeyboardInterrupt:
lineFollow.end()
# Zorgen dat de 'main' functie wordt gestart
# bij het starten van het script
if __name__ == '__main__':
main()