内外功能相同的操作结果不同

时间:2015-02-04 11:23:28

标签: arduino arduino-uno

loop()循环中,我使用以下代码来从模拟输入中获取值(它运行良好):

int temperatura = (int) odczytajTemperature();

功能odczytajTemperature()

float odczytajTemperature(){
  return  ((analogRead(termometr)*5/1024.0) - 0.5) / 0.01;
}

...但是当我尝试避免使用此功能时,我只是直接在loop()中计算值(如下所示),我得到随机值。

int temperatura = (int) ((analogRead(termometr)*5/1024.0) - 0.5) / 0.01;

这两段代码之间的实际区别是什么?为什么没有功能版本,为什么整个程序的总大小要大2个字节?它不应该减轻重量吗?

1 个答案:

答案 0 :(得分:1)

转换为(int)会出现问题。

你的函数odczytajTemperature()返回一个浮点数,所有的算术运算都是以浮点形式完成的,这一切都很好。

但是当你做的时候

int temperatura = (int) ((analogRead(termometr)*5/1024.0) - 0.5) / 0.01;

您正在将第一部分转换为int

(int) ((analogRead(termometr)*5/1024.0) - 0.5)

然后将你的int除以0.01。这有时可能是有效的事情,但它与odczytajTemperature()的作用有所不同。

这是odczytajTemperature()的忠实替代品:

int temperatura = (int) (((analogRead(termometr)*5/1024.0) - 0.5) / 0.01);