久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2436|回復: 1
打印 上一主題 下一主題
收起左側

2020年電賽省賽非接觸物體測量STM32F4單片機+OPENMV源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:524037 發表于 2022-5-14 21:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "lcd.h"
  6. #include "pwm.h"
  7. #include "key.h"
  8. #include "openmv.h"
  9. #include "data_deal.h"
  10. #include "control.h"
  11. #include "ui.h"
  12. extern int32_t  out_pwm,last_out_pwm;
  13. #define Focal 180//焦距 測量所得
  14. #define X_Error_MAX 0 //X 軸偏差允許范圍
  15. openmv_s Dealover_OV;
  16. TFmini   Dealover_TF;
  17. int32_t X_error,cen_x;
  18. u16 OV_Deal_count=0,TF_Deal_count=0;
  19. int Shape_buf[100],i;
  20. u32 distance_buf[100];
  21. float Cx_buf[100],Cy_buf[100],Length_buf[100];
  22. float  dealover_distance,Actual_length;
  23. int        still_pwm=0;
  24. u8 First_start_test_flag,TF_over_flag=0,OV_over_flag=0,Third_start_test_flag=0;
  25. void GET_Size();
  26. int main(void)
  27. {      
  28.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2
  29.         delay_init(168);      //初始化延時函數
  30.         LED_Init();
  31.         KEY_Init();
  32.         uart1_init(115200);                //初始化串口波特率為115200
  33.         openmv_init();
  34.         TIM10_PWM_Init(40000,50);  //設置為 20000  20ms/20000=0.001ms  脈寬范圍為(20000-500)19500-(20000-2500) 17500
  35.          LCD_Init();           //初始化LCD FSMC接口
  36.         POINT_COLOR=BLACK;      //畫筆顏色:紅色
  37.         LED1=0;     //PF10 連接openMV p7 LED1亮為1,2        
  38.         Servo=1;     // PF9 連接openMV p LED1滅為4        
  39.         delay_ms(1000);//等待數據穩定
  40.         
  41.           while(1)
  42.         {  
  43.                
  44. /**********題1.2**********/               
  45.                  if(KEY_Scan(1)==1)
  46.                 {
  47.                         
  48.                         First_start_test_flag=1;
  49.                         LED1=1;
  50.                 }
  51. /**********題3**********/
  52.                 if(KEY_Scan(1)==3)
  53.                 {
  54.                         Third_start_test_flag=1;
  55.                 }
  56. /***************開始讀取值并處理***************/
  57.                 if(First_start_test_flag)   
  58.                 {

  59.                         LCD_ShowString(60,10,140,140,16,"Testing");
  60.                         GET_Size();
  61.                         //delay_ms(1000);//測完值就等待1s
  62.                         /***********所有數據處理完畢 顯示界面*******************/
  63.                         if(TF_over_flag&&OV_over_flag)
  64.                         {   
  65.                                 LCD_ShowString(20,10,140,140,16,"Test Over");
  66.                                 if(First_start_test_flag)
  67.                                         UI_1(Dealover_OV,Actual_length,dealover_distance);
  68.                                 TF_over_flag=0;
  69.                                 OV_over_flag=0;
  70.                                 First_start_test_flag=0;                        
  71.                         }
  72.                 }
  73.                 if(Third_start_test_flag==1)
  74.                 {   
  75.                         LCD_ShowString(60,10,140,140,16,"Start Find");
  76.                         if(openmvs.flag==1)
  77.                         {        

  78.                                  if(openmvs.shape==2)
  79.                                 cen_x=openmvs.cx+openmvs.length/2;
  80.                                 else
  81.                                         cen_x=openmvs.cx;
  82.                                 if((int)cen_x<80)
  83.                                          X_error= 80-(int)cen_x;
  84.                                 else
  85.                                         X_error= (int)cen_x-80;
  86.                                 LCD_ShowNum(80,160,(int)openmvs.cx,5,16);
  87.                                 /*************獲取中點**************/

  88.                                 /************得出偏差************/
  89.                                 //LCD_ShowNum(80,160,openmvs.shape,5,16);
  90.                                 LCD_ShowNum(80,200,X_error,5,16);
  91.                         if(X_error<=X_Error_MAX)
  92.                         {
  93.                                 GET_Size();
  94.                                 LCD_ShowNum(80,200,X_error,5,16);
  95.                                 LCD_ShowString(20,10,140,140,16,"Find over");
  96.                                 UI_1(openmvs,Actual_length,dealover_distance);
  97.                                 Servo=0; //舵機斷電
  98.                                 TF_over_flag=0;
  99.                                 OV_over_flag=0;
  100.                                 Third_start_test_flag=0;
  101.                                 still_pwm=last_out_pwm;
  102.                         }
  103.                         if(Third_start_test_flag==1)
  104.                         {
  105.                                 if(openmvs.shape!=0)
  106.                                 {   
  107.                                                 PlacePID_CS(cen_x);
  108.                                                 delay_ms(30);
  109.                                         if(X_error<=15)
  110.                                                 delay_ms(50);
  111.                                 }
  112.                                 else
  113.                                 {
  114.                                         saomiao();
  115.                                         delay_ms(30);
  116.                                 
  117.                                 }
  118.                         }
  119.                         }
  120.                 }
  121.         }
  122. }
  123. void GET_Size(void )
  124. {
  125.                 if(tfmini.receiveComplete==1&&TF_Deal_count<100)
  126.                         {
  127.                                 distance_buf[TF_Deal_count]=tfmini.distance;
  128.                                   TF_Deal_count++;
  129.                         
  130.                         }
  131.                         if(TF_Deal_count>=100)
  132.                         {
  133.                            dealover_distance=tfmini_deal(distance_buf);
  134.                                 //LCD_ShowNum(150,50,dealover_distance,5,16);
  135.                                 TF_Deal_count=0;
  136.                                 TF_over_flag=1;
  137.                                 //LCD_ShowString(10,70,140,140,16,"2");
  138.                         }
  139.                         
  140.                         if((openmvs.flag==1)&&(OV_Deal_count<100)  )
  141.                         {   
  142.                                 //LCD_ShowString(10,70,140,140,16,"2");
  143.                                 Shape_buf[OV_Deal_count]=openmvs.shape ;
  144.                                 Cx_buf[OV_Deal_count]= openmvs.cx;
  145.                                 Cy_buf[OV_Deal_count]= openmvs.cx ;
  146.                                 Length_buf[OV_Deal_count]= openmvs.length ;
  147.                                 openmvs.flag=0;
  148.                                 OV_Deal_count++;
  149.                         }
  150.                 //        LCD_ShowNum(80,300,(u16)Shape_buf[OV_Deal_count-1],1,16);
  151.                         if(OV_Deal_count>=100)
  152.                         {
  153.                                 // for(i=0;i<100;i++) //數據處理
  154.                                 // LCD_ShowNum(80,200,Shape_buf[i],5,16);
  155.                          Dealover_OV=openmv_data_deal(Shape_buf,Cx_buf,Cy_buf,Length_buf) ;
  156.                          OV_Deal_count=0;
  157.                          OV_over_flag=1;
  158.                         //LCD_ShowNum(80,200,(u16)Dealover_OV.shape,5,16);
  159.                         }                                                                  
  160.                         Actual_length=Get_Actuallength(Dealover_OV,dealover_distance,Focal);
  161. }
