|
最近擁有了OPENMV,這可是個(gè)好攝像頭,雖然他是用我還沒接觸過(guò)的Python,但是里面例程超級(jí)多��!大部分都是比較常用的
作為新手,剛開始不知道如何將攝像頭獲得的數(shù)據(jù)傳給單片機(jī)..
于是,迷茫的我最終獲得師兄贊助的通信程序,改成了自己需要的,就分享給大家康康啦
通過(guò)單片機(jī)給openmv供電5v,我的是openmv3,將openmv3上的P4與P5與單片機(jī)上的PA9和PA10 連接,就是單片機(jī)的Tx接攝像頭的Rx,單片機(jī)的Rx接攝像頭的Tx。如果接電以后,LCD上數(shù)值無(wú)變化,可能是接線接反了,一般交換過(guò)來(lái)就行。
openmv要脫機(jī)運(yùn)行,就將程序保存進(jìn)去,即在IDE界面點(diǎn)左上方的“工具”選擇“將打開的腳本保存到openmvcam”即可,這時(shí)給攝像頭上電就能執(zhí)行程序
就是攝像頭識(shí)別四個(gè)顏色,四個(gè)顏色是有順序的,在我程序里,紅色是1,黃色是2,綠色是4,深藍(lán)色是8(本來(lái)是紅色是0001,黃色是0010,綠色是0100,深藍(lán)色是1000,傳給單片機(jī)就轉(zhuǎn)成了十進(jìn)制輸出來(lái)),然后傳給單片機(jī)之后,就可以通過(guò)獲得的數(shù)據(jù)判斷識(shí)別到了哪種顏色,進(jìn)而給單片機(jī)相應(yīng)的指令。
可以通過(guò)實(shí)際情況修改攝像頭里面程序中的顏色閾值,以達(dá)到想要的效果。在不同的環(huán)境下,可能顏色的閾值會(huì)有點(diǎn)變動(dòng),就是識(shí)別沒那么準(zhǔn)確啦..有能力的小伙伴可以自己修改程序讓攝像頭適應(yīng)不同環(huán)境,我沒能力就只能修改閾值啦..唉..嘆氣,哪個(gè)伙伴會(huì)的話告訴我!我去下載!
單片機(jī)與攝像頭通信以后,識(shí)別到對(duì)應(yīng)顏色,會(huì)在屏幕上顯示posX,這是顏色中心坐標(biāo)的橫坐標(biāo),顯示posY,這是顏色類別的序號(hào)。
這些都是我個(gè)人理解,有不對(duì)的地方歡迎大家指正啊~我們可以多多交流,一起進(jìn)步鴨!
以下是主函數(shù)的程序
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
extern u16 posX,posY
void color_s()
{
if(posY==1)
{LCD_ShowString(30,100,210,24,24,"red"); }
if(posY==2)
{LCD_ShowString(30,100,210,24,24,"yellow"); }
if(posY==4)
{LCD_ShowString(30,100,210,24,24,"green"); }
if(posY==8)
{LCD_ShowString(30,100,210,24,24,"blue"); }
}
int main(void)
{
u8 x=0;
u8 lcd_id[12];
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2)
delay_init(168);
uart_init(115200);
LED_Init();
LCD_Init();
POINT_COLOR=RED;
sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id)
while(1)
{
USART1_Rx_Task();
POINT_COLOR=RED;
color_s();
LCD_ShowNum(30,40,posX,3,24);
LCD_ShowNum(30,70,posY,3,24);
x++;
if(x==12)x=0;
LED0=!LED0;
delay_ms(1000);
}
}
全部資料51hei下載地址:
STM32F407與OPENMV的通信.7z
(335.9 KB, 下載次數(shù): 209)
2019-12-9 01:03 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|