Created
June 7, 2019 19:10
-
-
Save PJZ9n/137a9db1f0f2397543f4792455071e1c to your computer and use it in GitHub Desktop.
キーマトリクスの処理
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* キーマトリクスを使ってみる 2019.06.08 | |
* | |
* 1□2□3□ | |
* 4□5□6□ | |
* 7□8□9□ | |
* | |
* MEMO: プルアップとプルダウンは異なる | |
*/ | |
/* ピン定数 */ | |
const int COL_1 = 2;//1列目 | |
const int COL_2 = 3;//2列目 | |
const int COL_3 = 4;//3列目 | |
const int ROW_1 = 8;//1行目 | |
const int ROW_2 = 9;//2行目 | |
const int ROW_3 = 10;//3行目 | |
/* 状態変数 */ | |
//HACK; 配列でも良いかも | |
bool button1State = false; | |
bool button2State = false; | |
bool button3State = false; | |
bool button4State = false; | |
bool button5State = false; | |
bool button6State = false; | |
bool button7State = false; | |
bool button8State = false; | |
bool button9State = false; | |
/* ユーザー定義関数 */ | |
/* | |
* 列を変更 | |
*/ | |
void changeColumn(int column) { | |
switch (column) { | |
case 0: | |
digitalWrite(COL_1, LOW); | |
digitalWrite(COL_2, LOW); | |
digitalWrite(COL_3, LOW); | |
break; | |
case 1: | |
digitalWrite(COL_1, HIGH); | |
digitalWrite(COL_2, LOW); | |
digitalWrite(COL_3, LOW); | |
break; | |
case 2: | |
digitalWrite(COL_1, LOW); | |
digitalWrite(COL_2, HIGH); | |
digitalWrite(COL_3, LOW); | |
break; | |
case 3: | |
digitalWrite(COL_1, LOW); | |
digitalWrite(COL_2, LOW); | |
digitalWrite(COL_3, HIGH); | |
break; | |
default: | |
//ColumnNotFoundException | |
} | |
} | |
void phase1() { | |
changeColumn(1); | |
if (digitalRead(ROW_1)) {//1番のボタンがON | |
if (!button1State) {//すでにONなら無意味だから無視 | |
button1State = true; | |
//TODO: 1が押されたときに一回だけ呼ばれるから処理書く | |
} | |
} else {//OFF | |
if (button1State) {//すでにOFFなら無意味だから無視 | |
button1State = false; | |
//TODO: 1が離されたときに一回だけ呼ばれるから処理書く | |
} | |
} | |
if (digitalRead(ROW_2)) {//4番のボタンがON | |
if (!button4State) {//すでにONなら無意味だから無視 | |
button4State = true; | |
//TODO: 4が押されたときに一回だけ呼ばれるから処理書く | |
} | |
} else {//OFF | |
if (button4State) {//すでにOFFなら無意味だから無視 | |
button4State = false; | |
//TODO: 4が離されたときに一回だけ呼ばれるから処理書く | |
} | |
} | |
if (digitalRead(ROW_3)) {//7番のボタンがON | |
if (!button7State) {//すでにONなら無意味だから無視 | |
button7State = true; | |
//TODO: 7が押されたときに一回だけ呼ばれるから処理書く | |
} | |
} else {//OFF | |
if (button7State) {//すでにOFFなら無意味だから無視 | |
button7State = false; | |
//TODO: 7が離されたときに一回だけ呼ばれるから処理書く | |
} | |
} | |
} | |
void phase2() { | |
changeColumn(2); | |
if (digitalRead(ROW_1)) {//2番のボタンがON | |
if (!button2State) {//すでにONなら無意味だから無視 | |
button2State = true; | |
//TODO: 2が押されたときに一回だけ呼ばれるから処理書く | |
} | |
} else {//OFF | |
if (button2State) {//すでにOFFなら無意味だから無視 | |
button2State = false; | |
//TODO: 2が離されたときに一回だけ呼ばれるから処理書く | |
} | |
} | |
if (digitalRead(ROW_2)) {//5番のボタンがON | |
if (!button5State) {//すでにONなら無意味だから無視 | |
button5State = true; | |
//TODO: 5が押されたときに一回だけ呼ばれるから処理書く | |
} | |
} else {//OFF | |
if (button5State) {//すでにOFFなら無意味だから無視 | |
button5State = false; | |
//TODO: 5が離されたときに一回だけ呼ばれるから処理書く | |
} | |
} | |
if (digitalRead(ROW_3)) {//8番のボタンがON | |
if (!button8State) {//すでにONなら無意味だから無視 | |
button8State = true; | |
//TODO: 8が押されたときに一回だけ呼ばれるから処理書く | |
} | |
} else {//OFF | |
if (button8State) {//すでにOFFなら無意味だから無視 | |
button8State = false; | |
//TODO: 8が離されたときに一回だけ呼ばれるから処理書く | |
} | |
} | |
} | |
void phase3() { | |
changeColumn(3); | |
if (digitalRead(ROW_1)) {//3番のボタンがON | |
if (!button3State) {//すでにONなら無意味だから無視 | |
button3State = true; | |
//TODO: 3が押されたときに一回だけ呼ばれるから処理書く | |
} | |
} else {//OFF | |
if (button3State) {//すでにOFFなら無意味だから無視 | |
button3State = false; | |
//TODO: 3が離されたときに一回だけ呼ばれるから処理書く | |
} | |
} | |
if (digitalRead(ROW_2)) {//6番のボタンがON | |
if (!button6State) {//すでにONなら無意味だから無視 | |
button6State = true; | |
//TODO: 6が押されたときに一回だけ呼ばれるから処理書く | |
} | |
} else {//OFF | |
if (button6State) {//すでにOFFなら無意味だから無視 | |
button6State = false; | |
//TODO: 6が離されたときに一回だけ呼ばれるから処理書く | |
} | |
} | |
if (digitalRead(ROW_3)) {//9番のボタンがON | |
if (!button9State) {//すでにONなら無意味だから無視 | |
button9State = true; | |
//TODO: 9が押されたときに一回だけ呼ばれるから処理書く | |
} | |
} else {//OFF | |
if (button9State) {//すでにOFFなら無意味だから無視 | |
button9State = false; | |
//TODO: 9が離されたときに一回だけ呼ばれるから処理書く | |
} | |
} | |
} | |
/* メイン関数 */ | |
void setup() { | |
//列は出力 | |
pinMode(COL_1, OUTPUT); | |
pinMode(COL_2, OUTPUT); | |
pinMode(COL_3, OUTPUT); | |
//行は入力 | |
pinMode(ROW_1, INPUT); | |
pinMode(ROW_2, INPUT); | |
pinMode(ROW_3, INPUT); | |
//なにも検出しない | |
changeColumn(0); | |
} | |
void loop() { | |
//REVIEW: 間に遅延必要かも | |
phase1(); | |
phase2(); | |
phase3(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment