⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.h

📁 自动小车 寻找白线 程序。 采用后轮驱动mega系列单片机控制
💻 H
字号:
#include <iom16v.h>   
#include <macros.h>      
//#include <eeprom.h> xin
//EEPROMwrite(unsigned int addr,unsigned char data);
//data=EEPROMread(unsigned int addr);

#include "TIMEDELAY.C"
#include "Seek_Line_SPI.c"
#include "Seek_Line_PID.c" 
#include "stable_8ahead_8back.C"
//#include "HD7279.c"
#define xtal 8	//定义延时函数所用到的晶振的频率
#include <eeprom.h>

#define uint unsigned int
#define uchar unsigned char

//定义全局变量
uchar receive_buf[20];
uchar eep_buf[20];
uchar flag;

unsigned int count=0;

#define	LEFT 0
#define RIGHT 1

#define GO TCCR2=0X07
#define STOP TCCR2=0X00

#define L_ON !(PINB & (1 << 1))	//左边数线传感器在白线状态
#define R_ON !(PINB & (1 << 2))	//右边数线传感器在白线状态


unsigned int sel ;

unsigned int L_speed ;
unsigned int R_speed ;
//unsigned int L_kp ;	
//unsigned int A_kp ;	

void read_sensor ( void );	//读取前后排传感器,加数字滤波
unsigned int judge_sensor_Ahead (unsigned char sensor_inform , unsigned int pre_num_case );
unsigned int judge_sensor_Back (unsigned char sensor_inform , unsigned int pre_num_case );
//long M1,M2; 


unsigned char count_l=0,count_r=0,i; 
void count_line(unsigned char i)	//数线 
{
 count_l=0;
 count_r=0;
 while(!((count_r==i)||(count_l==i)))
 {
    if	(R_ON)	
	{
	    while(R_ON);
		count_r++;
	}
	if	(L_ON)	
	{
		while(L_ON);
		count_l++;
	}
 }
} 


void turn_arc (unsigned char i)	//弧线拐弯
{
 	 switch(i)
	{
	case 0:
	{
	  TCCR2 = 0X00;  
	  
	  while(  !  ((PINB& 0x08)==0x00 ) );
    
			  set_speed(1000,1);
			  set_speed(-40,0);
			 delay_ms(1180);
			 while( !(PINA ==PINC) );
			 //while( !(((!PINA) & (!PINC))==0X01) );
    }break;
  
  
   case 1:
   
   {
     TCCR2 = 0X00;
     //set_speed(800,1);
	 //set_speed(800,0);
	 //delay_ms(200);
	  while(  !  ((PINB& 0x08)==0x00 ) );
	//while(!((PINB & 0x06)==0x00));
	 
              
			  set_speed(1000,0);
			  set_speed(-40,1);
			 delay_ms(1380);
			 while( !(PINA ==PINC) );
			 //while( !(((!PINA) & (!PINC))==0X01) );
    }break;

			 }
}




 
void turn_fix (unsigned char i)//原地拐 
{
 TCCR2=0X00;
 set_distance(-10000,1);
 set_distance(-12000,0);
 delay_s(3);
 switch(i)
 {
    case RIGHT:{  
	            set_distance(25000,0);
                set_distance(-31000,1);
			    delay_s(5);
	           }break;
		   
	case LEFT:{
	            set_distance(-31000,0);
                set_distance(25000,1);
			    delay_s(5);
	          }break;
 } 
 //TCCR2 = 0x07;
}



void send(unsigned char);

/*********模**式**解**释*************************
  工作模式1:
  receive_buf[0]=2;
  receive_buf[1]=0;参数1--行走时间
  receive_buf[2]=0;参数2--停止时间
  receive_buf[3]=60;参数3--电磁阀作用时间
  工作模式2:空
 
   
************************************************/

// UART0 initialisation                           
// desired baud rate: 9600                       
// actual: baud rate:9615 (0.2%)                 
// char size: 8 bit                              
// parity: Disabled                              

/********************************************************************************/
//梯形速度生成曲线相关参数
#define ACCESTATE 0xAA	//加速状态
#define DECESTATE 0xBB 	//减速状态
#define REGUSTATE 0xCC  //匀速状态

//梯形速度结构体。
#define INITSPEED 300
struct 
{
	signed int MotorSpeed;	//速度
	signed int AcceSpeed;	//加速度
	unsigned char AcceCyc;	//加速周期
	unsigned char SpeedState;	//机器人的运行状态
}TrapeziaV = {INITSPEED, 0, 8, REGUSTATE};
/********************************************************************************/

/********************************寻线转弯*****************************************/
unsigned char Count2TurnR(unsigned char Lines, signed int motorinitspeed, signed int accespeed, unsigned char decespeedline);
void dongzuo(void);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -