目前经过你的描述可以判断出,你的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; } |