大家好,最近我做做小车碰到两个问题想请教一下。希望大神们能帮我解决一下!
1.wifi小车下位机部分都已经做好了,用论坛的手机Android操控小车也成功,但是为什么我用论坛里的上位机就没法使小车动啊?上位机的视频是可以返回的。
我的下位机程序是这样改的:
#include<reg52.h>
#include<math.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar Buffer =0; //从串口接收的数据
uint i=0,j,URTAReceivedCount=0,n=1;
uchar flag=0;
uchar data Tempdatatable[5],CommandDatatable[5];//数据包
sbit ENA=P2^0;
sbit ENB=P2^1;
sbit Left_Positive=P2^2;
sbit Left_Negative=P2^3;
sbit Right_Positive=P2^4;
sbit Right_Negative=P2^5;
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
/***********************************************************************/
void Delay_1ms(uint i)//1ms延时
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
协议规定:
包头 类型位 数据位 结束位
0XFF 1 1 0XFF
各命令说明:
类型位 数据位 功能
0X00 0X01 前进
0X00 0X02 后退
0X00 0X03 左转
0X00 0X04 右转
0X00 0X00 停止
/********************************************************************
* 名称 : Com_Int()
* 功能 : 串口中断子函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Int(void) interrupt 4
{
uchar temp;
ES=0; //关串口中断
RI=0; //软件清除接收中断
temp=SBUF;
if(temp==0XFF && URTAReceivedCount<2)
{
Tempdatatable[0]=0xFF; //包头
URTAReceivedCount++;
}
else
{
Tempdatatable[n]=temp;
n++;
}
if(URTAReceivedCount==2)//包尾
{
Tempdatatable[0]=0XFF;
Tempdatatable[4]=0XFF;
n=1;
URTAReceivedCount=0; //组包完毕
//temp="";
}
CommandDatatable[0]=Tempdatatable[0];
CommandDatatable[1]=Tempdatatable[1];
CommandDatatable[2]=Tempdatatable[2];
CommandDatatable[3]=Tempdatatable[3];
CommandDatatable[4]=Tempdatatable[4];
ES=1;//开串口中断
}
/********************************************************************
* 名称 : Com_Init()
* 功能 : 串口初始化,晶振11.0592,波特率9600,使能串口中断
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Init(void)
{
TMOD = 0x21;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd; //设置波特率 9600
TL1 = 0xFd;
TR1 = 1; //启动定时器1
ES = 1; //开串口中断
EA = 1; //开总中断
IT0=0;
EX0=1;
}
/*******************************************************************
* 名称 :Moto_Forward()
* 功能 : 电机1、2启动,都是前进,整车表现为前进。
* 输入 : 无
* 输出 : 无
***********************************************************************/
/********************************************************************
* 名称 :Moto_Forward()
* 功能 : 电机1、2启动,都是前进,整车表现为前进。
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Moto_Forward()
{
ENA=1;
ENB=1;
Right_Negative=0;
Left_Positive=0;
Left_Negative=1;
Right_Positive=1;
Delay_1ms(100);
}
/********************************************************************
* 名称 :Moto_Backward()
* 功能 : 电机1、2启动,都是后退,整车表现为后退。
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Moto_Backward()
{
ENA=1;
ENB=1;
Left_Positive=1;
Right_Positive=0;
Right_Negative=1;
Left_Negative=0;
Delay_1ms(100);
}
/********************************************************************
* 名称 :Moto_TurnLeft()
* 功能 : 电机1后退,电机2前进,整车表现为左转。
* 输入 : 无
* 输出 : 无
***************************** ******************************************/
void Moto_TurnLeft()
{
ENA=1;
ENB=1;
Left_Negative=1;
Right_Positive=0;
Right_Negative=1;
Left_Positive=0;
Delay_1ms(100);
}
/********************************************************************
* 名称 :Moto_TurnRight()
* 功能 : 电机1前进,电机2后退,整车表现为右转。
* 输入
: 无
* 输出 : 无
***********************************************************************/
void Moto_TurnRight()
{
ENA=1;
ENB=1;
Right_Negative=0;
Left_Negative=0;
Left_Positive=1;
Right_Positive=1;
Delay_1ms(100);
}
/********************************************************************
* 名称 :Moto_Stop()
* 功能 : 电机1停止,电机2停止,整车表现为停止。
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Moto_Stop()
{
ENA=0;
ENB=0;
Right_Negative=0;
Left_Negative=0;
Left_Positive=0;
Right_Positive=0;
Delay_1ms(100);
}
void main()
{
P2= 0x00;
Delay_1ms(200);
Com_Init();//串口初始化
while(1)
{
if(CommandDatatable[0]==0XFF && CommandDatatable[4]==0XFF)
{
switch (CommandDatatable[1]) //根据键值不同,执行不同的内容
{
case 0X00: //类型位0X00,表明是控制数据包,进入控制数据case
switch(CommandDatatable[3]) //根据数据位的值来进行选择执行不同的动作
{
case 0x00:Moto_Stop();break;
case 0x01:Moto_Forward();break;
case 0x02:Moto_Backward();break;
case 0x03:Moto_TurnLeft();break;
case 0x04:Moto_TurnRight();break;
}
break;
default :break;
}
}
}
}
2.如上所述的下位机程序,我始终没搞清楚串口中断里面 temp=""; 这句话是做什么用的,有它就有2个warnings,而且在用电脑上位机的时候还会提示wifi信号弱,可能丢失连接。 但是 注释了就0errors 0warnings,并且上位机使用不会出现上述提醒。请问这是什么问题啊?
3.我想做一个体感控制的wifi小车,现在基本上下位机什么的都做完了 ,然后就差上位机了,由于看了一下淘宝上的kinect摄像头太贵了,穷人买不起啊!所以想自己做一个上位机来进行图像处理,但是我对图像处理一无所知 (请原谅我的无知==~!)不知是否有大神做过图像处理的能提供几本好书关于这个的,或者有过类似图像处理上位机的大神交流一下经验呢?{:2_38:} |