我正在制作一个小型的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。
提前感谢您的帮助。
答案 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'
)