标题:
stm32摄像头颜色识别+舵机控制ov7670
[打印本页]
作者:
l1050634254
时间:
2017-8-10 12:47
标题:
stm32摄像头颜色识别+舵机控制ov7670
stm32f103,正点原子的mini板。配合ov7670,能够进行颜色识别+舵机控制。圈出颜色范围
代码下载:
颜色识别+舵机控制.7z
(251.09 KB, 下载次数: 779)
2021-10-25 14:24 上传
点击文件名下载附件
下载积分: 黑币 -5
主程序:
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "usmart.h"
#include "lcd.h"
#include "ov7670.h"
#include "exti.h"
#include "timer.h"
#include "EasyTrace.h"
#include "PWM.h"
//ALIENTEK Mini STM32开发板扩展实验9
//摄像头实验
extern u8 ov_sta; //在exit.c里面定义
extern u8 ov_frame; //在timer.c里面定义
u16 r,y;
//更新LCD显示
void camera_refresh(void)
{
RESULT Resu;
TARGET_CONDI Condition={215,240,20,240,30,160,30,30,320,240}; //API参数 hls的阈值,识别时用的
u32 j;
u16 color;
if(ov_sta==2)
{
LCD_Scan_Dir(U2D_L2R); //从上到下,从左到右
LCD_SetCursor(0x00,0x0000); //设置光标位置
LCD_WriteRAM_Prepare(); //开始写入GRAM
OV7670_CS=0;
OV7670_RRST=0; //开始复位读指针
OV7670_RCK=0;
OV7670_RCK=1;
OV7670_RCK=0;
OV7670_RRST=1; //复位读指针结束
OV7670_RCK=1;
for(j=0;j<76800;j++)
{
GPIOB->CRL=0X88888888;
OV7670_RCK=0;
color=OV7670_DATA; //读数据
OV7670_RCK=1;
color<<=8;
OV7670_RCK=0;
color|=OV7670_DATA; //读数据
OV7670_RCK=1;
GPIOB->CRL=0X33333333;
//
//加算法,例灰阶转换,二值化之类的
//
LCD_WR_DATA(color);
}
if(Trace(&Condition,&Resu) ) //API
{
LCD_Fill(Resu.x-Resu.w/2,Resu.y-Resu.h/2,Resu.x+Resu.w/2,Resu.y-Resu.h/2+1,0xf800);//u16 x,u16 y,u16 width,u16 hight,u16 Color
LCD_Fill(Resu.x-Resu.w/2,Resu.y-Resu.h/2,Resu.x-Resu.w/2+1,Resu.y+Resu.h/2,0xf800);
LCD_Fill(Resu.x-Resu.w/2,Resu.y+Resu.h/2,Resu.x+Resu.w/2,Resu.y+Resu.h/2+1,0xf800);
LCD_Fill(Resu.x+Resu.w/2,Resu.y-Resu.h/2,Resu.x+Resu.w/2+1,Resu.y+Resu.h/2,0xf800);
LCD_Fill(Resu.x-2,Resu.y-2,Resu.x+2,Resu.y+2,0xf800);
LED1=!LED1;
r=Resu.x;
y=Resu.y;
}
OV7670_CS=1;
OV7670_RCK=0;
OV7670_RCK=1;
EXTI->PR=1<<15; //清除LINE8上的中断标志位
ov_sta=0; //开始下一次采集
ov_frame++;
LCD_Scan_Dir(DFT_SCAN_DIR); //恢复默认扫描方向
}
}
int main(void)
{
u16 led0pwmval;
static int t=0;
u8 i;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
uart_init(9600);
OV7670_Init();
LED_Init(); //初始化与LED连接的硬件接口
LCD_Init(); //初始化LCD
TIM2_PWM_Init(199,7199); //PWM定时器设置
if(lcddev.id==0X6804||lcddev.id==0X5310||lcddev.id==0X5510||lcddev.id==0X1963) //强制设置屏幕分辨率为320*240.以支持3.5寸大屏
{
lcddev.width=240;
lcddev.height=320;
}
usmart_dev.init(72); //初始化USMART
POINT_COLOR=RED;//设置字体为红色
LCD_ShowString(60,50,200,200,16,"Mini STM32");
LCD_ShowString(60,70,200,200,16,"OV7670 TEST");
LCD_ShowString(60,90,200,200,16,"ATOM@ALIENTEK");
LCD_ShowString(60,110,200,200,16,"2014/3/27");
LCD_ShowString(60,130,200,200,16,"Use USMART To Set!");
LCD_ShowString(60,150,200,200,16,"OV7670 Init...");
while(OV7670_Init())//初始化OV7670
{
LCD_ShowString(60,150,200,200,16,"OV7670 Error!!");
delay_ms(200);
LCD_Fill(60,150,239,166,WHITE);
delay_ms(200);
}
LCD_ShowString(60,150,200,200,16,"OV7670 Init OK");
delay_ms(1500);
TIM3_Int_Init(10000,7199); //TIM3,10Khz计数频率,1秒钟中断
EXTI15_Init(); //使能定时器捕获
OV7670_Window_Set(10,174,240,320); //设置窗口
OV7670_CS=0;
while(1)
{
camera_refresh(); //更新显示
printf("Resu:%d-%d\r\n",r,y);
if(y>120)
t++;
if(t==0)
led0pwmval=188;
else if(t==1)
led0pwmval=190;
else if(t==2)
led0pwmval=194;
else
led0pwmval=194;
printf("Result:%d\r\n",t);
delay_ms(10);
delay_ms(10);
TIM_SetCompare3(TIM2,led0pwmval);
printf("Re:%d\r\n",led0pwmval);
if(i!=ov_frame) //DS0闪烁.
{
i=ov_frame;
LED0=!LED0;
}
}
}
复制代码
作者:
y1887655
时间:
2017-8-10 19:45
感谢分享
作者:
y1887655
时间:
2017-8-10 20:30
请问下这是什么型号的开发板啊,是stm32f407的吗
作者:
y1887655
时间:
2017-8-10 21:33
你好能加我下qq向你请教下东西吗,关于摄像头小球定位的,290407985,很感谢
作者:
purple唯爱紫
时间:
2017-8-12 09:31
可以用吗?
作者:
sunsunsun000
时间:
2017-8-16 15:58
高手,技术nc
作者:
sunsunsun000
时间:
2017-8-16 15:59
高手,技术nc
作者:
leo-lopez
时间:
2017-10-19 18:59
我看看你的文件正好我缺颜色识别
作者:
qwefd88
时间:
2017-11-1 07:12
顶一下
作者:
fffffffffffff
时间:
2017-11-4 19:48
顶。。。。。。。。。。
作者:
fffffffffffff
时间:
2017-11-5 11:32
作者能否讲解一下
作者:
李家渠
时间:
2017-12-19 16:41
不能下啊
作者:
yangjf
时间:
2017-12-21 10:11
不错,下来看看,谢谢楼主
作者:
2954266506
时间:
2017-12-27 19:11
找了好久,用来学习,谢谢!
作者:
但有当时皓月在
时间:
2018-3-15 12:50
您好,我想请教一下您,Trace(&Condition,&Resu) 这个函数是在哪里读取到了我的图像数据呢
作者:
ymx200181
时间:
2018-3-25 16:06
回答的什么呀,看不了
作者:
炭疽123
时间:
2018-3-27 19:48
作者好,我想用stm32设计一款关于摄像头识别亮灯,小车舵机配合到亮灯旁边,可以实现吗?
作者:
027zcz
时间:
2018-5-24 12:29
谢谢楼主分享!!!!
作者:
磊雷雷
时间:
2018-5-25 17:38
你好这个程序程序用103VET6能跑吗
作者:
17190187950
时间:
2018-6-21 13:47
用不了,有错误。
作者:
yanyuwei
时间:
2018-7-1 10:21
f1系类用来控制摄像头内存够用吗
作者:
timyer
时间:
2018-7-7 09:47
这个图像显示是灰度吗?
作者:
XAB
时间:
2018-8-1 16:01
赞。。。。。。。。。。。。。。。。
作者:
xsj1877578806
时间:
2018-8-1 22:32
收藏一下,学习
作者:
Akon4
时间:
2018-8-8 14:06
厉害 谢谢楼主 辛苦了
作者:
979960947
时间:
2018-10-13 11:41
大家不要下
作者:
xmch
时间:
2018-12-19 14:04
先感谢。。。
作者:
一颗糖
时间:
2018-12-20 10:32
谢谢楼主分享啦
作者:
1158676971
时间:
2019-4-5 22:54
感谢楼主的程序,但是有后面pwm输出程序的话,识别容易卡主,不用的话建议去掉
作者:
1158676971
时间:
2019-4-5 23:01
感谢楼主的程序,就是有时识别时,容易卡主
作者:
犯罪级可爱
时间:
2019-4-7 15:52
这个颜色识别可以识别光源颜色吗
就比如红绿灯的颜色能识别吗
作者:
薄荷味徐福记
时间:
2019-4-13 11:03
这个下载以后怎么用啊
作者:
smilyD
时间:
2019-4-13 17:27
这个真不错,下载看看。
作者:
平常心。
时间:
2019-7-28 19:02
很好用
作者:
一个土豆
时间:
2019-7-29 10:33
请问我用的是103 zet6 有哪些需要改的地方
作者:
JIANGJING520
时间:
2019-8-1 19:49
刚好用上,感谢楼主
作者:
lp5210
时间:
2019-8-1 21:10
请问有仿真图吗
作者:
qwer09
时间:
2019-8-2 13:43
请问,如果是ov7620 要改哪些地方呢?
作者:
JIANGJING520
时间:
2019-8-2 15:11
这个怎么移植到精英版啊
作者:
ljq99040123
时间:
2019-8-7 18:28
正好写出来不对,看看参考一下。
作者:
hufeng
时间:
2019-8-12 15:14
感谢分享,看看
作者:
13702010390
时间:
2019-8-12 16:19
不错,值得学习。
作者:
jemery1030
时间:
2019-8-18 23:27
感謝分享
太讚了
作者:
guoweidong
时间:
2019-9-26 07:33
为什么蜂鸣器会一直响
作者:
hujj
时间:
2019-12-8 11:39
已经下载学习,谢谢楼主分享!
作者:
huiweimin
时间:
2019-12-31 21:01
参考一下,看看
作者:
学习的
时间:
2020-4-24 00:20
请问这实现的是什么功能啊
作者:
从零开始bs
时间:
2020-5-20 19:14
感谢dalao分享
作者:
dj3365191
时间:
2020-6-4 21:31
为什么回复的帖子都看不到呢
作者:
头顶亮光光
时间:
2020-11-27 01:32
Ov7725可以用嘛
作者:
bbpprem
时间:
2021-7-25 10:22
大佬,我想问下这个是识别什么颜色的啊
作者:
Liangzhongjie
时间:
2021-11-4 21:46
y1887655 发表于 2017-8-10 20:30
请问下这是什么型号的开发板啊,是stm32f407的吗
stm32f103,正点原子的mini板
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1