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

提供:yonewiki
2026年10月16日 (金) 17:57時点における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にする(GNDにつなぐ)
    //c=0のときSW1とSW3を調べる。
    //c=1のときSW2とSW4を調べる。
    digitalWrite(colPins[c], LOW);
    pinMode(colPins[c], OUTPUT);

    // 2つの行を確認する
    for (byte r = 0; r < 2; r++) {
      //c=0のときr=0でSW1の回路を確認、r=1でSW3を確認
      //c=1のときr=0でSW2の回路を確認、r=4でSW3を確認
      if (digitalRead(rowPins[r]) == LOW) {
        byte sw = r * 2 + c + 1;//swはスイッチ番号を生成する数式の結果を受け取る。

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

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

  delay(200);
}


 上記のコードは1と2と3を押すと4も検出されるゴーストつまりゴースティング(Ghosting)が発生します。このときの4はファントムキー(Phantom Key)と呼ばれています。最初のコードで使っているKeypad.hのライブラリでは一番最初に押されたキーを検出するキーブロッキング/ジャミングを行って、アンチゴースティングを構築しています。今回は基本的なマトリックススイッチを勉強するためのコードなので、アンチゴースティングを実施しないコードであえて実験しました。


 PCB図は以下のとおり

PCB図


 3DPreview図は以下のとおり

3DPreview図

 

Arduino Mega 2560に戻る。