Arduino Mega 2560 LESSON:11 メンブレンスイッチ

提供:yonewiki
2026年10月16日 (金) 00:30時点におけるYo-net (トーク | 投稿記録)による版
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

Arduino Mega 2560に戻る。

概要

 メンブレンスイッチを接続するレッスンです。


 完成図は

完成図


 コードは以下のようなモノ

//www.elegoo.com
//2016.12.9

/* @file CustomKeypad.pde
|| @version 1.0
|| @author Alexander Brevig
|| @contact alexanderbrevig@gmail.com
||
|| @description
|| | Demonstrates changing the keypad size and key values.
|| #
*/
#include <Keypad.h>

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad

//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); 

void setup(){
  Serial.begin(9600);
}
  
void loop(){
  char customKey = customKeypad.getKey();
  
  if (customKey){
    Serial.println(customKey);
  }
}


  • "Keypad.h"

Arduino Mega 2560 LESSON:11 メンブレンスイッチ Keypad.h


  • "Keypad.cpp"

Arduino Mega 2560 LESSON:11 メンブレンスイッチ Keypad.cpp


  • "utility/Key.h"

Arduino Mega 2560 LESSON:11 メンブレンスイッチ Key.h


  • "utility/Key.cpp"

Arduino Mega 2560 LESSON:11 メンブレンスイッチ Key.cpp


 自分でスイッチを使ってメンブレンスイッチの仕組みを利用した2x2のマトリックスを勉強用に作ってみました2x2だと信号線の節約には全くなっていませんが、勉強用ということでやってみました。


 回路図は以下の通り


回路図


 完成図は以下の通り


 コードは以下のとおり


const byte rowPins[2] = {6, 7};
const byte colPins[2] = {2, 3};

void setup() {
  Serial.begin(9600);

  // 外付けプルアップ抵抗を使用するためINPUT
  for (byte r = 0; r < 2; r++) {
    pinMode(rowPins[r], INPUT);
  }

  // 列は最初は高インピーダンス
  for (byte c = 0; c < 2; c++) {
    pinMode(colPins[c], INPUT);
  }
}

void loop() {
  for (byte c = 0; c < 2; c++) {

    // 調査対象の列をLOWにする
    digitalWrite(colPins[c], LOW);
    pinMode(colPins[c], OUTPUT);

    // 2つの行を確認する
    for (byte r = 0; r < 2; r++) {
      if (digitalRead(rowPins[r]) == LOW) {
        byte sw = r * 2 + c + 1;

        Serial.print("SW");
        Serial.println(sw);
      }
    }

    // 列を高インピーダンスに戻す
    pinMode(colPins[c], INPUT);
  }

  delay(200);
}


 PCB図は以下のとおり

PCB図


 3DPreview図は以下のとおり

3DPreview図

 

Arduino Mega 2560に戻る。