这个功能有什么问题?不可分配?

What's wrong with this function? not assignable?

float tempC(unsigned int adc_value) {
    multiplier = adc_value / 1023.0f;
    tempC = -40 * multiplier * 90;
    return tempC;
}

我正在尝试使用微控制器上的 ADC 将电位计转换为 -40 到 50 摄氏度之间的温度,adc_value 是 ADC 给出的范围,但我收到错误消息:

Main.c:110:11: error: non-object type 'float (unsigned int)' is not assignable

如果需要,我可以提供更多代码,但我不知道哪里出错了,因为我对 C 和编程还很陌生。

tempC 是您的函数名称,因此,行:

tempC = -40 * multiplier *90;

正在尝试为函数赋值,但这是不可能的。

到return的值,就是:

return -40 * multiplier *90;

.

float tempC(unsigned int adc_value)
{
    float multiplier = adc_value / 1023.0f;
    return -40 * multiplier * 90;
}

tempC 不是变量而是函数,所以你不能在那里赋值。

你应该声明另一个变量而不是像这样:

float tempC(unsigned int adc_value) {
    float tempC_ret;
    multiplier = adc_value / 1023.0f;
    tempC_ret = -40 * multiplier * 90;
    return tempC_ret;
}

或者您可以像这样直接return计算值:

float tempC(unsigned int adc_value) {
    multiplier = adc_value / 1023.0f;
    return -40 * multiplier * 90;
}

虽然C的语法问题已经解决了,但相信还是有问题 将一个数字范围映射到另一个数字范围的问题。表达式:

tempC = -40 * multiplier * 90;  

总是产生负数,因此不太可能满足您的需求。

映射...
您正在使用 unsigned int。您的代码指示 2 字节变量,使 adc_value 范围从您的 uP 0 - 65535.
输出范围为 -40 到 50
问题是从一个映射到另一个。

鉴于这些范围, ADC 输入开始 0 映射到 -40.0 的输出开始 ADC输入端65535映射到50.0的输出端 输入变化的每一位输出的增量变化是:

float multiplier = 1.0*(50.0f -(-40.0f))/65535;

输出值将是:

-40.0f + multiplier*adc_value; 

这转化为

float tempC(unsigned int adc_value)
{
    double multiplier = 1.0*(50.0f -(-40.0f))/(65535);

    return -40.0f + multiplier * adc_value; 
}