Конкатенация 32-битных целых чисел в C

В настоящее время я работаю над проектом, который будет использовать термистор в качестве датчика температуры и отображать эту информацию среди прочего на графическом интерфейсе с помощью Raspberry Pi. Однако в настоящее время я застрял на аналого-цифровом преобразовании. Используя пример кода с доски объявлений wavehare, который я использую, мне удается отобразить отображаемое напряжение, однако затем мне нужно использовать это значение в уравнении делителя напряжения, чтобы получить сопротивление моего термистора, и я не могу понять, как фактически используйте 32-битную целочисленную переменную iTemp и правильно конвертируйте ее так, чтобы ее фактическое число отображалось на консоли. В настоящее время 2 строки печати с помощью функции itemp распечатывают такие числа, как (1,186 391 В). это правильно, но мне нужно преобразовать это в фактическое число, которое я могу затем включить в свое уравнение делителя напряжения. 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;
}

1 ответ

Согласно вашему комментарию: iTemp = volt[i]; /* uV */Чтение iTemp в микровольтах. Чтобы использовать его в уравнении, все, что вам нужно сделать, это преобразовать его в вольт (преобразовать в double или же float и умножить на (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 чтобы поддержать мою заявку.

Другие вопросы по тегам