完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
搞了一晚的24l01模块,在网上查了好多资料,并没有太多有的的,但也不能全否,看的帖子了解了很多,程序倒是没多少适合新手的,快要抓狂把模块扔一边时,想想不行!人家都一两个礼拜搞定,我得坚持,于是就把原子哥的无线通信视频又看了一遍,,之前遇到的问题是我手里只有一个战舰版,再有就是51板和一个c8t6的小模块板,c8t6小板的引脚少,没有战舰的PG678,我直接改历程的引脚还通信不了(这里有很大问题后来解决,也是关键),然后我就以为引脚不能随意改,就去看芯片的数据手册,看了看也是蒙圈,就开始各种找历程,找了几个全都是工程上的,,,!@#¥%&**,,,,后来我就不信邪,我感觉引脚配置对了应该没问题的,我就把PG789改成了c8t6上有的PB68,PC13,配置都是按原子哥历程的来的,搞了两个程序,一个专门用战舰来接收,一个专门用c8t6发送,不废话了,我最后就是把c8t6发送的程序中,lcd.c给移走了,然后就好使了,战舰上的屏幕一直刷着字符串,然后我就激动的来发个帖子,这肯定是个好开头,我会继续改下去,继续深究,弄到差不多了我在传上来程序,好啦,继续搞起。
|
|
相关推荐
11个回答
|
|
那么问题来了,为什么lcd。c去掉 之后就好使了,是不是lcd里的io没连,程序卡主了,还是什么原因,求解答
|
|
|
|
还有个问题,发送现在是这样的
NRF24L01_TX_Mode(); mode=' ';//′ó¿Õ¸ñ¼ü¿aê¼ while(1) { if(NRF24L01_TxPacket(tmp_buf)==TX_OK) { key=mode; for(t=0;t<32;t++) { key++; if(key>('~'))key=' '; tmp_buf[t]=key; } mode++; if(mode>'~')mode=' '; tmp_buf[32]=0; //¼óèë½áêø·û } } 为什么接收端会无线循环,我在结尾放了break,就不显示了,不放就一直循环,如何设置才能让发送想要的字符,接收应该没有问题 |
|
|
|
我做过一个多设备双向的,不过是基于UCOSIII的,感觉这个24L01还是有一点问题的,接收方如果很快的将数据接收并清除中断和接收FIFO的话,发射方会判定为发送超时、、、按道理都有接收中断出来了,肯定是ACK成功了的,所以这点一直找不到原因,最后只能抛弃传输数据量,幸好是用于传输控制命令而不是传输大数据、、、、以后可以相互交流交流
|
|
|
|
int main(void)
{ delay_init(); //Ñóê±oˉêy3õê¼»ˉ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éèÖÃÖD¶ÏóÅÏ輶·Ö×éÎa×é2£o2λÇàÕ¼óÅÏ輶£¬2λÏìó|óÅÏ輶 uart_init(115200); //′®¿ú3õê¼»ˉÎa115200 LED_Init(); //3õê¼»ˉóëLEDᬽóμÄó2¼t½ó¿ú KEY_Init(); //3õê¼»ˉ°′¼ü NRF24L01_Init(); //3õê¼»ˉNRF24L01 NRF24L01_TX_Mode(); while(1) { NRF24L01_TxPacket("aaa"); delay_ms(500); } } 费劲千辛万苦,一直写好多行函数还用数组去实现发送指定数据,真是走了坎坷路,没想到一行就可以,确实怪我不够仔细,c语言也不够扎实,感觉犯了好低级的错误,幸好偶然发现lcd的显示函数字符串格式和这个是一个类型,继续搞继续搞去l |
|
|
|
现在又遇到问题了,发送端是解决了,但是接收也仅仅是在lcd上显示数据,但是如何判断接收到的消息是什么,这又是一个问题,现在就算是调到接收部分的程序了,如果能判断接收内容,并根据相应的内容去执行别的语句,才算接收部分调好,但是我不太会了,发送部分发送aa字符,NRF24L01_TxPacket("aa");,如何在接收端去判断收到的内容是aa,还是什么别的,我想用switch语句,应该是用数组,怎么用呢,啊啊啊啊啊
|
|
|
|
u8 tmp_buf[2],dd[2]={"aa"},i; 这个定义dd和接收的字符串
if(dd==tmp_buf) i=1; switch(i) { case 1: LED1=0;break; case 2: LED1=0;break; case 3: LED1=0;break; case 4: LED1=0;break; } 这个if好像并未成功,为什么呢,tmp_buf收到的数据是aa字符,我定义dd也为aa字符,想用switch,没有成功,求解 |
|
|
|
#include "string.h" //óÃstrcmp£¬×Ö·û′®±è½Ï
.... u8 tmp_buf[2],aa[5]={"aaaaa"},bb[5]={"bbefg"},cc[2]={"cc"},dd[10]=("dddddeeeee"),i; ..... if(strcmp((const char*)tmp_buf,(const char*)cc)==0) i=3; if(strcmp((const char*)tmp_buf,(const char*)aa)==0) i=1; if(strcmp((const char*)tmp_buf,(const char*)bb)==0) i=2; if(strcmp((const char*)tmp_buf,(const char*)dd)==0) i=4; switch(i) { case 1: LCD_ShowString(30,210,200,16,16,"Received aa"); LED1=0;break; case 2: LCD_ShowString(30,230,200,16,16,"Received bb"); LED1=1;break; case 3: LCD_ShowString(30,250,200,16,16,"Received cc"); LED1=0;break; case 4: LCD_ShowString(30,270,200,16,16,"Received dd"); LED1=1;break; } 昨晚弄好了,但是太晚就没发出来,今天早上又修改了一下,基本弄懂了。也算是掌握了用法基础了,楼下把程序贴出来,这个接受主要是用字符串比较函数,用string。h里的 strcmp函数比较,具体百度就能懂,反正如果字符串相同返回0,判断是0就继续执行就ok,直接在if下运行程序也行,我这样用switch也是美观一些,好了,下一个准备攻克摄像头,加油 |
|
|
|
打包程序,发送用的c8t6,接收用的战舰,战舰有lcd显示,所以用来 接收,也好观测,新学的朋友快去下载测试吧,无线通信实验发送.zip (3.73 MB )
无线通信实验接收.zip (3.8 MB ) |
|
|
|
偶然看到之前的帖子,现在在研究4463,之前的24L01那么通信有点复杂,还得再接收端设置字符串,然后判断接收到的是不是字符串,后来改成直接发送数组的数,我水平差叫不上来名字,有时间把改好的程序发进来
|
|
|
|
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2574 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2367 浏览 5 评论
3220 浏览 3 评论
2842 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2795 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
677浏览 1评论
914浏览 0评论
1035浏览 0评论
677浏览 0评论
509浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 05:49 , Processed in 1.242168 second(s), Total 96, Slave 80 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号