import sensor, image, time
from pyb import UART
from pyb import Pin, Timer, LED
import re
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)
uart=UART(1,115200) #PA9 txd PA10--rxd 微翻版OPENMV接口PA9和PA10就好。
#uart = UART(3, 9600) #正式openmv的接口P4和P5
uart.init(115200, bits=8, parity=None, stop=1) # init with given parameters timeout_char=1000
clock = time.clock()
#def tick(timer):
#Uart_recv()
##5ms读取一次检测一次串口,t=5ms f=1/t=200hz
#tim = Timer(3, freq=200) # create a timer object using timer 2 - trigger at 1Hz
#tim.callback(tick) # set the callback to our tick function
g_uart_cmdA_flag=0 # 将变量声明为全局变量,如此才可改变其数值
g_uart_cmdB_flag=0
#*********************************************************************************************
#串口接收函数的定义
def Uart_recv(): # 串口接收数据
global g_uart_cmdA_flag
global g_uart_cmdB_flag
if (uart.any()): # 更新串口接收数据
recv_data = eval(str(uart.read())) #接收读取的字符串
print(recv_data)
#uart.write(recv_data)
if ("&" in recv_data) : #如果接收的字符串中有&号。注意,这个不是第一个字符串,只要有&就行,可以修改下,检查帧头
print("Openmv has recved CMD data.")
if ("lightA" in recv_data): #如果接收字符串有light1,比如&light1
print(len(recv_data))
g_uart_cmdA_flag = 1
print("Ready for light 1!")
## &lightA0 或者&lightA99 提取A后面的数据,必须是正数,后面不能加换行符号,否则长度改变
## 字符串的下标计数从0开始,它是一个标记特殊的list(数据结构会讲到)
if len(recv_data)>8:
ddd=(int(recv_data[7])-48)*10
ddd=ddd+(int(recv_data[8])-48)
print(ddd)
elif len(recv_data)==8:
ddd=(int(recv_data[7])-48)
print(ddd)
if ("lightB1" in recv_data):#如果接收字符串有B,比如&B
g_uart_cmdB_flag = 1
print("Ready for B!")
#*********************************************************************************************
#定义两个数据,测试发送
adata =10.2
bdata =123
#定义两个数据,测试发送
cdata=88.65
ddata=896
while(True):
clock.tick()
img = sensor.snapshot()
Uart_recv() #主函数中不断检测,可以在串口中断中进行接收,或者是开辟一个定时器,定时5ms-10ms检查一次这个函数(这方法好像有问题,定时器的),
if g_uart_cmdA_flag ==1 : #命令A的回应
# uart.write("loc"+(str)adata+"num"+(str)bdata+"#") # 串口发送
uart.write("adata:%0.2f,bdata:%d\r\n"%(adata,bdata)) #发送字符串,字符串中包括了数据,数据可以根据检测得到,浮点数或者是整数
g_uart_cmdA_flag = 0
if g_uart_cmdB_flag ==1 : #命令B的回应
uart.write("cdata:%0.2f,ddata:%d\r\n"%(cdata,ddata))#发送字符串,字符串中包括了数据,数据可以根据检测得到,浮点数或者是整数
g_uart_cmdB_flag = 0
time.sleep(100)
OPENV接收和发送串口的数据
最新推荐文章于 2024-08-21 11:30:00 发布