亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? autocar4_4.1.c

?? 自動(dòng)小車 尋找白線 程序。 采用后輪驅(qū)動(dòng)mega系列單片機(jī)控制
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
#include "Main.h"

void port_init(void)
{
	PORTA = 0xFF;	//前排8路普通傳感器輸入口,//左   PA7, PA6, PA5, PA4, PA3, PA2, PA1, PA0 	右//
	DDRA  = 0x00;
	
	PORTB = 0xFF;
	DDRB  = 0xF0;
	
	PORTC = 0xFF; //m103 output only //傳感器輸入口,PC7,PC6,PC5,PC4,PC4,PC3,PC2,PC1,PC0
	DDRC  = 0x00;
	
	PORTD = 0xFF;//extra傳感器PD4~PD7,鍵盤:S-RXD===PD0,S-TXD====PD1,片選:S-SET-L====PD2,S-SET-R====PD3
	DDRD = 0x00;
}
 
//TIMER2 initialisation - prescale:1024
// WGM: Normal
// desired value: 30mSec
// actual value: 29.952mSec (0.2%)

void uart0_init(void)                            
{                                                
 UCSRB = 0x00; //disable while setting baud rate 
 UCSRA = 0x00;                                   
 UCSRC = 0x86;                                   
 UBRRL = 51; //set baud rate lo                  
 UBRRH = 0x00; //set baud rate hi                
 UCSRB = 0x98;                                   
}

#pragma interrupt_handler uart0_rx_isr:12
void uart0_rx_isr(void)
{
 //uart has received a character in UDR 
 uchar i; 
 uchar tmp;
 uint e2p_addr=0;                    
 CLI();
 flag=1;                               
 for( i = 0; i < 20; i ++ )  
  {                                      
   while( !( UCSRA & BIT( RXC ) ) );     
   receive_buf[i] = UDR;         
  }
 if (receive_buf[0]==1)tmp=8;
 if (receive_buf[0]==2)tmp=4;
 if (receive_buf[0]==3)tmp=0;
  
 for(i=0;i<tmp;i++)
 {
	EEPROMwrite(e2p_addr,receive_buf[i]);
	e2p_addr++;
 }
 SEI();                                  
}

void load_para(void)
{
	uint e2p_addr=0;
	uchar i;
	for(i=0;i<20;i++)
	{
	eep_buf[i]=EEPROMread(e2p_addr);
	e2p_addr++;
	sel=eep_buf[1];
	}
	
}


//串口傳送數(shù)據(jù)
void send(unsigned char tmp)
{ 
  	UDR=tmp;
	while(!(UCSRA&BIT(UDRE)));      
}

//TIMER2 initialisation - prescale:1024
// WGM: Normal
// desired value: 30mSec
// actual value: 29.952mSec (0.2%)
void timer2_init(void)
{
 TCCR2 = 0x00; //stop,初始時(shí)停止,不進(jìn)行尋線PID調(diào)節(jié)
 TCNT2 = 0x16; //setup
 TCCR2 = 0x07;
} 

