|
5110屏幕做小車的主顯示屏,然后顏色識(shí)別傳感器
大概就是做到下面這幾點(diǎn)
它以在特定賽道上能自主行駛且具有更優(yōu)性能的智能小車這類復(fù)雜工程問題為任務(wù),鼓勵(lì)組成團(tuán)隊(duì),綜合運(yùn)用多學(xué)科知識(shí),提出、分析、設(shè)計(jì)、開發(fā)并研究智能小車的機(jī)械結(jié)構(gòu)、電子線路、運(yùn)動(dòng)控制和經(jīng)濟(jì)成本等問題,讓綜合工程素質(zhì)、創(chuàng)新能力、團(tuán)隊(duì)協(xié)作能力都得到全面的培養(yǎng)和提升。因此,特邀各專業(yè)電子設(shè)計(jì)愛好者參加“自制小車跑道賽”,促進(jìn)電子設(shè)計(jì)能力提高和智能小車競(jìng)賽活動(dòng)的普及。
將賽車放置在賽道出發(fā)區(qū),賽車應(yīng)在得到出發(fā)信號(hào)后5秒之內(nèi)離開出發(fā)區(qū),沿著賽道黑色引導(dǎo)線跑一圈,由計(jì)時(shí)定位起始線進(jìn)行自動(dòng)計(jì)時(shí)。 小車從賽道出發(fā)區(qū)離開,賽道黑色引導(dǎo)線上排列若干包裹兩組不同顏色(可由自己準(zhǔn)備) 的1 元硬幣,其中一種顏色硬幣二枚,另一種顏色硬幣二枚,硬幣比賽時(shí)隨機(jī)擺放。由計(jì)時(shí)起始線開始進(jìn)行自動(dòng)計(jì)時(shí),小車沿引導(dǎo)線前進(jìn),檢測(cè)到指定顏色的硬幣后將其搬運(yùn)至起點(diǎn)
單片機(jī)源程序如下:
- /**
- ******************************************************************************
- * @file main.c
- * @author fire
- * @version V1.0
- * @date 2013-xx-xx
- * @brief USART printf example
- */
-
- #include "stm32f10x.h"
- #include "bsp_SysTick.h"
- #include "bsp_usart1.h"
- #include "UltrasonicWave.h"
- #include "5110.h"
- #include "sys.h"
- #include "tcs3200.h"
- #include "TIM2.h"
- #include "bsp_exti.h"
- #include "bsp_led.h"
- #include "PWM.h"
- #include "trace.h"
- #include "delay.h"
- #include "key.h"
- #include "gpio.h"
- #define CLI() __set_PRIMASK(1) /* 關(guān)閉總中斷 */
- #define SEI() __set_PRIMASK(0) /* 開放總中斷 */
- extern u16 CCR1_Val ;
- extern u16 CCR2_Val ;
- extern u16 CCR3_Val ;
- extern u16 CCR4_Val ;
- u16 state=0;
- u16 past=0;
- extern unsigned short int Ultras_Distance;
- volatile u32 time = 0; // ms 計(jì)時(shí)變量
- volatile u16 amount = 0; // ms 計(jì)時(shí)變量
- volatile u8 n = 0; // ms 計(jì)時(shí)變量
- /**
- * @brief 主函數(shù)
- * @param 無
- * @retval 無
- */
-
-
- void Init_NVIC(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
-
- #ifdef VECT_TAB_RAM //向量表基地址選擇
- NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); //將0x20000000地址作為向量表基地址(RAM)
- #else
- NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); //將0x08000000地址作為向量表基地址(FLASH)
- #endif
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置中斷優(yōu)先級(jí)分組2
- NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //設(shè)定中斷源為PC13
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //中斷占優(yōu)先級(jí)為2
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //副優(yōu)先級(jí)為0
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中斷
- NVIC_Init(&NVIC_InitStructure); //根據(jù)參數(shù)初始化中斷寄存器
- NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //設(shè)定中斷源為PE0
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //中斷占優(yōu)先級(jí)為1
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //副優(yōu)先級(jí)為0
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中斷
- NVIC_Init(&NVIC_InitStructure); //根據(jù)參數(shù)初始化中斷寄存器
- }
- void EXTI0_IRQHandler(void)
- {
- if(EXTI_GetITStatus(EXTI_Line0)!= RESET) //判斷是否發(fā)生中斷,發(fā)生則中斷標(biāo)志置1
- {
- n++;
- }
- EXTI_ClearITPendingBit(EXTI_Line0); //清楚中斷掛起位,重要!!
- }
- int main(void)
- {
- u8 R=0x00,G=0x00,B=0x00;
- u8 R1=0x00,G2=0x00,B3=0x00;
- u8 RR1=0x00,GG2=0x00,BB3=0x00;
- u8 RRR1=0x00,GGG2=0x00,BBB3=0x00;
- u8 RRRR1=0x00,GGGG2=0x00,BBBB3=0x00;
- u8 RRRRR1=0x00,GGGGG2=0x00,BBBBB3=0x00;
- u16 states;
- u16 i=0;
- u8 j=0;
- u8 z=0;
- u8 a=0;
- u8 r[200],b[200],g[200];
- u8 r1[100],b1[100],g1[100];
- u8 m=0;
- /* USART1 config 115200 8-N-1 */
- LCD_GPIO_Init();
- diancid;
-
- USART1_Config();
- LED_GPIO_Config();
- CLI();
- SEI();
- SystemInit();
- delay_init();
- Init_NVIC(); //中斷向量表注冊(cè)函數(shù)
- LCD_init();
- LCD_clear();
- LCD_set_XY(0,0);
- LCD_write_str("Nokia5110");
-
- SysTick_Init();
- Init_TI_KEY(); //按鍵引腳中斷初始化
- Delay_us(1000); // 10000 * 10us = 100ms
- TIM4_PWM_Init();
- Delay_us(100); // 10000 * 10us = 100ms
- TIM2_Configuration();
- UltrasonicWave_Configuration();
- Delay_ms(20);
- LED1_OFF;
- LCD_set_XY(40,4);
- Write_num(n);
- tcs3200_init(1,1);//初始化(速率調(diào)整)
- whitebalance(); //白平衡
- Delay_ms(3000);
- while(1)
- {
- LCD_set_XY(40,4);
- Write_num(n);
- if(n>5)
- n=0;
- j++;
- R = tcs3200_RED();
- G = tcs3200_GREEN(); //取RGB值
- B = tcs3200_BLUE();
- LCD_set_XY(1,1);
- Write_num(R);
- LCD_set_XY(1,2);
- Write_num(G);
- LCD_set_XY(1,3);
- Write_num(B);
- ggd;
- ddd;
- r[j]=R;
- b[j]=B;
- g[j]=G;
- if(j==200)
- {
- LCD_set_XY(0,4);
- LCD_write_str("get");
- Delay_ms(200);
- LCD_set_XY(41,4);
- LCD_write_str("ready");
- Delay_ms(3000);
- break;
- }
- }
- while(1)
- {
- LCD_set_XY(40,4);
- Write_num(n);
-
-
- if(n==1) //xunji
- {
- i++;
- if(i==5900)
- {z++;
- i=0;
- }
- LCD_set_XY(40,3);
- Write_num((z));
- GPIO_SetBits(GPIOB, GPIO_Pin_5);
- TIM4_Mode_Config(); //更新電機(jī)狀態(tài)
- states = read_state();
- states = read_state();
- if(states==1) left();
- if(states==3) right();
- if(states==2) zhizou();
- if(states==5) left_L();
- if(states==6) right_L();
- n=1;
- }
-
-
- if(n==2) //xunji+bizhan
- {
- GPIO_SetBits(GPIOB, GPIO_Pin_5);
- TIM4_Mode_Config(); //更新電機(jī)狀態(tài)
-
- i++;
- if(i==5900)
- {z++;
- i=0;
- }
- LCD_set_XY(40,3);
- Write_num((z));
- states = read_state();
- if(states==1) left();
- if(states==3) right();
- if(states==2) zhizou();
- if(states==5) left_L();
- if(states==6) right_L();
- TIM4_Mode_Config(); //更新電機(jī)狀態(tài)
-
- if(z>17)
- {
- states = read_state();
- if(states==1) leftm();
- if(states==3) rightm();
- if(states==2) zhizoum();
- if(states==5) left_Lm();
- if(states==6) right_Lm();
- TIM4_Mode_Config(); //更新電機(jī)狀態(tài)
- UltrasonicWave_StartMeasure(); //開始測(cè)距,發(fā)送一個(gè)>10us的脈沖,然后測(cè)量返回的高電平時(shí)間
- LCD_set_XY(45,2);
- Write_num(Ultras_Distance);
- if(Ultras_Distance < 13&& Ultras_Distance >4)
- {
- left();
- TIM4_Mode_Config(); //更新電機(jī)狀態(tài)
- Delay_ms(300);
- zhizoumm();
- TIM4_Mode_Config(); //更新電機(jī)狀態(tài)
- Delay_ms(400);
- right();
-
- TIM4_Mode_Config(); //更新電機(jī)狀態(tài)
- Delay_ms(450);
-
-
- zhizoumm();
- TIM4_Mode_Config(); //更新電機(jī)狀態(tài)
- Delay_ms(300);
- while(1)
- {
- states = read_state();
- if(states==1) left();
- if(states==3) right();
- if(states==2) zhizou();
- if(states==5) left_L();
- if(states==6) right_L();
- TIM4_Mode_Config(); //更新電機(jī)狀態(tài)
-
- }
- }
- }
- }
- if(n==3)
- {
- i++;
- if(i==5900)
- {z++;
- i=0;
- }
- LCD_set_XY(40,3);
- Write_num((z));
- GPIO_SetBits(GPIOB, GPIO_Pin_5);
- TIM4_Mode_Config(); //更新電機(jī)狀態(tài)
- states = read_state();
- states = read_state();
- if(states==1) leftm();
- if(states==3) rightm();
- if(states==2) zhizoum();
- if(states==5) leftm();
- if(states==6) rightm();
-
-
- R = tcs3200_RED();
- G = tcs3200_GREEN(); //取RGB值
- B = tcs3200_BLUE();
- LCD_set_XY(1,1);
- Write_num(R);
- LCD_set_XY(1,2);
- Write_num(G);
- LCD_set_XY(1,3);
- Write_num(B);
- for(m=0;m<201;m++)
- {
- if(((R > r[m]-10)&&(R < r[m]+10)) && ((G>g[m]-10)&&(G<g[m]+10)) && ((B>b[m]-10)&&( B<b[m]+10 )))
- {
- gg; dianciu;
- LCD_set_XY(0,5);
- LCD_write_str("get");
-
- }
- else
- {
- LCD_set_XY(0,5);
- LCD_write_str(" ");}
- }
- }
- if(n==4) //xunji+bizhan
- {
- i++;
- if(i==5900)
- {z++;
- i=0;
- }
- LCD_set_XY(40,3);
- Write_num((z));
- states = read_state();
- if(states==1) leftm();
- if(states==3) rightm();
- if(states==2) zhizoum();
- if(states==5) left_Lm();
- if(states==6) right_Lm();
- TIM4_Mode_Config(); //更新電機(jī)狀態(tài)
- UltrasonicWave_StartMeasure(); //開始測(cè)距,發(fā)送一個(gè)>10us的脈沖,然后測(cè)量返回的高電平時(shí)間
- LCD_set_XY(45,2);
- Write_num(Ultras_Distance);
- if(Ultras_Distance < 13&& Ultras_Distance >4)
- {
- left();
- TIM4_Mode_Config(); //更新電機(jī)狀態(tài)
- Delay_ms(300);
- zhizoumm();
- TIM4_Mode_Config(); //更新電機(jī)狀態(tài)
- Delay_ms(400);
- right();
-
- TIM4_Mode_Config(); //更新電機(jī)狀態(tài)
- Delay_ms(450);
-
-
- zhizoumm();
- TIM4_Mode_Config(); //更新電機(jī)狀態(tài)
- Delay_ms(300);
- while(1)
- {
- states = read_state();
- if(states==1) left();
- if(states==3) right();
- if(states==2) zhizou();
- if(states==5) left_L();
- if(states==6) right_L();
- TIM4_Mode_Config(); //更新電機(jī)狀態(tài)
-
- }
-
- }
- }
- if(n==5)
- {
- Delay_ms(3000);
- LCD_set_XY(40,4);
- Write_num(n);
- j++;
- for(j=0;j<101;j++)
- {
- R = tcs3200_RED();
- G = tcs3200_GREEN(); //取RGB值
- B = tcs3200_BLUE();
- LCD_set_XY(1,1);
- Write_num(R);
- LCD_set_XY(1,2);
- Write_num(G);
- LCD_set_XY(1,3);
- Write_num(B);
- ggd;
- r1[j]=R;
- b1[j]=B;
- g1[j]=G;
- }
- if(j==101)
- {
- LCD_set_XY(20,0);
- LCD_write_str("get");
- Delay_ms(200);
- LCD_set_XY(20,1);
- LCD_write_str("ready");
- Delay_ms(3000);
- while(1)
- {
- i++;
- if(i==5900)
- {z++;
- i=0;
- }
- LCD_set_XY(40,3);
- Write_num((z));
- GPIO_SetBits(GPIOB, GPIO_Pin_5);
- TIM4_Mode_Config(); //更新電機(jī)狀態(tài)
- states = read_state();
- states = read_state();
- if(states==1) leftm();
- if(states==3) rightm();
- if(states==2) zhizoum();
- if(states==5) leftm();
- if(states==6) rightm();
- LCD_set_XY(40,2);
- Write_num((456));
-
- R = tcs3200_RED();
- G = tcs3200_GREEN(); //取RGB值
- B = tcs3200_BLUE();
- LCD_set_XY(1,1);
- Write_num(R);
- LCD_set_XY(1,2);
- Write_num(G);
- LCD_set_XY(1,3);
- Write_num(B);
- for(m=0;m<201;m++)
- {
- if(((R > r[m]-10)&&(R < r[m]+10)) && ((G>g[m]-10)&&(G<g[m]+10)) && ((B>b[m]-10)&&( B<b[m]+10 )))
- {
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
V3_超聲波+顏色識(shí)別+PWM.7z
(206.67 KB, 下載次數(shù): 37)
2019-3-24 23:41 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|