设为首页收藏本站

arduino 单片机机器人爱好者之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2503|回复: 5

程序求助贴,蓝牙程序v1.2

[复制链接]

该用户从未签到

发表于 2014-4-28 21:26:00 | 显示全部楼层 |阅读模式
新手诚心求教,以下程序是我根据论坛上的贴模仿出来的。希望能够读出五位十六进制数组来实现 v1.2 程序中的安卓重力感应。 但是我用蓝牙串口应用输出的十六进制命令对小车没有任何作用,希望有大神点拨一下,万分感谢。








#include<Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);

int AIN1 = 6;
int AIN2 = 5;
int BIN1 = 10;
int BIN2 = 9;

int melody[]={330,330,330,262,392,200,280};
int noteDurations[]={8,4,4,8,4,4,5};

char BT_val;
int BT_array[5];

//unsigned int FORWARD[] = {(byte) 0xFF, 0x5A, 0x5B, 0x00, 0x01, (byte) 0xFF};
//unsigned int BACK [] = {(byte) 0xFF, 0x5A, 0x5B, 0x00, 0x05, (byte) 0xFF};
//unsigned int STOP []= {(byte) 0xFF, 0x5A, 0x5B, 0x00, 0x03, (byte) 0xFF};
//unsigned int LEFT []= {(byte) 0xFF, 0x5A, 0x5B, 0x00, 0x02, (byte) 0xFF};
//unsigned int RIGHT [] = {(byte) 0xFF, 0x5A, 0x5B, 0x00, 0x04, (byte) 0xFF};


void setup()
{
delay(500);
Serial.begin(9600);
pinMode(AIN1,OUTPUT);
pinMode(AIN2,OUTPUT);
pinMode(BIN1,OUTPUT);
pinMode(BIN2,OUTPUT);
pinMode(13, OUTPUT);
lcd.init();
lcd.noBacklight();
lcd.setCursor(0,0);
lcd.print("CMD Data:");

for(int thisNote = 0;thisNote < 7;thisNote ++)
{
tone(12,melody[thisNote],1000/noteDurations[thisNote]);
delay(1300/noteDurations[thisNote]);
noTone(12);
}
}

void cmd(){
  int n ;
  for(n=0;n<=5;n++){
    BT_val = Serial.read();
    BT_array[n]=BT_val;
  }
}



