だから私はブレッドボード、4つのスイッチ、3つのLEDとArduinoを使って2ビットの加算器を作ることを任されました。問題は、(少なくとも私のコードでは)競合する2つのことを加算器が実行することです。1つ目は、1つのスイッチをオンにすると1つのライト(001)しか点灯しないことです。 00、これは1つのスイッチだけがオンになることを意味し、(私のコードが述べているように)それはちょうど中間のもの(010)ではなく両方に対応するライトをつけることになります。私はそれが私のifステートメントの最初のビットと関係があるという事実を知っています、ここにコードがあります:
int A0Pin = 12;
int A1Pin = 11;
int B0Pin = 10;
int B1Pin = 9;
int LED0Pin = 6;
int LED1Pin = 5;
int LED2Pin = 4;
void setup()
{
pinMode(A0Pin, INPUT);
pinMode(A1Pin, INPUT);
pinMode(B0Pin, INPUT);
pinMode(B1Pin, INPUT);
pinMode(LED0Pin, OUTPUT);
pinMode(LED1Pin, OUTPUT);
pinMode(LED2Pin, OUTPUT);
}
void loop()
{
int b1Value = digitalRead(A0Pin);
int b2Value = digitalRead(A1Pin);
int b3Value = digitalRead(B0Pin);
int b4Value = digitalRead(B1Pin);
digitalWrite(LED0Pin, LOW);
digitalWrite(LED1Pin, LOW);
digitalWrite(LED2Pin, LOW);
if (b1Value == HIGH)
{
digitalWrite(LED0Pin,HIGH);
digitalWrite(LED1Pin,LOW);
digitalWrite(LED2Pin,LOW);
}
if (b2Value == HIGH)
{
digitalWrite(LED0Pin,HIGH);
digitalWrite(LED1Pin,LOW);
digitalWrite(LED2Pin,LOW);
}
if (b3Value == HIGH)
{
digitalWrite(LED0Pin,HIGH);
digitalWrite(LED1Pin,LOW);
digitalWrite(LED2Pin,LOW);
}
if (b4Value == HIGH)
{
digitalWrite(LED0Pin,HIGH);
digitalWrite(LED1Pin,LOW);
digitalWrite(LED2Pin,LOW);
}
if(b1Value == HIGH && b3Value == HIGH )
{
digitalWrite(LED0Pin,LOW);
digitalWrite(LED1Pin,HIGH);
digitalWrite(LED2Pin,LOW);
}
if(b2Value == HIGH && b4Value == HIGH )
{
digitalWrite(LED0Pin,LOW);
digitalWrite(LED1Pin,LOW);
digitalWrite(LED2Pin,HIGH);
}
if(b2Value == HIGH && b3Value == LOW && b4Value == LOW)
{
digitalWrite(LED0Pin,LOW);
digitalWrite(LED1Pin,HIGH);
digitalWrite(LED2Pin,LOW);
}
if(b1Value == LOW && b2Value == LOW && b4Value == HIGH)
{
digitalWrite(LED0Pin,LOW);
digitalWrite(LED1Pin,HIGH);
digitalWrite(LED2Pin,LOW);
}
if(b1Value == HIGH && b2Value == HIGH)
{
digitalWrite(LED0Pin,HIGH);
digitalWrite(LED1Pin,HIGH);
digitalWrite(LED2Pin,LOW);
}
if(b3Value == HIGH && b4Value == HIGH)
{
digitalWrite(LED0Pin,LOW);
digitalWrite(LED1Pin,HIGH);
digitalWrite(LED2Pin,LOW);
}
if(b1Value == HIGH && b2Value == HIGH && b4Value == HIGH)
{
digitalWrite(LED0Pin,LOW);
digitalWrite(LED1Pin,LOW);
digitalWrite(LED2Pin,HIGH);
}
if(b2Value == HIGH && b4Value == HIGH && b2Value == HIGH)
{
digitalWrite(LED0Pin,LOW);
digitalWrite(LED1Pin,LOW);
digitalWrite(LED2Pin,HIGH);
}
if(b1Value == HIGH && b2Value == HIGH && b3Value == HIGH)
{
digitalWrite(LED0Pin,HIGH);
digitalWrite(LED1Pin,LOW);
digitalWrite(LED2Pin,HIGH);
}
if(b3Value == HIGH && b4Value == HIGH && b1Value == HIGH)
{
digitalWrite(LED0Pin,HIGH);
digitalWrite(LED1Pin,LOW);
digitalWrite(LED2Pin,HIGH);
}
if(b1Value == HIGH && b2Value ==
HIGH && b3Value == HIGH && b4Value == HIGH)
{
digitalWrite(LED0Pin,LOW);
digitalWrite(LED1Pin,HIGH);
digitalWrite(LED2Pin,HIGH);
}
delay(10);
}
最適化の欠如を言い訳してください(それは私が問題を解明した後に来ることができます)、最適化についてのどんな助けも大いに感謝されるでしょう、しかし今のところ私はちょうど01 + 00 don ' 1つのスイッチだけがオンになっているために混乱してしまい、両方のライトがオンになっているか1つだけになっていますが、誤っています。私はTinkercadでそれを作りました:
回路図:

01 + 01 = 010

最初のスイッチだけ(01 + 00 = 001)

2つ目のスイッチを入れるだけで、10 + 00 = 010と誤解された(またはその逆)
