Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * キーマトリクスを使ってみる 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();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement