在arduino上同时读取簧片开关

时间:2018-04-05 09:26:12

标签: arduino switch-statement keypad

我想同时控制3x3簧片开关。这是我的草图。

enter image description here

我的Arduino代码是这样的;

const byte rows = 3;
const byte cols = 3;

byte rowPins[rows] = {3, 4, 5};
byte colPins[cols] = {7, 8, 9};

char keys[rows][cols] = {
  {'1', '2', '3'},
  {'4', '5', '6'},
  {'7', '8', '9'},
};


int result[rows][cols] = {0, 0, 0, 0, 0, 0, 0, 0, 0};

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);


  pinMode(13, OUTPUT);
  for (int i = 0 ; i < rows; i++) {
    pinMode(rowPins[i], OUTPUT); //3,4,5 에서 OUTPUT 을 차례대로 준다음에 7,8,9 에서 읽으면됨 ㅎㅎ 외부 풀다운 구현
    digitalWrite(rowPins[i], LOW); //처음에 0v 를 준다.
  }
  for (int i = 0; i < cols; i++) {
    pinMode(colPins[i], INPUT);   }

}

void loop() {
  char val = '\0';
  // put your main code here, to run repeatedly:

  digitalWrite(13, HIGH);
  for (int i = 0; i < rows ; i++) { //0,1,2 차례대로 output 을 준다.
    digitalWrite(rowPins[i], HIGH); // 처음에 3번핀에서만 5V를 준다

    for (int j = 0 ; j < cols ; j++) {
      if (!digitalRead(colPins[j])) {
        result[i][j] = 0;
      }
      else {
        val = keys[i][j];
        Serial.println(val);
        result[i][j] = 1;
      }
    }
    digitalWrite(rowPins[i], LOW); //다시 잠가줌

  }


  for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3 ; j++) {
      Serial.print(result[i][j] );
    }
    Serial.println("");
  }
  Serial.println("-----------------------------------");
  delay(500);

}
似乎工作得很好。但我发现当我把磁力放在像这样的圆柱中时  1 0 0  1 0 0  0 0 0 最初我想要我的电脑给我这样的节目。但它只显示我0。

如果我这样放置它 M 0 0 0 M 0 0 0 0 它告诉我 1 0 0 0 1 0 0 0 0 它完美地运作。如果您知道问题,请告诉我

1 个答案:

答案 0 :(得分:0)

根据原理图,您可以在列上使用电阻而不是行。如果开关关闭,您需要将每行拉低并监视高电平。此外,您不能将非活动列保留为输出;而不是将它们从高切换到低,您需要将它们更改为输入。如果不这样做,您可以轻松地创建短路。最后,通过将它们设置为输入,您现在可以在行和列中检测到多个已关闭的开关。