OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4732|回复: 9

[战舰F103] 战舰V3接NRF24L01模块实现按键无线控制板子LED测试程序

[复制链接]

109

主题

5554

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10424
金钱
10424
注册时间
2017-2-18
在线时间
1884 小时
发表于 2018-12-4 22:02:11 | 显示全部楼层 |阅读模式
本帖最后由 peng1554 于 2018-12-4 22:10 编辑

论坛有用户想用战舰V3板子上的按键实现通过NRF24L01模块无线控制板子LED
http://www.openedv.com/forum.php ... 62&page=1#pid908290
因为不想改按键扫描函数,所以实现的是:
1.当发送模块所在的板子按下KEY0后,接收方板子的DS0灯变化状态
2.当发送模块所在的板子按下KEY1后,接收方板子的DS1灯变化状态
3.当发送模块所在的板子按下KEY2后,接收方板子的DS0+DS1灯一起变化状态
要求准备两个NRF24L01模块和两战舰V3板子,模块分别接在板子左上角的WIRELESS接口
测试程序基于战舰V3的无线通信实验例程修改,NRF24L01驱动程序和按键扫描程序没做修改
整个工程最重要的是收发模块对KEY0 ,KEY1,KEY2的处理
main函数中通过while(1)循环来选择模块是发送还是接收模式
[mw_shl_code=c,true]         while(1)
        {        
                key=KEY_Scan(0);
                if(key==KEY0_PRES)
                {
                        mode=0;   
                        break;
                }else if(key==KEY1_PRES)
                {
                        mode=1;
                        break;
                }
                t++;
                if(t==100)LCD_ShowString(10,150,230,16,16,"KEY0:RX_Mode  KEY1:TX_Mode"); //闪烁显示提示信息
                 if(t==200)
                {        
                        LCD_Fill(10,150,230,150+16,WHITE);
                        t=0;
                }
                delay_ms(5);         
        } [/mw_shl_code]
如果处于接收模式则执行接收部分的代码,如果处于发送模式则执行发送部分的代码
接收和发送部分代码如下:
[mw_shl_code=c,true]        if(mode==0)//RX模式
        {
                LCD_ShowString(30,150,200,16,16,"NRF24L01 RX_Mode");        
                LCD_ShowString(30,170,200,16,16,"Received DATA:");        
                NRF24L01_RX_Mode();                                //设置模块为接收模式
                while(1)
                {                                                                                   
                        if(NRF24L01_RxPacket(receive_buf)==0)//一旦接收到信息,则显示出来.
                        {
                                for(i=0;i<34;i++)                                //解析接收到的数据
                                {
                                        if(receive_buf==49)                //解析KEY0
                                        {
                                                j=receive_buf;                                                
                                                LED0=!LED0;        
                                        }
                                        if(receive_buf==50)                //解析KEY1
                                        {
                                                j=receive_buf;                                
                                                LED1=!LED1;
                                        }                                                
                                        if(receive_buf==51)                //解析KEY2
                                        {
                                                j=receive_buf;                        
                                                LED0=!LED0;
                                                LED1=!LED1;
                                        }
                                }
                                LCD_ShowString(30,190,lcddev.width-1,32,16,"Received data is:");
                                LCD_ShowString(30,220,lcddev.width-1,32,16,receive_buf);
                                                        
                        }                              
                };        
        }else//TX模式
        {                                                            
                LCD_ShowString(30,150,200,16,16,"NRF24L01 TX_Mode");        
                NRF24L01_TX_Mode();  
                while(1)
                {        key_val=KEY_Scan(0);
                        if(key_val==KEY0_PRES)                        //对KEY0的处理
                        {
                                send_buf[0]=49;
                                NRF24L01_TxPacket(send_buf);
                        }
                        if(key_val==KEY1_PRES)                        //对KEY1的处理
                        {
                                send_buf[0]=50;
                                NRF24L01_TxPacket(send_buf);

                        }else if(key_val==KEY2_PRES)        //对KEY2的处理
                        {
                                send_buf[0]=51;
                                NRF24L01_TxPacket(send_buf);
                        }                                                   
                };
        } [/mw_shl_code]


战舰V3接NRF24L01模块实现按键无线控制板子LED测试程序.rar

