最近参加了学校组织的TI小车培训,经过两三天的培训,可算写出来了,此车采用的是八路循迹模块,根据地图实际情况可以稍加修改,我这里采用的是右手法则,十字右转,T型右转直走加左转直行,直走加右转右转。代码如下(需要的头文件在TI官网有,我也会发在资源里)
#include <stdio.h>
#include “msp.h”
#include “…/inc/Clock.h”
#include “…/inc/UART0.h”
#include “…/inc/Reflectance.h”
#include “…/inc/PWM.h”
#include “…/inc/Motor.h”
#include “…/inc/JN_LCD.h”
#define RED 0x01
#define GREEN 0x02
#define BLUE 0x04
#define yellow 0x03
#define sky blue 0x06
#define white 0x07
#define pink 0x05
uint8_t Data;
uint16_t L = 4500;
uint16_t R = 4500;
void Port2_Init(void){
P2->SEL0 = 0x00;
P2->SEL1 = 0x00;
P2->DS = 0x07;
P2->DIR = 0x07;
P2->OUT = 0x00;
}
void Port2_output(uint8_t data){
P2->OUT=data;
}
void main1(void)
{
uint8_t Data;
UART0_Initprintf();
Clock_Init48MHz();
Reflectance_Init();
while(1){
Data = Reflectance_Read(1000);
printf("%02x\n",Data);
Clock_Delay1ms(10);
}
}
void main(void){
uint8_t Data =0x00;
UART0_Initprintf();
Clock_Init48MHz();
Reflectance_Init();
Motor_Init();
Port2_Init();
while(1){
Data = Reflectance_Read(500);
switch(Data){
case 0x37://0011 0111
case 0x3e://0011 1110
case 0x17://0001 0111
case 0x1d://0001 1101
case 0x3f://0011 1111
case 0x1f://0001 1111
case 0x8e://0001 1110
case 0x07://0000 0111
case 0x0b://0000 1011
case 0x0d://0000 1101
case 0x0e://0000 1110
case 0x0c://0000 1100
case 0x0a://0000 1010
case 0x09://0000 1001
case 0x05://0000 0101
case 0x03://0000 0011
case 0x08://0000 1000
case 0x04://0000 0100
case 0x02://0000 0010
case 0x01://0000 0001
Port2_output(0x05);
Motor_Right(6000,6000);
Clock_Delay1ms(300);
break;
case 0xcc://1110 1100
case 0xdc://1101 1110
case 0xbc://1011 1110
//case 0xfe://1111 1110
case 0x7c://0111 1100
case 0x78://0111 1000
case 0xc8://1110 1000
case 0xfc://1111 1100
case 0xf8://1111 1000
case 0x70://0111 0000
case 0xb0://1011 0000
case 0xd0://1101 0000
case 0xe0://1110 0000
case 0xc0://1100 0000
case 0xa0://1010 0000
case 0x90://1001 0000
case 0x50://0101 0000
case 0x30://0011 0000
case 0x80://1000 0000
case 0x40://0100 0000
case 0x20://0010 0000
case 0x10://0001 0000
Port2_output(0x06);
Motor_Left(6000,6000);
break;
case 0xff://1111 1111
case 0xfe://1111 1110
case 0xef://1110 1111
case 0xee://1110 1110
case 0x7e://0111 1110
case 0x7f:
Motor_Right(6000,6000);
Clock_Delay1ms(300);
break;
default:
Port2_output(0x02);
Motor_Forward(L,R);
break;
case 0x00:
Motor_Right(6000,6000);
}
}
}