如何让回调函数和串口通信在小车停止时触发?
-
我用小车追踪例子里的程序改写,想在小车追到目标停止时触发回调函数和串口通信发送1,一直跑不通,百思不得其解,求大佬帮忙看看该如何改写。
import sensor, image, time import car from pid import PID from pyb import UART import json sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QQVGA) sensor.skip_frames(10) sensor.set_auto_whitebal(False) timer = pyb.Timer(4, freq=1) uart = UART(3, 19200) clock = time.clock() green_threshold = (76, 96, -110, -30, 8, 66) size_threshold = 2000 x_pid = PID(p=0.5, i=1, imax=100) h_pid = PID(p=0.05, i=0.1, imax=50) def find_max(blobs): max_size=0 for blob in blobs: if blob[2]*blob[3] > max_size: max_blob=blob max_size = blob[2]*blob[3] return max_blob def timer_callback(timer): while(True): clock.tick() img = sensor.snapshot() blobs = img.find_apriltags() if blobs: max_blob = find_max(blobs) x_error = max_blob[6]-img.width()/2 h_error = max_blob[2]*max_blob[3]-size_threshold print("x error: ", x_error) img.draw_rectangle(max_blob[0:4]) img.draw_cross(int(max_blob[6]),int(max_blob[7])) x_output=x_pid.get_pid(x_error,1) h_output=h_pid.get_pid(h_error,1) print("h_output",h_output) car.run(-h_output,-h_output) else: car.run(50,50) if size_threshold = 2000: output_str=json.dumps([1]) uart.write(output_str+'\n') timer.callback(timer_callback) pyb.delay(8000)
-
你这个需求和回调函数没啥关系。
import sensor, image, time import car from pid import PID from pyb import UART import json sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QQVGA) sensor.skip_frames(10) sensor.set_auto_whitebal(False) timer = pyb.Timer(4, freq=1) uart = UART(3, 19200) clock = time.clock() green_threshold = (76, 96, -110, -30, 8, 66) size_threshold = 2000 x_pid = PID(p=0.5, i=1, imax=100) h_pid = PID(p=0.05, i=0.1, imax=50) def find_max(blobs): max_size=0 for blob in blobs: if blob[2]*blob[3] > max_size: max_blob=blob max_size = blob[2]*blob[3] return max_blob def timer_callback(): print('timer_callback') while(True): clock.tick() img = sensor.snapshot() blobs = img.find_apriltags() if blobs: max_blob = find_max(blobs) x_error = max_blob[6]-img.width()/2 h_error = max_blob[2]*max_blob[3]-size_threshold print("x error: ", x_error) img.draw_rectangle(max_blob[0:4]) img.draw_cross(int(max_blob[6]),int(max_blob[7])) x_output=x_pid.get_pid(x_error,1) h_output=h_pid.get_pid(h_error,1) print("h_output",h_output) car.run(-h_output,-h_output) else: car.run(50,50) output_str=json.dumps([1]) uart.write(output_str+'\n') timer_callback()