#!/usr/bin/env python3
import RPi.GPIO as GPIO
import pygame
from trilobot import Trilobot, BUTTON_A
import os #so can shutdown
import time
import datetime
from datetime import datetime
from picamera import PiCamera
from trilobot import Trilobot
tbot = Trilobot()
camera = PiCamera()
camera.resolution = (1280, 720)
camera.framerate = 25[date=2022-02-09 timezone=“Europe/London”]
time.sleep(2)
camera.start_preview(alpha=100) ## alpha 0 to 255
record = False
##define colours for lights
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
Need to open screen to allow it to detect user events
screen = pygame.display.set_mode([240, 160])
tbot.fill_underlighting(RED)
time.sleep(2)
tbot.fill_underlighting(GREEN)
time.sleep(2)
tbot.fill_underlighting(BLUE)
time.sleep(2)
tbot.fill_underlighting(255,255,255)
try:
while not tbot.read_button(BUTTON_A):
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_s:
if record == True:
camera.stop_recording
tbot.clear_underlighting()
os.system ('sudo shutdown now')
elif event.key == pygame.K_r:
if record == False:
record = True
moment = datetime.now()
camera.start_recording('/home/pi/Videos/vid_%02d_%02d_%02d.h264' % (moment.hour, moment.minute, moment.second))
elif event.key == pygame.K_t:
if record ==True:
record = False
camera.stop_recording()
elif event.key == pygame.K_RIGHT:
tbot.curve_forward_right()
elif event.key == pygame.K_LEFT:
tbot.curve_forward_left()
elif event.key == pygame.K_UP:
distance = tbot.read_distance()
if distance < 30:
tbot.stop()
else:
while event.key == pygame.K_UP:
tbot.forward()
time.sleep(0.2)
distance = tbot.read_distance()
if distance < 30:
print(distance)
break
elif event.key == pygame.K_DOWN:
tbot.backward()
elif event.key == pygame.K_q:
if record == True:
record = False
camera.stop_recording()
camera.stop_preview
pygame.quit()
elif event.type == pygame.KEYUP:
tbot.stop()
else:
if record ==True:
record = False
camera.stop_recording()
tbot.clear_underlighting()
GPIO.cleanup
os.system ('sudo shutdown now')
finally:
if record == True:
camera.stop_recording
camera.stop_preview
tbot.clear_underlighting()
GPIO.cleanup
Above is code I have put together.
It works but not as intended.
I intended to add code to avoid collisions when going forward (up arrow press)
The above code does this.
However when going forward the motor continues when the up arrow is released.
other directions stop motion when direction key is released
I have tried various code beyond the break to try and ensure that key up is recognised and stops forward motion
none have worked as intended
I would be grateful for some help.
I guess it involves regaining key surveillance in the while event key… loop at the same time maintaining distance surveillance and response?
With respect to Controller for Trilobot Q
I have found the Riii 8 S works fine
Also INIU BI-B61 10000mA power bank is ok (a little heavy but OK)