程序这卡住了,谁能帮我修改下程序啊 |
xianming 发表于 2020-4-18 11:41 亮的,同样的接线,同样的程序,用电脑的usb接通信接口,可以控制小车,板上的灯也亮,但是用l298n输出的5V接DC口就不行了,只有电源灯亮,控制的led灯不亮,我还用手机充电器转的5V接通信接口,也不亮 |
蓝牙模块的灯亮不亮? |
![]() |
之一知足 发表于 2020-4-14 19:07 谢谢你,好人呐 |
做蓝牙小车,首先你先别急着去搞电机,你先确定好蓝牙与手机之间的通信部分是正常的,比如你手机按下,板子上点亮一个小灯,从最简单的现象上去判断问题。 |
给你套资料,仅供参考,挺全面的,当时玩这个的时候是参照他的 |
10.58 MB, 下载次数: 12
![]() |
game灬boy 发表于 2020-4-13 19:17 好的谢谢了,明天我再试一下 |
yuhui1023 发表于 2020-4-13 14:21 你的程序判断的条件有问题,我看到PS已经置1,说明串口中断优先级较高,你的if(a==‘0’)是在判断a等于字符0而不是a等于数字0,你可以把if括号中的判断条件改为a==0,或者a==‘0’-0x30 加好友得私发,直接评论会被删 |
game灬boy 发表于 2020-4-13 11:42 我改成16进制后显示的是04,不是单纯的4,如果需要改程序怎么改啊?请问能加您一个微信么 |
串口优先级是否高于定时器优先级?还有蓝牙发送的数据格式是什么16进制还是字符?我看见你前面发了一张蓝牙接收的图片,你将你的串口助手设置为16进制接受看看接收数据还是否为12345,如果不是,你的单片机接受的就是字符‘1’;‘2’;‘3’;‘4’;‘5’;了而不是接收的数字12345,如果是字符请将接受的数据减0x30, a = SBUF-0x30;或者写为 a = SBUF-'0'; |
又是元气满满的一天,继续坐在电脑面前瞎摸索![]() |
![]() |
郑汉松 发表于 2020-4-12 16:33 我把电机线直接接在开发板的+5和GND是可以直接转的,但是用蓝牙就是不转 ![]() |
1,298的输入电压一般是9~12V 2,51单片机没烧程序的话一般IO口都是高电平,要让电机转的话需要一高一低,你可以接开发板的VCC和GND试试就会转了 3,蓝牙控制的话需要烧录单片机程序 |
神蜂 发表于 2020-4-12 08:16 谢谢大叔,您诠释了什么叫学无止境 |
yuhui1023 发表于 2020-4-11 23:17 那不急,我50几岁了,搞电器维修的,平时不会打牌,工作之余业余爱好学习单片机打发时间。 刚刚开始学单片机时也是这样,推荐你看看这里的教程,http://www.51hei.com/bbs/dpj-183489-1.html 希望,借51黑电子论坛,让我们单片机技术和你儿子一起成长。 |
神蜂 发表于 2020-4-11 22:40 前面的程序我看的不太懂,但是最后那个中文我烧程序时注意了,都是吻合的 |
game灬boy 发表于 2020-4-11 21:26 你的意思是把程序修改一下试试么,就是把你发的这个插入到括号里是么 |
是不是while()要运行蓝牙发过来的东西 比例: void Remote() { switch(a) { case 0X02: 停车函数 ( ); break; //停车 case 0X00: 前进函数(); break; //前进 } } void main () { InitUART(); while (1) { Remote(); } } 还有波特率9600、主板晶振是不是11.0592 蓝牙的波特率也要设置在9600 |
你先把 in1 in2 in3 in4 直接在main函数中赋值,看电机是否转动 void main () { in1=1; in2=0; in3=1; in4=0; } 然后蓝牙接电脑上面看看收到的手机指令是否正确 |
哪位大佬帮帮忙啊 |
![]() |
/* 蓝牙小车程序 T0产生PWM控制舵机,T1用于串口通信 舵机330hz */ #include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit PWM=P1^0; //舵机控制端口 sbit in1=P2^0; //电机控制端口1 sbit in2=P2^1; //电机控制端口2 sbit in3=P2^2; //电机控制端口3 sbit in4=P2^3; //电机控制端口4 uint time=0,jd; uchar a; void InitUART() //串口初始化 { TMOD = 0x21; PCON = 0x00; SCON = 0x50; TH1 = 0xFD; //T1 波特率9600 TL1 = 0xFD; TR1 = 1; TH0 = 0xFF;//T0 0.01ms TL0 = 0xF6; TR0 = 1; ES = 1; PS = 1; ET0 = 1; EA = 1; } void main () { InitUART(); while (1); } void Time0_Int() interrupt 1 //中断程序 1 { TR0=0; TH0=0xFF; TL0=0xF6; TR0=1; time++; if(time>300) time=0; //303个周期 330hz if (time<=jd) PWM=1; else PWM=0; } void UARTInterrupt () interrupt 4 //中断程序 4 { if(RI==1) { RI = 0; a = SBUF; if (a == '0') //前进 { in1=1; in2=0; in3=1; in4=0; } if (a == '1') //后退 { in1=0; in2=1; in3=0; in4=1; } if (a == '2') //停止 { in1=1; in2=1; in3=1; in4=1; } if(a == '3') //左转 { jd=22; } if(a == '4') //右转 { jd=34; } if(a == '5') //回中 { jd=28; } } } |