关于NRF一次发送多个数组!!

2019-07-20 08:23发布

近日要用nrf发送64个动态的浮点型温度值,把浮点型转换成字符型发过去的话,一共有8个数组要发,
现在主要的问题是,传输距离近的话到没有问题,远一点的话,数据会不一样,这应该是我代码的问
题,不知道要怎么写,才能一次性发这8个数组。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
szczyb1314
1楼-- · 2019-07-20 11:22
原来是32byte发送8次
下面简单点思路做:发送10次,第一次,发送前7个float(28byte)+第一帧ID(4byte),共32byte
                                         第二次,发送接下来7个float(28byte)+第二帧ID(4byte),共32byte
                                         第三次  第四次  第五次 第六次  第七次 第八次  第九次(第九次发完已经发送63个float)
                                         第十次,发送第64个float(4byte),补零(24byte),第十帧ID(4byte)
接受端收到后判断帧ID再存入数组对应的位置,你就知道那个float是第几个了,说的好绕,你好好想想啊
szczyb1314
2楼-- · 2019-07-20 15:51
工程传上来看看
興趣使然
3楼-- · 2019-07-20 20:24
 精彩回答 2  元偷偷看……
興趣使然
4楼-- · 2019-07-20 23:38
szczyb1314 发表于 2018-5-3 08:18
工程传上来看看

[mw_shl_code=c,true]                        if(NRF24L01_RxPacket(tmp_1buf)==0)//一旦接收到信息,则显示出来.
                        {

                                        //数据转换
                                        for(j=0;j<29;j=j+4)
                                        {
                                                temp[k].i[0] =        tmp_1buf[j] ;
                                                temp[k].i[1] =        tmp_1buf[j+1];
                                                temp[k].i[2] =        tmp_1buf[j+2];
                                                temp[k].i[3] =        tmp_1buf[j+3] ;
                                                k++;
                                                if(k==64)k=0;
                                        }
                                        flag++;
                                       
                                        if(flag==8)
                                        {       
                                                for(n=0;n<64;n++)
                                                {
                                                        pixels[m] = temp[n].f;        //将值存放到温度数组里
                                                        m++;
                                                        if(m==64)m=0;
                                                }
                                                printf("%f ",pixels[62]);        //串口打印
                                                flag=0;
                                        }        [/mw_shl_code]
szczyb1314
5楼-- · 2019-07-21 05:12
本帖最后由 szczyb1314 于 2018-5-3 13:29 编辑

研究下24L01数据手册,24L01是不是可以发送多于32byte的数据,如果可以,改下24L01的配置即可,如果不行,
   while(1)
    {
        //将温度值存放到共用体
        for(n=0;n<64;n++)
        {
            temp[n].f = pixels[m];  //将64个温度值存放到共用体数组
            m++;
            if(m==64)m=0;
        }

        //数据转换64个float全部转入tmp_1buf[256]
        for(j=0;j<255;j=j+4)
        {
            tmp_1buf[j]   =  temp[k].i[0];
            tmp_1buf[j+1]  =     temp[k].i[1];
            tmp_1buf[j+2]  =     temp[k].i[2];
            tmp_1buf[j+3]  =     temp[k].i[3];
            k++;
            if(k==64)k=0;
        }
         
        //发数据
        k=0;
        while(k<255)
        {
            if(NRF24L01_TxPacket(&tmp_1buf[k])==TX_OK) //发送成功则发送下一帧
                k = k + 32;   
            else  //发送失败需要重发
                k = k;
        }
        if(k==256)
        {
            GPIO_WriteOutBits(HT_GPIOC,GPIO_PIN_9,RESET);   //全部发送完成熄灭LED1   
        }
          k = 0;  
            
            delay_ms(100);
    }
随便写了写,大概就是这么个意思了,你自己好好组织下,注意逻辑
興趣使然
6楼-- · 2019-07-21 08:17
 精彩回答 2  元偷偷看……

一周热门 更多>