在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个字节?它不应该减轻重量吗?
答案 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);