小R科技-WIFI机器人网·机器人创意工作室

标题: 遇到问题请帮忙解决 [打印本页]

作者: zwopen    时间: 2012-4-19 23:05
标题: 遇到问题请帮忙解决
我再尝试着做蓝牙小车在版主程序上小修改了下,但用手机蓝牙串口助手调试时发现直接发数字1或2没反应发 HEX 0X00或0X21等有反应是什么原因啊
作者: liuviking    时间: 2012-4-19 23:06
本帖最后由 liuviking 于 2012-4-19 23:16 编辑

截个串口助手的图放到这里,这样才好分析。
作者: zwopen    时间: 2012-4-20 01:01
本帖最后由 zwopen 于 2012-4-20 01:04 编辑

http://player.youku.com/player.php/sid/XMzgzOTUxNzE2/v.swf
hex 打钩 输入0x21 启动输入0x00 停止,去掉HEX 钩按1,2,3,4无效
所以无法使用版主开发的软件



作者: liuviking    时间: 2012-4-20 01:40
你的下位机是怎么写的呢?单ASCII字符解析的?
作者: zwopen    时间: 2012-4-20 08:01
#include<reg52.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
uchar Buffer[7] = {0}; //从串口接收的数据
uint i,j;
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit  out = P0^0;
/*char code reserve[3]_at_ 0x3b; //保留0x3b开始的3个字节                        */




/**********************************************************

us延时子函数 (500us)

**********************************************************/
void delayus(unsigned char x)
{
  unsigned char i;
  while (x--)
  {
    for (i = 0; i < 58; i++)
      ;
  }
}

/**********************************************************

归中子函数 (0度

**********************************************************/
void  Prog0(void)
{
   unsigned char m;

   for(m=0; m<30; m++)
   {
     out = 1;
     delayus(3);           //延时1.5ms
     out = 0;
     delayus(37);          //延时18.5ms
   }
}

/**********************************************************

逆时针转动子函数  1ms

**********************************************************/
void  Prog1(void)
{
   unsigned char m;
   
   for(m=0; m<40; m++)
   {
     out = 1;             //延时1ms
     delayus(2);
     out = 0;
     delayus(38);        //延时19ms
   }
}
/**********************************************************

顺时针转动子函数 2ms

**********************************************************/
void  Prog2(void)
{
   unsigned char m;
   
   for(m=0; m<40; m++)
   {
     out = 1;
     delayus(4);           //延时2ms
     out = 0;
     delayus(36);          //延时18ms
   }
}







/********************************************************************
* 名称 : 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++);
}
/********************************************************************
* 名称 : Com_Int()
* 功能 : 串口中断子函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Int(void) interrupt 4
{

EA = 0;
if(RI == 1) //当硬件接收到一个数据时,RI会置位
{
Buffer[0] = SBUF; //这里减去48是因为从电脑中发送过来的数据是ASCII码。
RI = 0;

}
EA = 1;
}
/********************************************************************
* 名称 : Com_Init()
* 功能 : 串口初始化,晶振11.0592,波特率9600,使串口中断
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Init(void)
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd; //设置波特率 9600
TL1 = 0xFd;
TR1 = 1; //启动定时器1
ES = 1; //开串口中断
EA = 1; //开总中断
}
/********************************************************************
* 名称 :Moto_Forward()
* 功能 : 电机正转启动前进
* 输入 : 1
* 输出 : 无
***********************************************************************/
void Moto_Forward()
{
P1_0=1;
P1_1=0;

         

}
/********************************************************************
* 名称 :Moto_Backward()
* 功能 : 电机反转启动后退
* 输入 : 4
* 输出 : 无
***********************************************************************/
void Moto_Backward()
{

P1_0=0;
P1_1=1;

         

}
/********************************************************************
* 名称 :Moto_FLeft()
* 功能 : 电机正转前进舵机左转1.0ms-60度,前左
* 输入 : 3
* 输出 : 无
***********************************************************************/
void Moto_FLeft()
{
P1_0=1;
P1_1=0;


}
/********************************************************************
* 名称 :Moto_FRight()
* 功能 : 电机正转前进舵机右转2.0ms60度,前右
* 输入 : 2
* 输出 : 无
***********************************************************************/
void Moto_FRight()
{
P1_0=1;
P1_1=0;


}
/********************************************************************
* 名称 :Moto_Stop()
* 功能 : 电机停止
* 输入 : 0
* 输出 : 无
***********************************************************************/
void Moto_Stop()
{
P1_0=0;
P1_1=0;

}
/********************************************************************
* 名称 :Moto_BLeft()
* 功能 : 电机反转前进舵机左转1.0ms-60度,退左
* 输入 : 6
* 输出 : 无
***********************************************************************/
void Moto_BLeft()
{
P1_0=0;
P1_1=1;


}
/********************************************************************
* 名称 :Moto_BRight()
* 功能 : 电机正转前进舵机右转2.0ms60度,退右
* 输入 : 5
* 输出 : 无
***********************************************************************/
void Moto_BRight()
{
P1_0=0;
P1_1=1;

/*Delay_1ms(100);         */
}


