חיבור של מספר מתגים בעזרת מטריצה

ל Arduino יש מספר מוגבל של PINs המשמשים לקלט דיגיטלי, במקרה ויש צורך במספר גדול של מתגים אפשר להשתמש במטריצה.

חיבור מטריצת מתגים ובדיקה של השורות והטורים במטריצה כדי לבדוק איזה מתגים סגורים.
הפתרון הבא הוא עבור 3X4=16 מתגים ודורש 7 = 4+3 פינים:

פינים 3 עד 5 מחוברים לטורים ופינים 6 עד 9 מחוברים לשורות. לכל פין מחוברת דיודה, על-מנת לבטל השפעות הדדיות ביניהם.

תוכנה:

/*
  Key matrix software for 3x4 matrix.
  for demonstration only - sends pressed keys to the PC.
*/

// Output pins:
#define o1 3
#define o2 4
#define o3 5

// Input pins:
#define i1 6
#define i2 7
#define i3 8
#define i4 9

void setup() {
  Serial.begin(9600);
  pinMode (o1, OUTPUT);
  pinMode (o2, OUTPUT);
  pinMode (o3, OUTPUT);
  pinMode (i1, INPUT);
  pinMode (i2, INPUT);
  pinMode (i3, INPUT);
  pinMode (i4, INPUT);

  digitalWrite (o1, LOW);
  digitalWrite (o2, LOW);
  digitalWrite (o3, LOW);
}

void loop() {
  // Check first 4 switches:
  digitalWrite (o1, HIGH);
  if (digitalRead (i1)) { Serial.print ("S1 ");}
  if (digitalRead (i2)) { Serial.print ("S2 ");}
  if (digitalRead (i3)) { Serial.print ("S3 ");}
  if (digitalRead (i4)) { Serial.print ("S4 ");}
  digitalWrite (o1, LOW);

  // Check second 4 switches:
  digitalWrite (o2, HIGH);
  if (digitalRead (i1)) { Serial.print ("S5 ");}
  if (digitalRead (i2)) { Serial.print ("S6 ");}
  if (digitalRead (i3)) { Serial.print ("S7 ");}
  if (digitalRead (i4)) { Serial.print ("S8 ");}
  digitalWrite (o2, LOW);

  // Check last 4 switches:
  digitalWrite (o3, HIGH);
  if (digitalRead (i1)) { Serial.print ("S9 ");}
  if (digitalRead (i2)) { Serial.print ("S10 ");}
  if (digitalRead (i3)) { Serial.print ("S11 ");}
  if (digitalRead (i4)) { Serial.print ("S12 ");}
  digitalWrite (o3, LOW);

  Serial.println();
}

Comments are closed.