migong.txt

来自「走迷宫 自动绕行 红外线导航 遇到障碍物自动避开」· 文本 代码 · 共 107 行

TXT
107
字号
#include<avr/BoeBot.h>
#include<avr/usta.h>
int PC0_state(void)
{
	return (PINC&0x01)?1:0;
}
int PC1_state(void)
{
	return (PINC&0x02)?1:0;
}
void Forward(void)
{
	PORTC|=_BV(PC3);
	delay_nus(1700);
    PORTC&=~_BV(PC3);
	PORTC|=_BV(PC2);
	delay_nus(1300);
	PORTC&=~_BV(PC2);
	delay_nms(20);
}
void Left_Turn(void)
{
    for(uint16_t i=1;i<=30;i++)
	{
		PORTC|=_BV(PC3);
		delay_nus(1300);
        PORTC&=~_BV(PC3);
		PORTC|=_BV(PC2);
		delay_nus(1300);
		PORTC&=~_BV(PC2);
		delay_nms(20);
	}
}
void Right_Turn(void)
{
    for(uint16_t i=1;i<=45;i++)
	{
		PORTC|=_BV(PC3);
		delay_nus(1700);
        PORTC&=~_BV(PC3);
		PORTC|=_BV(PC2);
		delay_nus(1700);
		PORTC&=~_BV(PC2);
		delay_nms(20);
	}
}
void Backward(void)
{
    for(uint16_t i=1;i<=9;i++)
	{
		PORTC|=_BV(PC3);
		delay_nus(1300);
        PORTC&=~_BV(PC3);
		PORTC|=_BV(PC2);
		delay_nus(1700);
		PORTC&=~_BV(PC2);
		delay_nms(20);
	}
}
int main(void)
{
	usta_Init();
	int irDetectLeft;
	int irDetectRight;
	DDRD|=_BV(PD6)|_BV(PD7);
	DDRC|=_BV(PC2)|_BV(PC3);
	printf("Program Running!");	
	for(uint16_t counter=1;counter<=6000;counter++)//开始/复位信号
	{
	    PORTD|=_BV(PD7);
		delay_nus(166);
		PORTD&=~_BV(PD7);
       	delay_nus(166);
	}
	while(1)
	{
		for(uint16_t counter=0;counter<11.5;counter++)
		{
			PORTD|=_BV(PD6);
			delay_nus(13);
			PORTD&=~_BV(PD6);
		    delay_nus(13);
		}
		irDetectLeft=PC0_state();
		irDetectRight=PC1_state();
		if((irDetectLeft==0)&&(irDetectRight==0))//两边同时接收到红外线
		{
			Backward();
			Left_Turn();
			
		}
		else if(irDetectLeft==0)//只有左边接收到红外线
		{
			Backward();
			Right_Turn();
		}
		else if(irDetectRight==0)//只有右边接收到红外线
		{
			Backward();
			Left_Turn();
		}
		else 
			Forward();
	}
}

⌨️ 快捷键说明

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