注册 登录
查看: 667|回复: 6

[电磁组] Visual Scope使用问题!

[复制链接]
发表于 2014-6-1 15:59:54 | 显示全部楼层 |阅读模式
我用NRF24L01+进行无线传输。然后把电脑与无线调试器相连。无线调试器接收到的函数是:relen = nrf_rx(nrf_rx_buff,128); 。但是想用visual scope看波形。visual scope的函数是:VisualScope_Output(num1, num2, num3, num4);num1是float型的,怎样修改代码啊?谢谢大家了!
接收代码为: while(1)    {
      relen = nrf_rx(nrf_rx_buff,128);               //等待接收一个数据包,数据存储在buff里
        if(relen != 0)
        {         
          printf("%s",nrf_rx_buff);             //打印接收到的数据   
          num1 = atof(nrf_rx_buff);         
          VisualScope_Output(num1, num2, num3, num4);
          }

   }

visual scope代码为:void VisualScope_Output(float data1 ,float data2 ,float data3 ,float data4){
    int temp[4] = {0};
    unsigned int temp1[4] = {0};
    unsigned char databuf[10] = {0};
    unsigned char i;
    unsigned short CRC16 = 0;
    temp[0] = (int)data1;
    temp[1] = (int)data2;
    temp[2] = (int)data3;
    temp[3] = (int)data4;
    temp1[0] = (unsigned int)temp[0];
    temp1[1] = (unsigned int)temp[1];
    temp1[2] = (unsigned int)temp[2];
    temp1[3] = (unsigned int)temp[3];
    for(i=0;i<4;i++)
    {
    databuf[i*2] = (unsigned char)(temp1[i]%256);
    databuf[i*2+1] = (unsigned char)(temp1[i]/256);
    }
    CRC16 = CRC_CHECK(databuf,8);
    databuf[8] = CRC16%256;
    databuf[9] = CRC16/256;
    for(i=0;i<10;i++) //可以修改,提高效率
    {
    uart_putchar(UART3,databuf[i]);
    }
}

回复

使用道具 举报

发表于 2014-6-1 16:04:54 | 显示全部楼层
float 在内存上也是二进制数据嘛,所以直接定义一个缓冲区,把flaot指向缓冲区的不同地址,然后无线发送的时候发送缓冲区,然后接收端接收到数据后,直接从缓冲区里读取回来
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-1 16:08:25 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-1 16:04
float 在内存上也是二进制数据嘛,所以直接定义一个缓冲区,把flaot指向缓冲区的不同地址,然后无线发送的时 ...

我找了一下,有这个函数atof
函数名: atof
功 能: 把字符串转换成浮点数
名字来源:ascii to floating point numbers 的缩写
用 法: double atof(const char *nptr);
但是用这个不行啊!提示这个:Warning[Pe167]: argument of type "unsigned char *" is incompatible with parameter of type "char const *"
回复 支持 反对

使用道具 举报

发表于 2014-6-1 16:22:35 | 显示全部楼层
活出自我 发表于 2014-6-1 16:08
我找了一下,有这个函数atof
函数名: atof
功 能: 把字符串转换成浮点数

为什么要转换为字符串格式呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-1 16:37:39 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-1 16:22
为什么要转换为字符串格式呢?

现在接收到的“nrf_rx_buff”为字符串。但是我想要的是浮点型。所以找了这个函数。
根据山外哥哥二楼的建议。我现在这样改代码行不行啊?
核心板发送端:uint16 AD[0];//需要发送的数据为AD[0]
              unsigned char *p;//此处定义一个指针变量
              p = &AD[0];//把AD[0];的地址给p
             AD_nrf_tx_buff = p;
             nrf_tx(AD_nrf_tx_buff,32); //发送指针
             while(nrf_tx_state() == NRF_TXING);         //等待发送完成

无线调试器接收端:relen = nrf_rx(nrf_rx_buff,32); //等待接收一个数据包,数据存储在nrf_rx_buff里
        if(relen != 0)
        {         
          num1 = *(nrf_rx_buff);         
          VisualScope_Output(num1, num2, num3, num4);     
         }

肯定有不少错误,麻烦山外哥哥解答一下!谢谢了!
            
回复 支持 反对

使用道具 举报

发表于 2014-6-15 15:36:12 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-1 16:04
float 在内存上也是二进制数据嘛,所以直接定义一个缓冲区,把flaot指向缓冲区的不同地址,然后无线发送的时 ...

是直接定义一个float的缓冲区buff么 但是在nrf_tx(buff,DATA_PACKET); 的时候就报错了   与nrf_tx这个函数里的形参不对啊
回复 支持 反对

使用道具 举报

发表于 2014-6-17 23:47:02 | 显示全部楼层
虚拟示波器的发送代码是我修改过的,
回复 支持 反对

使用道具 举报

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

本版积分规则

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