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

📄 stable.c

📁 自动小车 寻找白线 程序。 采用后轮驱动mega系列单片机控制
💻 C
字号:

//前面八路普通传感器输入。
unsigned char Sensor_Ahead;		   //8 Normal Sensors Input
unsigned char  reverse_value(unsigned char temp)
{
 	unsigned char temp0=0;	
	
	//将字节数据:d7d6d5d4d3d2d1d0 转换成为 d0d1d2d3d4d5d6d7数据
	temp0 |= (temp<<7)&(1<<7);	
	temp0 |= (temp<<5)&(1<<6);
	temp0 |= (temp<<3)&(1<<5);
	temp0 |= (temp<<1)&(1<<4);
	
	temp0 |= (temp>>7)&(1<<0);
	temp0 |= (temp>>5)&(1<<1);
	temp0 |= (temp>>3)&(1<<2);
	temp0 |= (temp>>1)&(1<<3);
	
	return temp0;
}
//前排取八路普通传感器输入
void read_sensor ( void )	//读取前后排传感器
{
	unsigned char temp_ahead;
	
	//所有传感器输入为低电平有效,前排传感器和PA口的对应情况
	//左   PA7, PA6, PA5, PA4, PA3, PA2, PA1, PA0 	右//
	temp_ahead = PINA;
	
	//将传感器器信号转换成高电平有效,即转换成字节数据。
	Sensor_Ahead = ~reverse_value(temp_ahead);

}

//========读前传感器=========
//输入为本次采样后经过转换后的传感器字节数据和前一次传感器的字节数据
unsigned int judge_sensor_Ahead (unsigned char sensor_inform , unsigned int pre_num_case )
{
	unsigned int num_case;

	switch ( sensor_inform )
	{
		case 0x01 :  	// * * * *   * * * +		
			num_case = 1;
			break;
		case 0x03 :  	// * * * *   * * + +
			num_case = 2;
			break;	 
		case 0x02 :  	// * * * *   * * + *
			num_case = 3;
			break;
		case 0x06 :  	// * * * *   * + + *
			num_case = 4;
			break;		
		case 0x04 :  	// * * * *   * + * *
			num_case = 5;
			break;
		case 0x0C :  	// * * * *   + + * *
			num_case = 6;
			break;
		case 0x08 :  	// * * * *   + * * *
			num_case = 7;
			break;
		case 0x18 :  	// * * * +   + * * *
			num_case = 8;
			break;	
		case 0x10 :  	// * * * +   * * * *
			num_case = 9; 
			break;
		case 0x30 :  	// * * + +   * * * *   
			num_case = 10;
			break;
		case 0x20 :  	// * * + *   * * * *
			num_case = 11;
			break;
		case 0x60 :  	// * + + *   * * * *
			num_case = 12;
			break;	
		case 0x40 :  	// * + * *   * * * *
			num_case = 13;
			break;
		case 0xC0 :  	// + + * *   * * * *
			num_case = 14; 
			break;
		case 0x80 :  	// + * * *   * * * *
			num_case = 15;
			break;				
		default   :	
			num_case = pre_num_case;			
	}
	 
	return num_case;	//返回前部八路传感器的在线状态值。
}

/*****************************************************************/
//非线性放大矩阵,放大误差。经调节后可改善寻线效果
static signed int jiaodu_feedback_table[15]=	 
{-450, -320, -260, -220, -200, -160, -100, 0, 100, 160, 200, 220, 260, 320, 450};	

signed int value_change_Jiaodu (signed char jiaodu)
{
	signed int num_case;
	num_case = jiaodu_feedback_table[jiaodu+7];	//jiaodu的范围为-7至+7;
	return num_case;
}

⌨️ 快捷键说明

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