做这个小车真是历尽波折
因为我的零件是散买的,所以在组装时出了各种幺蛾子
先是装马达的时候发现螺丝买短了,之后又是单片机最小单元装不到小车底板上…
千辛万苦把小车组装好了,终于可以开心(并不)的写程序了
关于小车的程序
开始的时候本来是准备设计成在传感器触发时转向,在感应器感应消失后再加一个延时使小车转到与障碍物平行的方向,但运行时发现感应器的感应范围太小,导致小车在避障程序触发时与障碍物靠得太近,无法转向。后来决定将转向的时间设为定值,并加了后退的程序,然而测试时发现因为电池电压太低,电机在运转方向改变以及在停止后再启动时时不时会卡住,导致测试根本没法继续。由于新买的3.7v电池下周才能到,赶不上这周的作业,因此我就先把目前写完的代码发出来了。
main
# include <REGX52.H>
#include "direction.h"
#define u8 unsigned char
#define u16 unsigned int
sbit BZL=P2^0 ;
sbit BZR=P2^1 ;
void main()
{
while(1)
{
forward(0);
if(BZR==0)
{
back(700);
left(700);
}
if(BZL==0)
{
back(700);
right(700);
}
}
}
头文件direction里是控制小车行进方向的函数(顺便把延时函数也写进去了)
direction.c
#include <REGX52.H>
#include <INTRINS.H>
#define u8 unsigned char
#define u16 unsigned int
sbit L1=P0^0;
sbit L2=P0^1;
sbit R1=P0^2;
sbit R2=P0^3;
void Delay (u16 xms)
{
u8 i, j;
while(xms>0)
{
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
xms--;
}
}
void stop(u16 time)
{
L1=0;
L2=0;
R1=0;
R2=0;
Delay(time);
}
void forward(u16 time)
{
L1=1;
L2=0;
R1=1;
R2=0;
Delay(time);
}
void back(u16 time)
{
L1=0;
L2=1;
R1=0;
R2=1;
Delay(time);
}
void left(u16 time)
{
L1=0;
L2=0;
R1=1;
R2=0;
Delay(time);
}
void right(u16 time)
{
L1=1;
L2=0;
R1=0;
R2=0;
Delay(time);
}
direction.h
#ifndef __direction_H__
#define __direction_H__
#define u8 unsigned char
#define u16 unsigned int
void Delay (u16 xms);
void stop(u16 time);
void forward(u16 time);
void back(u16 time);
void left(u16 time);
void right(u16 time);
#endif
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)