![]() |
發布時間: 2020-5-24 18:21
正文摘要:DIY的藍牙小車,在手機和單片機通信的時候APP顯示已經連接了藍牙,但點擊APP上設置的對應按鈕時小車沒有反應,有沒有遇到這種情況的朋友,求解,程序在評論里。 |
目前經過你的描述可以判斷出,你的51程序正常!串口正常!現需要檢查APP和藍牙模塊通訊的問題,第一:判斷手機APP藍牙是否支持、打開,開始搜索、配對、然后進行連接。第二:如果第一步成功接著判斷是否手機藍牙發送消息正常。重點:檢查手機APP藍牙連接配對,及消息發送接收程序的編寫。 |
2538076292 發表于 2020-5-25 17:38 今天上午就搞過了,電機可以正常運作,然后現在電腦上的串口助手可以驅動小車運動了,但是手機APP和藍牙模塊之間的通信還是沒法建立,不知道是哪個地方的原因。。。 |
嘿嘿嘿a 發表于 2020-5-25 14:59 單獨調試一下驅動模塊,在main函數里只加上驅動函數,在設定好延時,做個循環看看電機轉動是否正常。 |
2538076292 發表于 2020-5-25 12:51 我剛開始就是給放到中斷服務函數中了,現在用電腦串口助手能控制,但是只有一個電機轉不知道是什么情況,我上午已經調過驅動,兩個電機都是可以正常運動的,現在的問題就是只有左輪是轉的,而且手機APP和單片機之間的通信還是有問題。 ![]() |
zqy181818 發表于 2020-5-25 12:02 現在是電腦上的串口助手能控制小車,但是只有一個電機轉,手機App還是沒法控制 |
可用串口助手,在電腦端連接藍牙測試,在試機。先測出APP發出的字符,電腦端能不能收到。如果能收到,在一一對應程序中字符。還有的是波特率也要對得上。 |
main函數里沒循環,switch跳出一次程序就結束了后續單片機一直執行終斷,根本進不去switch,把switch丟終斷里因該就可以了,再不行把字母換成16進制的數字。 |
你可用串口助手,在電腦端連接藍牙測試,在試機。先測出APP發出的字符,電腦端能不能收到。如果能收到,在一一對應程序中字符。還有的是波特率也要對得上。 |
#include <reg52.h> #define uchar unsigned char #define uint unsigned int typedef unsigned int u16; typedef unsigned char u8; sbit IN1 = P1^2; sbit IN2 = P1^3; sbit IN3 = P1^6; sbit IN4 = P1^7; /*sbit EN1 = P1^4; sbit EN2 = P1^5; #define left_motor_go IN1 =1 , IN2 = 0 #define left_motor_back IN1 = 0, IN2 = 1 #define right_motor_go IN3 = 1, IN4 = 0 #define right_motor_back IN3 = 0, IN4 = 1 u16 receivedata; void delay(uint z) { uint x,y; for(x = z; x > 0; x--) for(y = 114; y > 0 ; y--); } void UART_INIT() { PCON=0x00; SCON=0x50; EA = 1; ES = 1; TMOD = 0x20; TH1 = 0xfd; TL1 = 0xfd; } /************************************************************************/ /* void run(void) { push_val_left =pwm; push_val_right =pwm; if(pwm==10) pwm=0; if(pwm==0&&pwm<0) pwm=0; }*/ /************************************************************************/ /* PWMµ÷ÖÆµç»úתËÙ */ /************************************************************************/ /* ×ó²àµç»úµ÷ËÙ */ /*µ÷½Úpush_val_leftµÄÖµ¸Ä±äµç»úתËÙ,Õ¼¿Õ±È */ /* void pwm_out_left_moto(void) { if(Left_moto_stop) { if(pwm_val_left<=push_val_left) { Left_moto_pwm=1; } else { Left_moto_pwm=0; } if(pwm_val_left>=10) pwm_val_left=0; } else { Left_moto_pwm=0; } }*/ /******************************************************************/ /* ÓÒ²àµç»úµ÷ËÙ */ /* void pwm_out_right_moto(void) { if(Right_moto_stop) { if(pwm_val_right<=push_val_right) { Right_moto_pwm=1; } else { Right_moto_pwm=0; } if(pwm_val_right>=10) pwm_val_right=0; } else {Right_moto_pwm=0; } } /***************************************************/ /* void timer0()interrupt 1 using 2 { TH0=0XF8; TL0=0X30; time++; pwm_val_left++; pwm_val_right++; pwm_out_left_moto(); pwm_out_right_moto(); }*/ void forward() { left_motor_go; right_motor_go; } void left_go() { left_motor_back; right_motor_go; delay(700); forward(); } void right_go() { delay(50); right_motor_back; left_motor_go; delay(700); forward(); } void left() { delay(50); right_motor_go; left_motor_back; } void right() { left_motor_go; right_motor_back; } void back() { left_motor_back; right_motor_back; } void stop() { IN1=0; IN2=0; IN3=0; IN4=0; } void main() { IN1=0;IN2=0;IN3=0;IN4=0; UART_INIT(); switch(receivedata) { case 'g': forward(); break; case 'b': back(); break; case 'l': left(); break; case 'r': right(); break; case 's': stop(); break; case 'z': left_go(); break; case 'y': right_go(); break; } } void UART_SER() interrupt 4 { receivedata=SBUF; RI=0; SBUF=receivedata; while(!TI); TI=0; } |