这个功能有什么问题?不可分配?
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;
}
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;
}