【问题标题】:Concatenating 32 bit integers in C在 C 中连接 32 位整数
【发布时间】:2016-11-24 01:03:03
【问题描述】:

我目前正在开展一个项目,该项目将使用热敏电阻作为温度传感器,并使用 raspberry pi 将这些信息显示在 gui 上。但是我目前停留在模数转换上。使用我正在使用的 waveshare 广告板上的示例代码,我设法获得了要显示的电压,但是我需要在我的分压器方程中使用这个 vout 来获得我的热敏电阻的电阻,我不知道如何实际使用 32 位整数 iTemp 变量并正确转换它,使其成为控制台上显示的实际数字。目前,带有 itemp 的 2 个打印行打印出数字,例如 (1.186 391 V)。这是正确的,但我需要将其转换为实际数字,然后我可以将其插入我的分压器方程。 Ps:我在打印语句中包含了代码的一部分。 任何帮助将不胜感激。

代码:

 while((ADS1256_Scan() == 0));
        for (i = 0; i < ch_num; i++)
        {
            adc[i] = ADS1256_GetAdc(i);
                 volt[i] = (adc[i] * 100) / 167;    
        }

        for (i = 0; i < ch_num; i++)
        {
                    buf[0] = ((uint32_t)adc[i] >> 16) & 0xFF;
                    buf[1] = ((uint32_t)adc[i] >> 8) & 0xFF;
                    buf[2] = ((uint32_t)adc[i] >> 0) & 0xFF;
                    printf("%d=%02X%02X%02X, %8ld", (int)i, (int)buf[0], 
                           (int)buf[1], (int)buf[2], (long)adc[i]);                

                    iTemp = volt[i];    /* uV  */
                    if (iTemp < 0)
                    {
                        iTemp = -iTemp;
                                printf(" (-%ld.%03ld %03ld V) \r\n", iTemp /1000000, (iTemp%1000000)/1000, iTemp%1000);
                    }
                    else
                    {
                                    printf(" ( %ld.%03ld %03ld V) \r\n", iTemp /1000000, (iTemp%1000000)/1000, iTemp%1000);                   
                    }

        }
            //printf("\33[%dA", (int)ch_num);  
        bsp_DelayUS(100000);    
            }   
    bcm2835_spi_end();
    bcm2835_close();

    return 0;
}

【问题讨论】:

  • 什么是实际数字?数学问题在这里吗?是你,不知道iTemp的数字怎么算?
  • 使用他们拥有的 printf 设置正确显示数字。但是我需要创建一个变量,它实际上是那个数字,以便我可以在我的方程中使用它
  • iTemp 目前是否包含 1186392?如果是这样,则可以通过除以1000000.0 来完成转换
  • while((ADS1256_Scan() == 0)); 的正文为空。如果这是有意的,写它会更明确while((ADS1256_Scan() == 0)) continue;
  • 你说得对,我把事情复杂化了。感谢您的帮助

标签: c raspberry-pi concatenation analog-digital-converter


【解决方案1】:

根据您的评论:iTemp = volt[i]; /* uV */,iTemp 读数以微伏为单位。 为了在方程式中使用它,您只需将其转换为伏特(将其转换为 doublefloat 并乘以 (1.0/1000000.0))。

double iTempV = (double)iTemp*1.0e-6;

或:

float iTempV = (float)iTemp*1.0e-6f;

我假设以下公式将 A2D 原始样本值转换为微电压:

adc[i] = ADS1256_GetAdc(i);
volt[i] = (adc[i] * 100) / 167;

我在 GitHub 中找到了以下项目:https://github.com/ecao1/SEADS-Rpi/blob/master/test_ver1.c 来支持我的主张。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 2013-09-18
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多