Я делаю маленький Arduino двоичный калькулятор.
У меня есть код запустить небольшую математическую задачу: ✓
Я преобразовываю ответ из десятичной в двоичную: ✓
Я перебираю двоичный ответ с помощью цикла for и включаю светодиоды на макете, чтобы отобразить ответ: ✗
//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.
Заранее спасибо за помощь.
int()
Скорее всего, обращение не делает то, что вы думаете. Он не преобразует значение из числовой строки в двоичное значение. Вместо этого вы, вероятно, захотите проверить, являются ли значения в строке цифрами ascii.
if(myStr[i - 2] == '1')
// ^^^ single quotes to specify character value.
{
digitalWrite(int(i), HIGH);
}
else
{
Serial.println(myStr[i - 2]);
}
Вы должны учесть, что в C char — это не что иное, как псевдоним int, поэтому приведение char к int является неоправданным. Таким образом, проблема в том, что вы приводите символ «1» или «0» к его эквиваленту int (на самом деле это код ascii). Вы должны преобразовать символ в действительное целое число (вычитая 48 в символ в диапазоне 48 — 57, вы получите десятичное преобразование символа) или просто сравнив его со значением символа (так myStr[i-2] == '1'
)