2.83 MB, 下载次数: 536

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2018-12-14
在线时间
14 小时
发表于 2019-2-10 22:18:25 | 显示全部楼层
回复 支持 反对

使用道具 举报

109

主题

5554

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10424
金钱
10424
注册时间
2017-2-18
在线时间
1884 小时
 楼主| 发表于 2019-2-12 11:46:10 | 显示全部楼层
你用的原子的F1板子的话就两个战舰板子+液晶和两个24L01模块就行了
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2017-11-17
在线时间
14 小时
发表于 2019-3-14 21:17:20 | 显示全部楼层
peng1554 发表于 2019-2-12 11:46
你用的原子的F1板子的话就两个战舰板子+液晶和两个24L01模块就行了

非常好,向你学习!
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-3-17
在线时间
2 小时
发表于 2019-3-17 14:11:59 | 显示全部楼层
麻烦请问一下 怎么加4个按键 需要修改哪一块 而且我想用两个NRF模块 一个收 一个发 不用按键确认收发模式
回复 支持 反对

使用道具 举报

1

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2019-4-18
在线时间
32 小时
发表于 2019-6-5 14:36:27 | 显示全部楼层
本帖最后由 daisy111 于 2019-6-5 14:59 编辑

赞!!!!!
回复 支持 反对

使用道具 举报

1

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2019-4-18
在线时间
32 小时
发表于 2019-6-5 16:27:22 | 显示全部楼层
本帖最后由 daisy111 于 2019-6-5 16:30 编辑

自己也改了一个 无线控制步进电机的,只是测试了一下,功能:步进电机顺时针转动和暂停,开发板是407的,谢谢楼主!!!

NRF24L01无线控制步进电机实验.rar

3.98 MB, 下载次数: 49

回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2019-7-8
在线时间
21 小时
发表于 2019-7-25 17:05:46 | 显示全部楼层
daisy111 发表于 2019-6-5 16:27
自己也改了一个 无线控制步进电机的,只是测试了一下,功能:步进电机顺时针转动和暂停,开发板是407的, ...

请问 你这不用给pwm波步进电机就能动么?  我 是个小白,大佬 体谅下哈
就靠着个么?void MotorCW(void)
{
  u8 i;
        for(i=1;i<5;i++)
        {
                switch(i)
                {
                        case 1:
                        GPIO_SetBits(GPIOA,GPIO_Pin_0);
                        GPIO_ResetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_5|GPIO_Pin_7);
                        delay_ms(5);//×&ordf;&Euml;&Ugrave;&micro;÷&frac12;&Uacute;
                        break;
                       
                        case 2:
                        GPIO_SetBits(GPIOA,GPIO_Pin_1);
                        GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_5|GPIO_Pin_7);
                        delay_ms(5);//×&ordf;&Euml;&Ugrave;&micro;÷&frac12;&Uacute;
                        break;       
                       
                        case 3:
                        GPIO_SetBits(GPIOA,GPIO_Pin_5);
                        GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_7);
                        delay_ms(5);//×&ordf;&Euml;&Ugrave;&micro;÷&frac12;&Uacute;
                        break;       
                       
                        case 4:
                        //i=1;       
                        GPIO_SetBits(GPIOA,GPIO_Pin_7);
                        GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_5);
                        delay_ms(5);//×&ordf;&Euml;&Ugrave;&micro;÷&frac12;&Uacute;
                        break;       
                }
        }
}
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2018-11-8
在线时间
5 小时
发表于 2019-8-4 17:33:22 | 显示全部楼层
jjjjj 发表于 2019-7-25 17:05
请问 你这不用给pwm波步进电机就能动么?  我 是个小白,大佬 体谅下哈
就靠着个么?void MotorCW(void ...

要驱动
回复 支持 反对

使用道具 举报

1

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2019-4-18
在线时间
32 小时
发表于 2019-9-18 09:36:54 | 显示全部楼层
jjjjj 发表于 2019-7-25 17:05
请问 你这不用给pwm波步进电机就能动么?  我 是个小白,大佬 体谅下哈
就靠着个么?void MotorCW(void ...

模拟pwm  不是用的定时器配置出来的PWM
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-4-19 13:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表