新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)智能循跡小車制作

單片機(jī)智能循跡小車制作

作者: 時(shí)間:2016-11-30 來源:網(wǎng)絡(luò) 收藏
電路圖和制作詳情請(qǐng)從這里下載附件:http://www.51hei.com/bbs/dpj-18970-1.html,下面是程序源代碼

/****
**********************************
*程序說明:
*此ATmega128單片機(jī)程序
*包含功能:
*1、
*2、
*3、
*4、
*5、
**********************************
*文件:main.c
*用途:系統(tǒng)主程序
*注意:系統(tǒng)時(shí)鐘8MHZ
*編譯環(huán)境:Code VisionAVR
**********************************
*版本:智能循跡小車v1.0
*作者:吾ARM1
*修改時(shí)間?012年4月19日
*完成時(shí)間:2012年4月16日
**********************************/

本文引用地址:http://m.butianyuan.cn/article/201611/323709.htm

#include
#include "delay.h"
#define left1 PORTC.0
#define left2 PORTC.1
#define min PORTC.2
#define right1 PORTC.3
#define right2 PORTC.4
#define Turn_Left PORTC.5
#define Turn_Right PORTC.6
#define u8 unsigned char
#define u16 unsigned int

void Init_IO(void)
{
DDRC = DDRC&0xe0; //將C端口低5位定義為輸入,浮空
PORTC = 0xe0;//
DDRB = 0xff; //將B端口設(shè)為輸出模式
PORTB = 0xff;
PORTA = 0xff;
DDRA = 0xff;
}

void Adjust_Speed(u8 Left_Speed,u8 Right_Speed)
{
OCR1A = (u16)Right_Speed*10 ;//Left_Speed:1--100,為右電機(jī)占空比
OCR1B = (u16)Left_Speed*10;//Right_Speed:1--100,為左電機(jī)的占空比
}

void Init_Timer1(void)
{ u16 i,j;
i = 300; //實(shí)際測(cè)試發(fā)現(xiàn)1600時(shí)電機(jī)速度還是很快的。
j = 300;
TCCR1A = 0xa0;//相位與頻率修正PWM,TOP值為ICR1,向上計(jì)數(shù)匹配清零,向下計(jì)數(shù)匹配時(shí)置1
TCCR1B = 0x12;//系統(tǒng)時(shí)鐘8分頻,A,B同時(shí)輸出PWM
OCR1A = i; //右電機(jī)
OCR1B = j; //在電機(jī)
ICR1 = 1000;
}

void main(void)
{
Init_IO();
Init_Timer1();
while(1)
{
if(PINC==0xfb)//只有中間循跡管檢測(cè)到黑線11011
{
Adjust_Speed(90,90);//前進(jìn)(35,35):一圈循跡時(shí)間16.3S (38,38)一圈循跡時(shí)間15.5s (40,40)一圈循跡時(shí)間16.34s (50,50)15.34s(60,60)14.21s
PORTA = 0xfe; //(80,80)13.68s
}

if(PINC==0xf9)//中間和左邊第二個(gè)循跡管檢測(cè)到黑線10011
{
Adjust_Speed(20,60);//左轉(zhuǎn)
// delay_ms(5);
PORTA = 0xfd;
}

if(PINC==0xfd)//左邊第二個(gè)循跡管檢測(cè)到黑線10111
{
Adjust_Speed(15,65);//左轉(zhuǎn)
//delay_ms(5);
PORTA = 0xfb;
}

if(PINC==0xfc)//左邊兩個(gè)同時(shí)檢測(cè)到黑線00111
{

Adjust_Speed(10,70);//左轉(zhuǎn)
PORTA = 0xf7;
}

if(PINC==0xfe)//左邊第一個(gè)循跡管檢測(cè)到黑線01111
{

Adjust_Speed(7,85);//左轉(zhuǎn)
// delay_ms(5);
PORTA = 0xef;
}

if(PINC==0xf3)//中間和右邊第二個(gè)循跡管檢測(cè)到黑線11001
{

Adjust_Speed(35,15);//右轉(zhuǎn)
PORTA = 0xdf;
}
if(PINC==0xf7)//右邊第二個(gè)循跡管檢測(cè)到黑線11101
{
Adjust_Speed(70,13);//右轉(zhuǎn)
PORTA = 0xbf;
}
if(PINC==0xe7)//右邊兩個(gè)檢測(cè)到黑線11100
{
Adjust_Speed(80,10);//右轉(zhuǎn)
PORTA = 0x7f;
}
if(PINC==0xef)//右邊第一個(gè)檢測(cè)到黑線11110
{
Adjust_Speed(100,10);//右轉(zhuǎn)
PORTA = 0xfc;
}
if(PINC==0xe3)//右側(cè)三個(gè)循跡管同時(shí)檢測(cè)到黑線(直角)11000
{
Adjust_Speed(40,0);//右轉(zhuǎn)
PORTA = 0xf8;
}
if(PINC==0xe7)//左側(cè)三個(gè)循跡管同時(shí)檢測(cè)到黑線(直角)00011左轉(zhuǎn)
{
Adjust_Speed(0,40);//左轉(zhuǎn)
PORTA = 0xf0;
}
if(PINC==0xe0)//5個(gè)循跡管同時(shí)檢測(cè)到交叉00000直走
{
Adjust_Speed(25,25);//直走
PORTA = 0xe0;
}
// if(PINC==0xff)
// {
// Adjust_Speed(0,100);//直走
// PORTA = 0xc0;
//}

}

}



評(píng)論


技術(shù)專區(qū)

關(guān)閉