復制代碼

Keil代碼下載: 代碼.7z (364.22 KB, 下載次數: 34)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1084874 發表于 2023-6-19 10:37 | 只看該作者
大佬可以發個openmv端的程序嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产亚洲精品一区二区三区 | 国产成人精品免费视频大全最热 | 亚洲高清视频一区 | 我爱操| 成人精品视频在线 | 国产成人精品一区 | 久久久久久久久久久久91 | 国产日韩久久 | 国产一区二区影院 | 亚洲视频免费在线观看 | 久久视频精品 | 日韩性生活网 | 亚洲天天干| 国产精品免费观看视频 | 日韩国产在线 | 欧产日产国产精品视频 | 欧美成人精品一区二区三区 | 久久精品视频一区二区 | 亚洲网在线| 久久亚洲一区二区三区四区 | 欧美爱爱视频网站 | 精品区一区二区 | 欧美日韩在线观看一区 | 91色视频在线观看 | 日本午夜网站 | 91在线色视频| 日韩一区二区免费视频 | 日韩区| 国产精品一区久久久 | 日韩a| 日韩三级免费观看 | 国产精品18久久久久久白浆动漫 | 日本不卡免费新一二三区 | 精品在线观看入口 | 在线国产一区二区 | 亚洲人成人一区二区在线观看 | 99精品国产一区二区青青牛奶 | 国产精品久久久久久久久久免费看 | 国产伊人精品 | 激情小视频 | 网络毛片 |