Arduino编程

Arduino programming

这是我的代码。如果继电器 1 打开则不要关​​闭继电器 2,如果继电器 2 打开则不要关​​闭继电器 1。我一次只能打开一个继电器。我想要这样,如果继电器 1 打开,则不要关闭继电器 2,反之亦然。

int D0=1; //Data pins 0 of DTMF Decoder int D1=2; //Data pins 1 of
DTMF Decoder int D2=3; //Data pins 2 of DTMF Decoder int D3=4; //Data
pins 3 of DTMF Decoder int Relay1  =  13; int Relay2 = 12;

void setup() {
  pinMode(Relay1, OUTPUT);
  digitalWrite(Relay1, HIGH);
  pinMode(Relay2, OUTPUT);
  digitalWrite(Relay2, HIGH);
  }

void loop()  {
  // When 0 pressed : 0 0 0 0 (Turning all the relays to off state
  // When 1 pressed : 0 0 0 1
  if (digitalRead(D3)==0 && digitalRead(D2)==0 && digitalRead(D1)==0 && digitalRead(D0)==1 ) {
    digitalWrite(Relay1, HIGH); // Turning the Relay1 ON state
    delay(200);
  }
  if (digitalRead(D3)==0 && digitalRead(D2)==0 && digitalRead(D1)==1 && digitalRead(D0)==0) {
    digitalWrite(Relay1, LOW);
    delay(200);
  }
  if (digitalRead(D3)==0 && digitalRead(D2)==1 && digitalRead(D1)==0 && digitalRead(D0)==0) {
    digitalWrite(Relay2, HIGH); // Turning the Relay2 ON state
    delay(200);
  }
  if (digitalRead(D3)==0 && digitalRead(D2)==1 && digitalRead(D1)==0 && digitalRead(D0)==1) {
    digitalWrite(Relay2, LOW);
    delay(200);
  }
}

将您的逻辑替换为连续读取并检查以读取一次并检查。这适用于我创建的测试设置(只有 4 个按钮和 2 个 LED)。

void setup() {
  pinMode(Relay1, OUTPUT);
  pinMode(Relay2, OUTPUT);
  pinMode(D0, INPUT);
  pinMode(D1, INPUT);
  pinMode(D2, INPUT);
  pinMode(D3, INPUT);

  digitalWrite(Relay1, HIGH);
  digitalWrite(Relay2, HIGH);
}

void loop() {
  byte DTMF_data = 0x00;
  DTMF_data = (digitalRead(D3) << 3) |  (digitalRead(D2) << 2) | (digitalRead(D1) << 1) | (digitalRead(D0) << 0);

  switch(DTMF_data) // Cases based on previous `if` conditions
  {
    case 1: // 0 0 0 1
      digitalWrite(Relay1, HIGH);
      delay(200);
      break;
    case 2: // 0 0 1 0
      digitalWrite(Relay1, LOW);
      delay(200);
      break;
    case 4: // 0 1 0 0
      digitalWrite(Relay2, HIGH);
      delay(200);
      break;
    case 5: // 0 1 0 1
      digitalWrite(Relay2, LOW);
      delay(200);
      break;
  }
}