这是openmv的代码(是教程里的代码,加了稍微的匹配修改)
# Blob Detection and uart transport
import sensor, image, time
from pyb import UART
import json
# For color tracking to work really well you should ideally be in a very, very,
# very, controlled enviroment where the lighting is constant...
yellow_threshold = (0, 53, -118, 126, -115, -15)
# You may need to tweak the above settings for tracking green things...
# Select an area in the Framebuffer to copy the color settings.
sensor.reset() # Initialize the camera sensor.
sensor.set_pixformat(sensor.RGB565) # use RGB565.
sensor.set_framesize(sensor.QQVGA) # use QQVGA for speed.
sensor.skip_frames(10) # Let new settings take affect.
sensor.set_auto_whitebal(False) # turn this off.
clock = time.clock() # Tracks FPS.
uart = UART(3, 9600)
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
while(True):
img = sensor.snapshot() # Take a picture and return the image.
blobs = img.find_blobs([yellow_threshold])
if blobs:
max_blob=find_max(blobs)
print('sum :', len(blobs))
img.draw_rectangle(max_blob.rect())
img.draw_cross(max_blob.cx(), max_blob.cy())
if max_blob.cx()<=75: //当色块在左边时,是传送的数据为‘a’,下面以此类推
, b='a'
if max_blob.cx()>=85:
b='b'
# if (max_blob.cx()>75 and max_blob.cx()<85)
# b='c'
output_str="%d" % (max_blob.cx()) #方式1
#output_str=json.dumps([max_blob.cx(),max_blob.cy()]) #方式2
print(max_blob.cx())
print('you send:', b)
uart.write(b)
else:
print('not found!')
这是51的代码(P2_0等是led灯,P2_0=0亮,P2_0=1灭,但是接收到串口的数据时,结果都不亮,没有根据语句实现,很大可能是接收到的数据不是想的那个,该怎么解决呢)
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
char i;
char flag,c,x;
sbit P2_0=P2^0;
sbit P2_1=P2^1;
sbit P2_2=P2^2;
sbit P2_3=P2^3;
sbit P2_4=P2^4;
void delay(unsigned char i)
{
while(i--);
}//延时函数
void delay1(unsigned int k)
{
unsigned int x,y;
for(x=0;x<k;x++)
for(y=0;y<2000;y++);
}
void init()//赋初值,定义串行口的标志位以及数码管标志位
{
TMOD=0x20;
TH1=0xfd; //使得波特率为9600,和openmv一致
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}
void main()
{
flag=0;
init();
P2_0=1;
P2_1=1;
P2_2=1;
P2_3=1;
P2_4=1;
while(1)
{
P2_0=1;//灯灭
P2_1=1;
P2_2=1;
}
}
void ser() interrupt 4//串口中断
{
RI=0;
x=SBUF;//x是接收的数据
if(x=='a')//如果接收到‘a’则亮,下面同理
{ P2_0=0;}
if(x=='b')
{ P2_1=0;}
if(x=='c')
{ P2_2=0;}
else
{P2_4=~P2_4;}
}