void setMotor(int MOTORA,int MOTORB)
{
if(MOTORA>=0)
   {
     digitalWrite(AIN2,HIGH);
     analogWrite(AIN1,255-MOTORA);
   }
else
{
digitalWrite(AIN1,HIGH);
analogWrite(AIN2,MOTORA+255);
}
if(MOTORB>=0)
  {
digitalWrite(BIN2,HIGH);
analogWrite(BIN1,255-MOTORB);
  }
else
   {
digitalWrite(BIN1,HIGH);
analogWrite(BIN2,255+MOTORB);
    }
}
void loop()
{
cmd();
// Serial.println(BT_array[3],HEX);
// Serial.println(BT_array[4],HEX);


if(BT_array[0]==0XFF && BT_array[1]==0x5A
    && BT_array[2]==0x5B && BT_array[5]==0XFF){
    switch (BT_array[3]=0x00)      //根据键值不同,执行不同的内容
    {
      case 0x00:
        switch(BT_array[4])  //根据数据位的值来进行选择执行不同的动作
        {
          case 0x01:
            setMotor(150,150);
                 lcd.setCursor(12,0);   
                 lcd.print('d');
                 lcd.setCursor(0,1);
                 lcd.print("right");
                 break;
          case 2:
            setMotor(-120,128);
                 lcd.setCursor(12,0);   
                 lcd.print('d');
                 lcd.setCursor(0,1);
                 lcd.print("right");
                 break;
          case 3:
            setMotor(0,0);
                 lcd.setCursor(12,0);   
                 lcd.print('d');
                 lcd.setCursor(0,1);
                 lcd.print("right");
                 break;
          case 4:
            setMotor(128,-120);
                 lcd.setCursor(12,0);   
                 lcd.print('d');
                 lcd.setCursor(0,1);
                 lcd.print("right");
                 break;           
          case 5:
            setMotor(-150,-150);
                 lcd.setCursor(12,0);   
                 lcd.print('d');
                 lcd.setCursor(0,1);
                 lcd.print("right");
                 break;
        }
        break;
    }
  }











该用户从未签到

 楼主| 发表于 2014-4-28 21:30:16 | 显示全部楼层
本帖最后由 真的不知道 于 2014-4-28 21:33 编辑

[code=Cpp width=720px][
#include<Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);

int AIN1 = 6;
int AIN2 = 5;
int BIN1 = 10;
int BIN2 = 9;

int melody[]={330,330,330,262,392,200,280};
int noteDurations[]={8,4,4,8,4,4,5};

char BT_val;
int BT_array[5];

//unsigned int FORWARD[] = {(byte) 0xFF, 0x5A, 0x5B, 0x00, 0x01, (byte) 0xFF};
//unsigned int BACK [] = {(byte) 0xFF, 0x5A, 0x5B, 0x00, 0x05, (byte) 0xFF};
//unsigned int STOP []= {(byte) 0xFF, 0x5A, 0x5B, 0x00, 0x03, (byte) 0xFF};
//unsigned int LEFT []= {(byte) 0xFF, 0x5A, 0x5B, 0x00, 0x02, (byte) 0xFF};
//unsigned int RIGHT [] = {(byte) 0xFF, 0x5A, 0x5B, 0x00, 0x04, (byte) 0xFF};


void setup()
{
delay(500);
Serial.begin(9600);
pinMode(AIN1,OUTPUT);
pinMode(AIN2,OUTPUT);
pinMode(BIN1,OUTPUT);
pinMode(BIN2,OUTPUT);
pinMode(13, OUTPUT);
lcd.init();
lcd.noBacklight();
lcd.setCursor(0,0);
lcd.print("CMD Data:");

for(int thisNote = 0;thisNote < 7;thisNote ++)
{
tone(12,melody[thisNote],1000/noteDurations[thisNote]);
delay(1300/noteDurations[thisNote]);
noTone(12);
}
}

void cmd(){
  int n ;
  for(n=0;n<=5;n++){
    BT_val = Serial.read();
    BT_array[n]=BT_val;
  }
}



void setMotor(int MOTORA,int MOTORB)
{
if(MOTORA>=0)
   {
     digitalWrite(AIN2,HIGH);
     analogWrite(AIN1,255-MOTORA);
   }
else
{
digitalWrite(AIN1,HIGH);
analogWrite(AIN2,MOTORA+255);
}
if(MOTORB>=0)
  {
digitalWrite(BIN2,HIGH);
analogWrite(BIN1,255-MOTORB);
  }
else
   {
digitalWrite(BIN1,HIGH);
analogWrite(BIN2,255+MOTORB);
    }
}
void loop()
{
cmd();
// Serial.println(BT_array[3],HEX);
// Serial.println(BT_array[4],HEX);


if(BT_array[0]==0XFF && BT_array[1]==0x5A
    && BT_array[2]==0x5B && BT_array[5]==0XFF){
    switch (BT_array[3]=0x00)      //根据键值不同,执行不同的内容
    {
      case 0x00:
        switch(BT_array[4])  //根据数据位的值来进行选择执行不同的动作
        {
          case 0x01:
            setMotor(150,150);
                 lcd.setCursor(12,0);   
                 lcd.print('d');
                 lcd.setCursor(0,1);
                 lcd.print("right");
                 break;
          case 2:
            setMotor(-120,128);
                 lcd.setCursor(12,0);   
                 lcd.print('d');
                 lcd.setCursor(0,1);
                 lcd.print("right");
                 break;
          case 3:
            setMotor(0,0);
                 lcd.setCursor(12,0);   
                 lcd.print('d');
                 lcd.setCursor(0,1);
                 lcd.print("right");
                 break;
          case 4:
            setMotor(128,-120);
                 lcd.setCursor(12,0);   
                 lcd.print('d');
                 lcd.setCursor(0,1);
                 lcd.print("right");
                 break;           
          case 5:
            setMotor(-150,-150);
                 lcd.setCursor(12,0);   
                 lcd.print('d');
                 lcd.setCursor(0,1);
                 lcd.print("right");
                 break;
        }
        break;
    }
  }/code]










回复 支持 反对

使用道具 举报

签到天数: 7 天

[LV.3]偶尔看看II

发表于 2014-4-29 15:04:27 | 显示全部楼层
上位机软件的问题,发送的16进制数据不全造成的
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2014-4-29 20:33:09 | 显示全部楼层
YFRobot 发表于 2014-4-29 15:04
上位机软件的问题,发送的16进制数据不全造成的

谢谢回答,但是我不能理解啊,能不能解释一下,或者告诉我应该怎么改啊?
回复 支持 反对

使用道具 举报

签到天数: 102 天

[LV.6]常住居民II

发表于 2014-5-5 08:56:47 | 显示全部楼层
真的不知道 发表于 2014-4-29 20:33
谢谢回答,但是我不能理解啊,能不能解释一下,或者告诉我应该怎么改啊?

先用串口检查一下上位机发送来的字符是否正确!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|联系我们|YFRobot ( 苏ICP备13017135  

GMT+8, 2017-11-20 17:33 , Processed in 0.217104 second(s), 23 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表