//每120ms,電機(jī)速度上升一個(gè)等級(jí),實(shí)現(xiàn)加速。加速曲線分兩段,緩加速段和急加速段
//緩加速段加速度為急加速段加速度的一半,加速的周期為7 X 120ms, 經(jīng)過7個(gè)速度等級(jí), 
//機(jī)器人的速度達(dá)到最大。
#pragma interrupt_handler timer2_ovf_isr:5 
void timer2_ovf_isr(void)
{ 
	static unsigned char t_counter = 0;		  //
	static unsigned char T_Counter = 0;		//加速周期計(jì)數(shù)量
	
	static signed char now_fettle[2]={8,8};
	static signed char CarWheelError[9] = {20, 40, 60, 180, 400, 420, 440,460,500};	//車輪誤差
	signed char jiaodu;		//
	signed char weizhi;		//
	
	signed int temp_preU[2];
	
	//static 左右輪行程誤差
	static signed int MotorAcceleSpeed = 0;	//機(jī)器人前進(jìn)加速度

	TCNT2 = 0x16; //reload counter value
	
	SEI();
	 
	 t_counter++;
	
	if (t_counter >= 4)
	{
    	 t_counter = 0;
    	 
		 //產(chǎn)生速度梯形圖。
    	 if (TrapeziaV.SpeedState ==  ACCESTATE)		  //機(jī)器人處于加速狀態(tài)
    	 {
				if (T_Counter >= TrapeziaV.AcceCyc)			//以最大速勻速前進(jìn)
				{
					T_Counter = TrapeziaV.AcceCyc;		
					TrapeziaV.SpeedState =  REGUSTATE;
					MotorAcceleSpeed = 0;
				}
				else 	
				{
					T_Counter ++;							
					MotorAcceleSpeed =  TrapeziaV.AcceSpeed;	
				}
		 }
		 else if  (TrapeziaV.SpeedState == REGUSTATE)	//機(jī)器人處于勻速狀態(tài)
		 {
		 		MotorAcceleSpeed = 0;
		 }
    	 else if (TrapeziaV.SpeedState == DECESTATE)   //機(jī)器人處于減速狀態(tài)
    	 {		
				if ((T_Counter > 0) && (T_Counter <= 8))			//以最低速勻速前進(jìn)
				{	
					T_Counter --;
					MotorAcceleSpeed = TrapeziaV.AcceSpeed;	
				}
				else			
				{
					T_Counter = 0;
					TrapeziaV.SpeedState =  REGUSTATE;
					MotorAcceleSpeed = 0;				
				}
    	 }
		 
		 TrapeziaV.MotorSpeed += MotorAcceleSpeed;	//電機(jī)速度增加
		 
		 if (TrapeziaV.MotorSpeed <= 300)		//速度限定
		 	TrapeziaV.MotorSpeed = 300;
		else if  (TrapeziaV.MotorSpeed >= 3000)
			 TrapeziaV.MotorSpeed = 3000;
		 
		 //PID參數(shù)校準(zhǔn), 不同的速度等級(jí)對應(yīng)不同的參數(shù)
		 SeekPIDPara(T_Counter);
	}
	
	//讀傳感器狀態(tài),尋線PID調(diào)節(jié)
	read_sensor ();
	
	now_fettle[0] = judge_sensor(Sensor_Ahead,now_fettle[0]);	//前面的傳感器的情況值
	now_fettle[1] = judge_sensor(Sensor_Back, now_fettle[1]);	//后排的傳感器的情況值
	
	//由前排8路傳感器和后排8路傳感器計(jì)算車身偏離白線的角度和位置, 進(jìn)行角度和位置的PID調(diào)節(jié)
	jiaodu = now_fettle[0] - now_fettle[1];	//計(jì)算偏離角度
	weizhi =  now_fettle[1] - 8;
	
	skPID.angle_FeedBack = value_change_Jiaodu ( jiaodu );	
	skPID.loca_FeedBack = value_change_Weizi(weizhi);
	
	temp_preU[0] =   angle_PIDCalc( &skPID );	//進(jìn)行角度PID調(diào)節(jié)
	temp_preU[1] =   loca_PIDCalc( &skPID );	//進(jìn)行位置PID調(diào)節(jié)
	
	//調(diào)節(jié)量輸出,使得誤差減少。
	set_speed ( TrapeziaV.MotorSpeed  - temp_preU[0] - temp_preU[1], 1);	//Right
	set_speed ( TrapeziaV.MotorSpeed  - CarWheelError[T_Counter]+ temp_preU[0] + temp_preU[1], 0);	//Left
	
}

