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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? autocar4_4.1.c

?? 自動小車 尋找白線 程序。 采用后輪驅動mega系列單片機控制
?? C
?? 第 1 頁 / 共 2 頁
字號:
#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];
	}
	
}


//串口傳送數據
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,初始時停止,不進行尋線PID調節
 TCNT2 = 0x16; //setup
 TCCR2 = 0x07;
} 

//每120ms,電機速度上升一個等級,實現加速。加速曲線分兩段,緩加速段和急加速段
//緩加速段加速度為急加速段加速度的一半,加速的周期為7 X 120ms, 經過7個速度等級, 
//機器人的速度達到最大。
#pragma interrupt_handler timer2_ovf_isr:5 
void timer2_ovf_isr(void)
{ 
	static unsigned char t_counter = 0;		  //
	static unsigned char T_Counter = 0;		//加速周期計數量
	
	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;	//機器人前進加速度

	TCNT2 = 0x16; //reload counter value
	
	SEI();
	 
	 t_counter++;
	
	if (t_counter >= 4)
	{
    	 t_counter = 0;
    	 
		 //產生速度梯形圖。
    	 if (TrapeziaV.SpeedState ==  ACCESTATE)		  //機器人處于加速狀態
    	 {
				if (T_Counter >= TrapeziaV.AcceCyc)			//以最大速勻速前進
				{
					T_Counter = TrapeziaV.AcceCyc;		
					TrapeziaV.SpeedState =  REGUSTATE;
					MotorAcceleSpeed = 0;
				}
				else 	
				{
					T_Counter ++;							
					MotorAcceleSpeed =  TrapeziaV.AcceSpeed;	
				}
		 }
		 else if  (TrapeziaV.SpeedState == REGUSTATE)	//機器人處于勻速狀態
		 {
		 		MotorAcceleSpeed = 0;
		 }
    	 else if (TrapeziaV.SpeedState == DECESTATE)   //機器人處于減速狀態
    	 {		
				if ((T_Counter > 0) && (T_Counter <= 8))			//以最低速勻速前進
				{	
					T_Counter --;
					MotorAcceleSpeed = TrapeziaV.AcceSpeed;	
				}
				else			
				{
					T_Counter = 0;
					TrapeziaV.SpeedState =  REGUSTATE;
					MotorAcceleSpeed = 0;				
				}
    	 }
		 
		 TrapeziaV.MotorSpeed += MotorAcceleSpeed;	//電機速度增加
		 
		 if (TrapeziaV.MotorSpeed <= 300)		//速度限定
		 	TrapeziaV.MotorSpeed = 300;
		else if  (TrapeziaV.MotorSpeed >= 3000)
			 TrapeziaV.MotorSpeed = 3000;
		 
		 //PID參數校準, 不同的速度等級對應不同的參數
		 SeekPIDPara(T_Counter);
	}
	
	//讀傳感器狀態,尋線PID調節
	read_sensor ();
	
	now_fettle[0] = judge_sensor(Sensor_Ahead,now_fettle[0]);	//前面的傳感器的情況值
	now_fettle[1] = judge_sensor(Sensor_Back, now_fettle[1]);	//后排的傳感器的情況值
	
	//由前排8路傳感器和后排8路傳感器計算車身偏離白線的角度和位置, 進行角度和位置的PID調節
	jiaodu = now_fettle[0] - now_fettle[1];	//計算偏離角度
	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 );	//進行角度PID調節
	temp_preU[1] =   loca_PIDCalc( &skPID );	//進行位置PID調節
	
	//調節量輸出,使得誤差減少。
	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
	
}

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

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

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月激情综合色| 精品美女一区二区| 成人av第一页| 粉嫩久久99精品久久久久久夜| 免费成人美女在线观看| 极品少妇一区二区三区精品视频| 亚洲精品国产视频| 亚洲小少妇裸体bbw| 亚洲激情图片一区| 一区二区三区在线视频免费| 亚洲精品免费视频| 亚洲在线免费播放| 香蕉成人伊视频在线观看| 午夜av电影一区| 日本美女一区二区| 激情五月婷婷综合| 成人不卡免费av| 色婷婷亚洲精品| 欧美撒尿777hd撒尿| 4438亚洲最大| 26uuu亚洲综合色欧美 | 一区二区三区成人在线视频| 亚洲欧美一区二区三区国产精品| 亚洲丝袜自拍清纯另类| 亚洲综合在线五月| 久久精品噜噜噜成人av农村| 国产精品99久久久久久宅男| 一本在线高清不卡dvd| 欧美日韩高清一区二区| 欧美www视频| 亚洲欧美视频在线观看| 婷婷综合在线观看| 福利一区二区在线观看| 欧美中文字幕亚洲一区二区va在线| 欧美一区二区三区人| 国产欧美综合在线观看第十页| 亚洲另类在线视频| 九色综合狠狠综合久久| 色天天综合久久久久综合片| 日韩精品专区在线| 亚洲免费在线观看| 狠狠色综合播放一区二区| 色婷婷精品大在线视频| 欧美精品一卡二卡| 国产亚洲一二三区| 亚洲18女电影在线观看| 成人a区在线观看| 日韩美女一区二区三区四区| 亚洲丝袜另类动漫二区| 国产精品99久久久久久宅男| 欧美日韩视频不卡| 亚洲女性喷水在线观看一区| 国产在线播精品第三| 欧美日韩大陆在线| 亚洲色图清纯唯美| 国产精品18久久久久久久久久久久 | 婷婷久久综合九色综合绿巨人| 国产成人a级片| 欧美一级黄色录像| 五月综合激情网| 91在线观看免费视频| 久久精品一级爱片| 看电视剧不卡顿的网站| 91精品欧美久久久久久动漫| 亚洲一区二区四区蜜桃| 91视频精品在这里| 国产精品久久二区二区| 久久免费看少妇高潮| 日日欢夜夜爽一区| 欧洲另类一二三四区| 国产精品理论片在线观看| 韩国视频一区二区| 欧美一卡在线观看| 精品一二线国产| 日韩一区二区三区电影在线观看| 亚洲视频你懂的| 欧美视频你懂的| 亚洲午夜视频在线观看| 欧美系列一区二区| 亚洲成人一区在线| 欧美人妇做爰xxxⅹ性高电影 | 欧美在线三级电影| 一卡二卡欧美日韩| 欧美三级电影一区| 麻豆成人综合网| 欧美大黄免费观看| 国产毛片精品视频| 国产精品久久久久毛片软件| 成人午夜短视频| 亚洲欧美激情在线| 欧美日韩精品高清| 精品影视av免费| 国产区在线观看成人精品| av激情亚洲男人天堂| 亚洲三级久久久| 欧美人与性动xxxx| 经典三级视频一区| 国产精品久久久久天堂| 欧美日韩午夜精品| 免费的国产精品| 国产欧美综合在线| 欧美三级电影网| 国产乱国产乱300精品| 亚洲人成小说网站色在线| 欧美日韩中文另类| 国产一区二区导航在线播放| 综合亚洲深深色噜噜狠狠网站| 欧美性生活影院| 国产精品一区二区男女羞羞无遮挡| 国产精品久久久久四虎| 欧美精品欧美精品系列| 成人精品视频一区二区三区尤物| 一区二区欧美视频| 久久久综合精品| 欧美日韩精品久久久| 成人激情小说网站| 蜜桃91丨九色丨蝌蚪91桃色| 国产精品毛片久久久久久久| 欧美精品99久久久**| jlzzjlzz国产精品久久| 久久精品久久99精品久久| 怡红院av一区二区三区| 久久久国产一区二区三区四区小说| 色综合视频在线观看| 国产黑丝在线一区二区三区| 午夜精品久久久久久久蜜桃app| 久久尤物电影视频在线观看| 精品婷婷伊人一区三区三| 国产**成人网毛片九色| 久久国内精品视频| 亚洲线精品一区二区三区八戒| 欧美极品少妇xxxxⅹ高跟鞋 | 成人动漫一区二区在线| 日本vs亚洲vs韩国一区三区 | 欧美国产欧美综合| 日韩欧美一区二区三区在线| 日本国产一区二区| youjizz久久| 国产福利一区二区三区视频| 美女任你摸久久| 午夜日韩在线观看| 亚洲一区影音先锋| 中文字幕综合网| 国产精品久久一卡二卡| 久久久久久97三级| 久久这里都是精品| 2023国产精华国产精品| 欧美zozo另类异族| 日韩美女视频在线| 欧美成人国产一区二区| 日韩欧美成人一区| 日韩精品一区二区三区在线播放| 欧美综合在线视频| 欧美亚洲国产一区二区三区va| 97精品久久久午夜一区二区三区| 成人污视频在线观看| 成人小视频免费观看| 99久久免费视频.com| 91丨九色丨蝌蚪丨老版| 91麻豆福利精品推荐| 日本乱人伦aⅴ精品| 欧洲av一区二区嗯嗯嗯啊| 色av成人天堂桃色av| 欧美日韩国产乱码电影| 宅男在线国产精品| 欧美成人猛片aaaaaaa| 久久久国产精品午夜一区ai换脸| 欧美国产禁国产网站cc| 亚洲婷婷在线视频| 一区二区欧美视频| 久久se这里有精品| 粉嫩高潮美女一区二区三区| 成人av小说网| 欧美色成人综合| 欧美tickle裸体挠脚心vk| 国产女人水真多18毛片18精品视频| 精品一区二区三区在线播放视频 | 国产精品久久久久aaaa| 国产精品福利av| 一区二区三区不卡视频在线观看| 亚洲精品免费在线播放| 美国一区二区三区在线播放| 成人一区在线看| 在线亚洲+欧美+日本专区| 日韩欧美一二三四区| 国产日韩欧美综合在线| 夜色激情一区二区| 另类小说图片综合网| 97se亚洲国产综合在线| 日韩欧美一级精品久久| 最近日韩中文字幕| 免费的国产精品| 色诱亚洲精品久久久久久| 日韩欧美中文字幕一区| 中文字幕一区不卡| 久久国产福利国产秒拍| 91成人国产精品| 国产精品污网站| 美女视频网站久久| 欧美在线三级电影|