久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2144|回復: 4
打印 上一主題 下一主題
收起左側

單片機藍牙控制小車 求大牛求相助!

[復制鏈接]
跳轉到指定樓層
樓主
ID:224249 發表于 2017-10-19 20:41 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
硬件從做好的循跡小車中改過來的。是好的。存在問題:
手機發送16進制代碼,小車沒有反應

藍牙型號為HC-05

附上程序代碼,求大神解惑!
不勝感激!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:224249 發表于 2017-10-19 20:42 | 只看該作者
#include <reg52.h>
#include <math.h>

//宏定義
#define uchar unsigned char
#define uint unsigned int
#define SPEED_L_MAX 60
#define SPEED_R_MAX 60


//端口聲明
sbit L1 = P0^0;
sbit L2 = P0^1;
sbit R1 = P0^2;
sbit R2 = P0^3;

  
//變量定義
uchar t;                         //   計數
uchar PWM_L1;                 //          占
uchar PWM_L2;                 //          空
uchar PWM_R1;                 //          比
uchar PWM_R2;                 //

uchar Temp;                        //    接收數據暫存變量

uchar Port_flag;                   // 串口接收標志位

int mode;                           // 控制模式
int SPEED_L_TARGET;           // 左輪速度
int SPEED_R_TARGET;           // 右輪速度

//子程序聲明
void Speed_Calculate();
void motor();
void Port_init();

void Time0_init()
{
  TMOD|=0x01;
  TH0=(65536 - 100)/256;
  TL0=(65536 - 100)%256;
  EA=1;
  ET0=1;
  TR0=1;
}

void Port_init()
{
        TMOD|=0x20;
        TH1=0xfd;
        TL1=0xfd;
        TR1=1;
        REN=1;
        SM0=0;
        SM1=1;
        EA=1;
        ES=1;
}

void main()
{
  Time0_init();
  Port_init();
  while(1)
  {
      if( Port_flag == 1 )
          {       
            Port_flag = 0;
            switch (Temp)
                {
                   case 0x01 :                   
                      mode = 1;                          // 直走
                   case 0x02 :
                      mode = 2;                   // 左拐
                   case 0x03 :
                      mode = 3;                          // 右拐
                   case 0x04 :
                      mode = 4;                           // 倒退
                   case 0x05 :
                      mode = 5;                          // 停止
                }
            
          }
          
          Speed_Calculate();
          motor();

  }

}

void motor()
{
        if(SPEED_L_TARGET>=0)
        {
        PWM_L1=SPEED_L_TARGET;
        PWM_L2=0;
        }
        else
        {
        PWM_L1=0;
        PWM_L2=abs(SPEED_L_TARGET);
        }


        if(SPEED_R_TARGET>=0)
        {
        PWM_R1=SPEED_R_TARGET;
        PWM_R2=0;
        }
        else
        {
        PWM_R1=0;
        PWM_R2=abs(SPEED_R_TARGET);                 //絕對值
        }
}

void Speed_Calculate()
{
        if     (mode == 1)
        {
                SPEED_L_TARGET = SPEED_L_MAX*0.45;                                   //直走
                SPEED_R_TARGET = SPEED_R_MAX*0.45;
        }
        else if(mode == 2)
        {                                                                                                                  //稍微左拐
                SPEED_L_TARGET = SPEED_L_MAX*0;       
                SPEED_R_TARGET = SPEED_R_MAX*0.55;
        }
        else if(mode == 3)
        {
                SPEED_L_TARGET = SPEED_L_MAX*0.55;                                      //稍微右拐
                SPEED_R_TARGET = SPEED_R_MAX*0;
        }
        else if(mode == 4)
        {
                SPEED_L_TARGET = SPEED_L_MAX*(-0.45);                      //后退
                SPEED_R_TARGET = SPEED_R_MAX*(-0.45);
        }
       
        else if (mode == 5)
        {
                SPEED_L_TARGET = SPEED_L_MAX*0;                                      //停止
                SPEED_R_TARGET = SPEED_R_MAX*0;
        }
}


void Timer0 () interrupt 1
{
            
         TH0=(65536 - 100)/256;
     TL0=(65536 - 100)%256;
         t++;
       
        if(t<PWM_L1) L1=1;else L1=0;       
       
        if(t<PWM_L2) L2=1;else L2=0;
       
        if(t<PWM_R1) R1=1;else R1=0;
       
        if(t<PWM_R2) R2=1;else R2=0;
       
        if(t>100)
                t=0;
       
}

void Port () interrupt 4
{
        RI=0;
        Temp=SBUF;
        Port_flag=1;
}
回復

使用道具 舉報

板凳
ID:224249 發表于 2017-10-19 20:53 | 只看該作者
別沉了啊,自頂。糾結半天了
回復

使用道具 舉報

地板
ID:164602 發表于 2017-10-20 08:32 | 只看該作者
s-Pual 發表于 2017-10-19 20:53
別沉了啊,自頂。糾結半天了

因為沒有你說的相應硬件,也沒辦法試驗你的程序。
你到本論壇的智能小車/機器人板塊去找找答案吧。
你的小車沒反應,不一定只是51單片機的程序問題,還和你的手機APK程序有關,兩邊要配套才行。我的藍牙小車就是從那里學來的,多看幾篇相關文章。
以我的經驗,提醒你以下幾點:
1、首先是單片機藍牙接收和手機藍牙發送的數據類型一定要相同,一定一定一定。
2、51單片機的晶振是多少?如果是12M,串口的波特率最大4800,一定要加倍,否則,接收數據誤差太大,沒法工作的。
3、手機APK程序是自己寫的嗎?如果是用別人的,那得好好研究一下別人的51單片機程序,才知道別人的手機是發的什么樣的數據,網上很難找到手機APK的源程序,只能從單片機程序中去找相關的信息。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:240022 發表于 2017-10-20 10:28 | 只看該作者
s-Pual 發表于 2017-10-19 20:53
別沉了啊,自頂。糾結半天了

二、藍牙sbuf分為接受和發送,接受完成后,一定要將RI關閉,并接受到的數據用發送緩沖器sbuf發送到單片機內部,具體實現:SBUF=/*變量*/;
                                      while(!TI);                  //等待發送數據完成
                                                               TI=0;                         //清除發送完成標志位。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 九九九久久国产免费 | 91一区二区| 免费在线看a | 欧美在线一区二区三区 | 日韩国产精品一区二区三区 | 欧美三区在线观看 | 日韩av一区二区在线观看 | 精区3d动漫一品二品精区 | 国产情侣激情 | 成人欧美一区二区三区在线播放 | 黄色片在线网站 | 国产真实精品久久二三区 | 亚洲国产18| 黄色网址在线免费观看 | 国产精品久久久久久福利一牛影视 | 免费观看一级特黄欧美大片 | 久久久久久久一区 | 日韩欧美一区二区三区四区 | 久久精品16| 日本 欧美 三级 高清 视频 | 欧美在线观看一区 | 午夜精品一区二区三区在线视频 | 久久久成人精品 | 91大神在线看 | 精品无码三级在线观看视频 | 91极品欧美视频 | 黄色日本片| 亚洲午夜在线 | 91最新入口 | 福利视频网站 | 国产va | 亚洲国产一区二区在线 | 久久久蜜桃一区二区人 | 国产视频1 | 久久精品欧美一区二区三区不卡 | 国产精品无码久久久久 | 久久亚洲国产精品日日av夜夜 | 中文字幕亚洲一区 | 美女高潮网站 | 国产三级网站 | 视频一区二区在线观看 |