/*********************************************************************************/
//只用左邊傳感器數(shù)線,并向右轉(zhuǎn)90度。
//Lines :  預(yù)備走的線數(shù)
//motorinitspeed: 開始走時(shí)速度
//accespeed: 加速過程中的加速度
//decespeedline: 開始減速時(shí)離終點(diǎn)線的距離對應(yīng)的白線數(shù)。必須大于或等于2,才能穩(wěn)停
#define LSensorON  !(PINB & BIT(1))		//左邊數(shù)線傳感器在白線狀態(tài)
unsigned char Count2TurnR(unsigned char Lines, signed int motorinitspeed, signed int accespeed, unsigned char decespeedline)
{
	unsigned char flag = 1, CrossedLines = 0;	//小車已經(jīng)通過的橫向白線數(shù)目
	
	TCCR2 = 0x07;	//尋線
	
	TrapeziaV.MotorSpeed = motorinitspeed;
	
	if (accespeed != 0)		//加速度不為零時(shí),梯形加速
	{
		if (Lines >= 3)
    		TrapeziaV.SpeedState =  ACCESTATE;		//梯形速度曲線設(shè)置
		else 
			TrapeziaV.SpeedState =  REGUSTATE;		//如果走的線數(shù)太少時(shí),不走梯形曲線
	}
	else 
	{
		TrapeziaV.SpeedState =  REGUSTATE;		//勻速
	}	
	
	TrapeziaV.AcceSpeed = accespeed;	
	
	while (CrossedLines < Lines)
	{
		if (LSensorON)		//判斷在線
		{
			delay_100us(1);
			if (LSensorON)	//二次判斷在線,確認(rèn)信號(hào)
			{
				while (1)		//在白線,等待出線。
				{
					if (!LSensorON)
					{
						delay_100us(1);
						if (!LSensorON)
						{
							CrossedLines++;
							
							if (Lines >= 3)		//如果走的線數(shù)太少時(shí),不走梯形曲線, 保持勻速過程
							{
    							/************************************數(shù)線減速************************/
    							if (CrossedLines == (Lines - decespeedline))
    							{
    								TrapeziaV.SpeedState =  DECESTATE;
    								TrapeziaV.AcceSpeed = -accespeed;
    							}
							}
							
							break;
						}
					}
				}
			}
		}
	}////////
	
	TCCR2 = 0x00;
	//set_distance(100, 1);	//保證將數(shù)線傳感器移出白線
	//set_distance(100, 0);
	//delay_ms(200);	
	
	//右轉(zhuǎn)
	set_distance(0, 1);		//右輪不動(dòng)
	set_speed(800, 0);	   //左輪旋轉(zhuǎn),實(shí)現(xiàn)右轉(zhuǎn)
	
	while (flag)
	{
		if (LSensorON)
		{
			delay_100us(1);
			if (LSensorON)
			{
				while (1)
				{
					if (!LSensorON)		//兩次判斷左邊數(shù)線從傳感器出線。
					{
						delay_100us(1);
						if (!LSensorON)
						{
							while (PINA != 0x3F);	//當(dāng)前排傳感器沒有達(dá)到特定的狀態(tài)時(shí),持續(xù)轉(zhuǎn)動(dòng)
							flag = 0;
							break;
						}
					}
				}
			}
		}
	}
	
	set_speed(0, 1);
	set_speed(0, 0);
	
	return 1;
}

///////////////////////////////////////////////////////
//用左邊傳感器數(shù)線,直走,到達(dá)終點(diǎn),停車
unsigned char GoSraight_L(unsigned char Lines, signed int motorinitspeed, signed int accespeed, unsigned char decespeedline)
{
	unsigned char flag = 1, CrossedLines = 0;	//小車已經(jīng)通過的橫向白線數(shù)目
	
	TCCR2 = 0x07;	//尋線
	
	TrapeziaV.MotorSpeed = motorinitspeed;
	
	if (accespeed != 0)		//加速度不為零時(shí),梯形加速
	{
		if (Lines >= 3)
    		TrapeziaV.SpeedState =  ACCESTATE;		//梯形速度曲線設(shè)置
		else 
			TrapeziaV.SpeedState =  REGUSTATE;		//如果走的線數(shù)太少時(shí),不走梯形曲線
	}
	else 
	{
		TrapeziaV.SpeedState =  REGUSTATE;		//勻速
	}	
	
	TrapeziaV.AcceSpeed = accespeed;	
	
	while (CrossedLines < Lines)
	{
		if (LSensorON)		//判斷在線
		{
			delay_100us(1);
			if (LSensorON)	//二次判斷在線,確認(rèn)信號(hào)
			{
				while (1)		//在白線,等待出線。
				{
					if (!LSensorON)
					{
						delay_100us(1);
						if (!LSensorON)
						{
							CrossedLines++;
							
							if (Lines >= 3)		//如果走的線數(shù)太少時(shí),不走梯形曲線, 保持勻速過程
							{
    							/************************************數(shù)線減速************************/
    							if (CrossedLines == (Lines - decespeedline))
    							{
    								TrapeziaV.SpeedState =  DECESTATE;
    								TrapeziaV.AcceSpeed = -accespeed;
    							}
							}
							
							break;
						}
					}
				}
			}
		}
	}////////
	
	TCCR2 = 0x00;	//到達(dá)終點(diǎn)線,停車
	
	set_speed(0, 0);	
	set_speed(0, 1);
	
	return 1;
	
}
/*********************************************************************************/