/********************************************************************
主程序
***********************************************************************/

void main()
{
Delay_1ms(100);
Com_Init();//串口初始化
Prog0();
while(1)
{
switch(Buffer[0])
{
case 0: Prog0();Moto_Stop(); break;
case 1: Prog0();Moto_Forward(); break;
case 4: Prog0();Moto_Backward(); break;
case 3: Prog1();Moto_FLeft(); break;
case 2: Prog2();Moto_FRight(); break;
case 6: Prog1();Moto_BLeft(); break;
case 5: Prog2();Moto_BRight(); break;

}

}
}
解析应该怎么写啊
作者: robotStudio    时间: 2012-4-20 08:25
把上位机串口发送命令代码贴出来。
作者: zwopen    时间: 2012-4-20 08:42
上位机就是蓝牙串口助手啊
作者: zwopen    时间: 2012-4-20 19:45
有人解答吗?
作者: liuviking    时间: 2012-4-20 20:16
你这个地方要减去48。  Buffer[0] = SBUF-48;因为串口助手不用Hex格式发送的时候,发下来的是ASCII字符,减去48才是正好1.2.3.4
作者: 孙凯华    时间: 2012-4-20 21:28
编程用的什么软件啊
作者: liuviking    时间: 2012-4-20 21:30
孙凯华 发表于 2012-4-20 21:28
编程用的什么软件啊

下位机用keil C,上位机看个人喜好了,非常多。
作者: 孙凯华    时间: 2012-4-20 21:33
liuviking 发表于 2012-4-20 21:30
下位机用keil C,上位机看个人喜好了,非常多。

上位机用C++行吗

作者: liuviking    时间: 2012-4-20 21:37
孙凯华 发表于 2012-4-20 21:33
上位机用C++行吗

自然可以,和语言无关的。
作者: 孙凯华    时间: 2012-4-20 21:42
liuviking 发表于 2012-4-20 21:37
自然可以,和语言无关的。

好的,谢啦
作者: zwopen    时间: 2012-4-21 22:15
非常非常感谢版主!
作者: zwopen    时间: 2012-4-21 22:16
非常非常感谢版主!
作者: wifi_robot    时间: 2012-7-22 14:40
liuviking 发表于 2012-4-20 20:16
你这个地方要减去48。  Buffer[0] = SBUF-48;因为串口助手不用Hex格式发送的时候,发下来的是ASCII字符,减 ...

请问一下,这位楼主上说如果选中Hex格式发送的话,那么下位机是能接收到数据,那这个兰牙下位机默认接收处理HEX格式数据?
作者: wifi_robot    时间: 2012-7-22 14:45
zwopen 发表于 2012-4-20 08:01
#include
#include
#define uchar unsigned char

“电机正转前进舵机右转2.0ms60度,前右”这个中的舵机右转是啥意思?用舵机做车轮子吗?

作者: liuviking    时间: 2012-7-22 15:07
wifi_robot 发表于 2012-7-22 14:40
请问一下,这位楼主上说如果选中Hex格式发送的话,那么下位机是能接收到数据,那这个兰牙下位机默认接收处 ...

默认处理的是ASCII字符数据。这里的HEX格式发送出去的不是真正意义上的HEX数据包,是当时为了符合别人写的下位机,而发送的ASCII字符形式、HEX格式的字符串。




欢迎光临 小R科技-WIFI机器人网·机器人创意工作室 (http://www.wifi-robots.com/) Powered by Discuz! X3.4