为什么这两个值在arduino上不相等?

时间:2014-01-09 20:22:30

标签: c++ c arduino led

我正在制作一个小型的arduino二进制计算器。

我的代码运行了一些小数学问题:✓

我将答案从十进制转换为二进制:✓

我通过for循环遍历二进制答案并在面包板上打开LED电源以显示答案:✗

//First led in pin 2
void setup()
{
  Serial.begin(9600);
}
//I have the code run some little math problem:Check
int a=2;
int b=5;
int answer=b-a;


int myNum = answer;
void loop(){
//I convert the answer from decimal to binary:Check
int zeros = 8 - String(myNum,BIN).length();
String myStr;
for (int i=0; i<zeros; i++) {
    myStr = myStr + "0";
}
myStr = myStr + String(myNum,BIN);         
Serial.println(myStr);

//I loop through the binary answer with a for loop 
//and power on LEDs on a bread board to display the answer:Not check

for(int i=2;i<=9;i=i+1){

//This part doesn't work

if(int(myStr[i-2])==1){
        digitalWrite(int(i), HIGH);
    }else{Serial.println(myStr[i-2]);}
}
while(true){}
}

由于某种原因,它说int(myStr [i-2])永远不会等于1。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

int()转换可能不会按照您的想法执行。它不会将数值字符串中的值转换为二进制值。相反,您可能想要检查字符串中的值是否为ascii数字。

if(myStr[i - 2] == '1')
//                 ^^^ single quotes to specify character value.
{
    digitalWrite(int(i), HIGH);
}
else
{
    Serial.println(myStr[i - 2]);
}

答案 1 :(得分:0)

你应该考虑在C中,char只不过是一个int的别名,所以将一个char转换为int是一个无操作。所以问题是你将字符'1'或'0'转换为它的int等价物(事实上它的ascii代码)。你应该将char转换为有效的int(通过将48减去48到57范围内的char来获得char的十进制转换)或者只是根据char值进行检查(所以myStr[i-2] == '1'