flag就是stm32发送过来的数据,发送2就是开启颜色识别,识别然后串口发送过去flag就置零,就不会再进 if flag == ‘2’ 继续发送,但是还是会发送两次。
A
asg3 发布的帖子
-
RE: 串口发送数据为什么会发送两次
-
串口发送数据为什么会发送两次
我用这个代码发给stm32为什么会发过去两次?
import sensor, image, time from pyb import UART from pyb import LED red_led = LED(1) green_led = LED(2) blue_led = LED(3) red_threshold = (42, 66, 44, 83, 11, 62) # 红色阈值 调整 (minL, maxL, minA, maxA, minB, maxB) green_threshold = (23, 74, -53, -17, 5, 31) blue_threshold = (31, 48, -2, 39, -65, -29) flag = '0' put3= ['0','0','0'] check = ['1','2','3'] sensor.reset() sensor.set_pixformat(sensor.RGB565) #设置色彩模式 sensor.set_framesize(sensor.QVGA) #分辨率 sensor.skip_frames(time = 2000) sensor.set_auto_gain(False) # must turn this off to prevent image washout... 取消增益 clock = time.clock() uart = UART(3, 115200,) #串口初始化设置 串口名 波特率 uart.init(115200, bits=8, parity=None, stop=1) def find_max(blobs): max_size=0 for blob in blobs: if blob.pixels() > max_size: max_blob=blob max_size = blob.pixels() return max_blob def judge_position(x_value): if x_value > 100 and x_value < 220: return '2' if x_value > 0 and x_value <120: return '1' if x_value > 200 and x_value <320: return '3' while(True): clock.tick() img = sensor.snapshot() #拍取图像 # img.lens_corr(1.8) # strength of 1.8 is good for the 2.8mm lens.图像消畸变,可以用非鱼眼摄像头硬件消畸变 if uart.any(): flag = uart.readline().decode().strip() if flag == '1': img.lens_corr(1.8) # strength of 1.8 is good for the 2.8mm lens.图像消畸变,可以用非鱼眼摄像头硬件消畸变 green_led.on() blue_led.off() for code in img.find_qrcodes(): img.draw_rectangle(code.rect()) #rect()返回的是x,y,w,h数据格式,而draw可以单独接收描边 messages = code.payload() #接收二维码数据 if messages in check : # print(messages) uart.write(messages+'\0') #串口发送二维码数据 flag = '0' if flag == '2': red_blobs = img.find_blobs([red_threshold],pixels_threshold=200) #50 green_blobs = img.find_blobs([green_threshold], pixels_threshold=200) blue_blobs = img.find_blobs([blue_threshold],pixels_threshold=200) blue_led.on() green_led.off() img.draw_line(100, 0, 100, 240) img.draw_line(220, 0, 220, 240) if red_blobs: red_blob = find_max(red_blobs) img.draw_rectangle(red_blob.rect()) img.draw_cross(red_blob.cx(), red_blob.cy()) put3[0] = judge_position(red_blob.cx()) if green_blobs: green_blob = find_max(green_blobs) img.draw_rectangle(green_blob.rect()) img.draw_cross(green_blob.cx(), green_blob.cy()) put3[1] = judge_position(green_blob.cx()) if blue_blobs: blue_blob = find_max(blue_blobs) img.draw_rectangle(blue_blob.rect()) img.draw_cross(blue_blob.cx(), blue_blob.cy()) put3[2] = judge_position(blue_blob.cx()) # print(put3[0]+put3[1]+put3[2]) if (put3[0] in check) or (put3[1] in check) or (put3[2] in check): print(put3[0]+put3[1]+put3[2]) uart.write(put3[0]+put3[1]+put3[2]) flag = '0'
-
RE: openmv串口接收不到数据
我写成这样还是不行呀
import time from pyb import UART from pyb import LED blue_led = LED(3) green_led = LED(2) uart = UART(3, 115200 ) uart.init(115200, bits=8, parity=None, stop=1) blue_led.on() while(True): if uart.any(): flag = uart.readchar() uart.writechar(flag) if flag == '1': blue_led.off() green_led.on()
上电变成蓝灯,然后用串口助手或者stm32发送字符1就不会变成绿灯
请问这是为什么? -
openmv串口接收不到数据
为什么我在while里面用
if uart.any(): flag = uart.readchar() if flag == '1': green_led.on() for code in img.find_qrcodes(): img.draw_rectangle(code.rect()) messages = code.payload() print(messages)
无论是用串口助手还是用stm32板给它发1都没有反应,蓝灯也不亮