【问题标题】:Why are these two values not equal on arduino?为什么这两个值在 arduino 上不相等?
【发布时间】:2014-01-09 20:22:30
【问题描述】:

我正在制作一个小的 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。

提前感谢您的帮助。

【问题讨论】:

    标签: c++ c arduino led


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您应该考虑到,在 C 中,char 只不过是 int 的别名,因此将 char 转换为 int 是无操作的。所以问题是你正在将字符'1'或'0'转换为其等效的int(实际上是它的ascii代码)。您应该将 char 转换为有效的 int(通过将 48 减去 48 到 48 - 57 范围内的 char 以获得 char 的十进制转换)或简单地检查它与 char 值(所以myStr[i-2] == '1'

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-19
        • 2019-10-22
        • 1970-01-01
        • 1970-01-01
        • 2021-12-11
        • 1970-01-01
        相关资源
        最近更新 更多