我正在Atmel Studio 6.2中对我的机器人进行编程,我正在编写一个函数来返回白色表面上黑线的位置,我的机器人可以使用8个模拟光传感器检测到该位置。我已经彻底研究了C#中变量的范围,但是,我无法弄清楚我在下面这段非常简单的代码中做错了什么或误解了。调用下面的函数时,
这有效:
char linePosDigital(int threshold)
{
char linePos = 0;
if(analog_read(0) < threshold) linePos += pow(2, 0);
if(analog_read(1) < threshold) linePos += pow(2, 1);
if(analog_read(2) < threshold) linePos += pow(2, 2);
if(analog_read(3) < threshold) linePos += pow(2, 3);
if(analog_read(4) < threshold) linePos += pow(2, 4);
if(analog_read(5) < threshold) linePos += pow(2, 5);
if(analog_read(6) < threshold) linePos += pow(2, 6);
if(analog_read(7) < threshold) linePos += pow(2, 7);
return linePos;
}
这不起作用:
char linePosDigital(int threshold)
{
char linePos = 0;
for(int i=0; i<8; i++)
{
if(analog_read(i) < threshold) linePos += pow(2, i);
}
return linePos;
}
我需要使各种功能与上面的功能有些类似,我需要能够使用for循环。经过几个小时的研究后,我仍然不知道为什么第二个提到的功能不起作用。
非常需要帮助和赞赏! (:
编辑:这是我的新MWE(您需要更改打印和延迟命令以及删除库,对不起)。 linePosDigital1输出正确答案,而linePosDigital2输出错误答案:#include <pololu/orangutan.h>
char linePosDigital1(int n[8], int threshold)
{
char linePos = 0;
if(n[0] < threshold) linePos += pow(2, 0);
if(n[1] < threshold) linePos += pow(2, 1);
if(n[2] < threshold) linePos += pow(2, 2);
if(n[3] < threshold) linePos += pow(2, 3);
if(n[4] < threshold) linePos += pow(2, 4);
if(n[5] < threshold) linePos += pow(2, 5);
if(n[6] < threshold) linePos += pow(2, 6);
if(n[7] < threshold) linePos += pow(2, 7);
return linePos;
}
char linePosDigital2(int n[8], int threshold)
{
char linePos = 0;
for(int i=0; i<8; i++)
{
if(n[i] < threshold) linePos += pow(2, i);
}
return linePos;
}
int main()
{
int n[8];
n[0] = 800;
n[1] = 800;
n[2] = 800;
n[3] = 800;
n[4] = 800;
n[5] = 800;
n[6] = 200;
n[7] = 200;
while(1)
{
clear();
print_binary(linePosDigital1(n, 650));
delay(1000);
clear();
print_binary(linePosDigital2(n, 650));
delay(1000);
}
}
n是一个静态数字,在这种情况下代表来自我的传感器的实际输入。
答案 0 :(得分:0)
大家好,我终于解决了这个问题。我创建了一个函数来确定p ^ q并用内置函数pow()代替它。这解决了这个问题,所以我觉得pow()函数出了问题 - 我仍然觉得非常奇怪,特别是因为它是C(++)的一部分,我想?无论如何:非常感谢你的帮助和耐心! :)