//只用右邊傳感器數(shù)線,并向左轉(zhuǎn)90度。
#define RSensorON  !(PINB & BIT(2))		//右邊數(shù)線傳感器在白線狀態(tài)
unsigned char Count2TurnL(unsigned char Lines, signed int motorinitspeed, signed int accespeed, unsigned char decespeedline)
{
	unsigned char flag = 1, CrossedLines = 0;	//小車已經(jīng)通過的橫向白線數(shù)目
	
	TCCR2 = 0x07;	//尋線
	
	TrapeziaV.MotorSpeed = motorinitspeed;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品美女一区二区三区| 国产精品久久久久影院亚瑟 | 国产女人aaa级久久久级 | 国产精品一区二区免费不卡| 亚洲女同女同女同女同女同69| 欧美一区午夜精品| 91免费视频网| 激情综合色播五月| 午夜激情一区二区三区| 中文字幕日韩欧美一区二区三区| 日韩欧美的一区| 欧美午夜影院一区| 91同城在线观看| 国产成人av电影在线观看| 日韩成人伦理电影在线观看| 亚洲精品国产一区二区精华液| 国产视频一区二区三区在线观看| 欧美一级欧美一级在线播放| 91成人免费在线| 99免费精品视频| 成人黄色电影在线 | 91麻豆免费在线观看| 久久99精品国产.久久久久| 亚洲成人在线免费| 亚洲精品国产品国语在线app| 国产午夜精品理论片a级大结局| 91麻豆精品国产91久久久久| 在线观看一区二区视频| 91色porny在线视频| 波多野结衣中文一区| 国产不卡视频在线播放| 国产麻豆精品95视频| 久久国产视频网| 开心九九激情九九欧美日韩精美视频电影 | 欧美日本一道本在线视频| 一本色道久久加勒比精品| 99综合影院在线| 99久久99久久精品国产片果冻 | 日韩综合小视频| 亚洲成av人片一区二区| 亚洲午夜在线电影| 亚洲电影欧美电影有声小说| 亚洲午夜精品久久久久久久久| 亚洲激情校园春色| 一区二区国产视频| 亚洲一区视频在线观看视频| 亚洲宅男天堂在线观看无病毒| 亚洲自拍偷拍麻豆| 日精品一区二区三区| 免费成人在线观看视频| 黄色资源网久久资源365| 国产精品正在播放| 菠萝蜜视频在线观看一区| 99久久亚洲一区二区三区青草 | 不卡的av电影| 成人app在线观看| 一本色道久久综合精品竹菊| 欧美日韩一区二区在线观看| 91精品久久久久久久91蜜桃| 精品日产卡一卡二卡麻豆| 国产女人18毛片水真多成人如厕| 中文字幕亚洲欧美在线不卡| 亚洲免费色视频| 日本亚洲视频在线| 国产专区综合网| 96av麻豆蜜桃一区二区| 欧美日韩精品专区| 久久久久久一二三区| 最新国产の精品合集bt伙计| 亚洲国产综合人成综合网站| 免费久久精品视频| 成人av片在线观看| 欧美人与禽zozo性伦| 久久综合九色欧美综合狠狠| 中文字幕制服丝袜一区二区三区| 亚洲午夜影视影院在线观看| 韩国av一区二区三区| 91丨国产丨九色丨pron| 欧美一区二区视频在线观看2020 | 亚洲第一电影网| 国产一区二区精品久久| 欧美在线不卡视频| 亚洲精品在线观| 一区二区三区四区av| 裸体一区二区三区| 一本久久综合亚洲鲁鲁五月天| 91精品国产91久久综合桃花| 中文乱码免费一区二区| 人人爽香蕉精品| 91丨porny丨在线| 久久久久久久久97黄色工厂| 亚洲综合在线第一页| 国产福利一区在线| 欧美久久久久久蜜桃| 中文字幕精品一区二区精品绿巨人| 亚洲成av人片| 91蜜桃网址入口| 国产农村妇女毛片精品久久麻豆| 三级久久三级久久| 91麻豆精东视频| 久久精品欧美一区二区三区不卡 | 日韩免费看网站| 玉米视频成人免费看| 国产成人精品午夜视频免费| 在线成人小视频| 一区二区三区中文在线观看| 国产精品一区专区| 日韩一区二区麻豆国产| 亚洲综合一区二区精品导航| 成人三级伦理片| 久久伊99综合婷婷久久伊| 日韩国产精品大片| 欧美亚洲国产怡红院影院| 中文字幕免费在线观看视频一区| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美这里有精品| 亚洲伦在线观看| 99亚偷拍自图区亚洲| 欧美激情一区二区三区全黄| 国产在线视频不卡二| 精品精品欲导航| 美日韩一区二区三区| 91精品久久久久久蜜臀| 日韩综合小视频| 欧美一级片在线| 久久91精品久久久久久秒播| 日韩一级黄色片| 日本不卡一区二区| 日韩三级.com| 麻豆精品视频在线| 日韩一区二区在线看片| 日产欧产美韩系列久久99| 欧美一二三区在线观看| 蜜桃一区二区三区四区| 日韩欧美在线影院| 久久国产精品色婷婷| 日韩免费看的电影| 国产在线精品一区二区夜色 | 国产精品一区二区在线观看网站| 欧美成人免费网站| 国产精品资源网| 久久伊99综合婷婷久久伊| 国产成人免费网站| 国产精品免费人成网站| 91污片在线观看| 亚洲午夜激情网页| 欧美大片拔萝卜| 国产精品亚洲一区二区三区在线| 久久精品视频免费| 99久久精品99国产精品| 亚洲高清在线精品| 91精品国产美女浴室洗澡无遮挡| 国产综合成人久久大片91| 国产精品久久久一区麻豆最新章节| 91免费精品国自产拍在线不卡| 亚洲一区二区影院| 日韩欧美电影一二三| 懂色av中文一区二区三区| 亚洲色大成网站www久久九九| 欧美做爰猛烈大尺度电影无法无天| 日韩av在线免费观看不卡| 久久综合99re88久久爱| 不卡av在线免费观看| 香蕉久久一区二区不卡无毒影院| 日韩午夜精品电影| 成人免费精品视频| 亚洲一区二区四区蜜桃| 亚洲精品一区二区精华| 成人av在线网| 视频一区视频二区中文字幕| 久久久精品天堂| 日本电影亚洲天堂一区| 麻豆免费精品视频| 18成人在线视频| 91麻豆精品国产| 99久久久久久| 奇米影视在线99精品| 国产精品成人一区二区艾草 | 国产suv一区二区三区88区| 亚洲乱码国产乱码精品精可以看 | 亚洲亚洲精品在线观看| 精品捆绑美女sm三区| 99精品国产热久久91蜜凸| 免费欧美日韩国产三级电影| 成人免费小视频| 337p粉嫩大胆噜噜噜噜噜91av | 18欧美亚洲精品| 精品国产乱码久久| 欧洲精品一区二区三区在线观看| 国精产品一区一区三区mba视频| 亚洲一区二区成人在线观看| 久久中文字幕电影| 欧美电影影音先锋| 91猫先生在线| 国产不卡一区视频| 精品一区二区免费在线观看| 亚洲高清免费观看| 亚洲色图在线播放| 国产欧美日韩视频一区二区 | 精品噜噜噜噜久久久久久久久试看|