SHARE
TWEET

Untitled

a guest Jun 19th, 2019 102 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  * キーマトリクスを使ってみる 2019.06.08
  3.  *
  4.  * 1□2□3□
  5.  * 4□5□6□
  6.  * 7□8□9□
  7.  *
  8.  * MEMO: プルアップとプルダウンは異なる
  9.  */
  10.  
  11. /* ピン定数 */
  12. const int COL_1 = 2;//1列目
  13. const int COL_2 = 3;//2列目
  14. const int COL_3 = 4;//3列目
  15. const int ROW_1 = 8;//1行目
  16. const int ROW_2 = 9;//2行目
  17. const int ROW_3 = 10;//3行目
  18.  
  19. /* 状態変数 */
  20. //HACK; 配列でも良いかも
  21. bool button1State = false;
  22. bool button2State = false;
  23. bool button3State = false;
  24. bool button4State = false;
  25. bool button5State = false;
  26. bool button6State = false;
  27. bool button7State = false;
  28. bool button8State = false;
  29. bool button9State = false;
  30.  
  31. /* ユーザー定義関数 */
  32. /*
  33.  * 列を変更
  34.  */
  35. void changeColumn(int column) {
  36.   switch (column) {
  37.     case 0:
  38.       digitalWrite(COL_1, LOW);
  39.       digitalWrite(COL_2, LOW);
  40.       digitalWrite(COL_3, LOW);
  41.       break;
  42.     case 1:
  43.       digitalWrite(COL_1, HIGH);
  44.       digitalWrite(COL_2, LOW);
  45.       digitalWrite(COL_3, LOW);
  46.       break;
  47.     case 2:
  48.       digitalWrite(COL_1, LOW);
  49.       digitalWrite(COL_2, HIGH);
  50.       digitalWrite(COL_3, LOW);
  51.       break;
  52.     case 3:
  53.       digitalWrite(COL_1, LOW);
  54.       digitalWrite(COL_2, LOW);
  55.       digitalWrite(COL_3, HIGH);
  56.       break;
  57.     default:
  58.       //ColumnNotFoundException
  59.   }
  60. }
  61.  
  62. void phase1() {
  63.   changeColumn(1);
  64.   if (digitalRead(ROW_1)) {//1番のボタンがON
  65.     if (!button1State) {//すでにONなら無意味だから無視
  66.       button1State = true;
  67.  
  68.       //TODO: 1が押されたときに一回だけ呼ばれるから処理書く
  69.     }
  70.   } else {//OFF
  71.     if (button1State) {//すでにOFFなら無意味だから無視
  72.       button1State = false;
  73.  
  74.       //TODO: 1が離されたときに一回だけ呼ばれるから処理書く
  75.     }
  76.   }
  77.   if (digitalRead(ROW_2)) {//4番のボタンがON
  78.     if (!button4State) {//すでにONなら無意味だから無視
  79.       button4State = true;
  80.  
  81.       //TODO: 4が押されたときに一回だけ呼ばれるから処理書く
  82.     }
  83.   } else {//OFF
  84.     if (button4State) {//すでにOFFなら無意味だから無視
  85.       button4State = false;
  86.  
  87.       //TODO: 4が離されたときに一回だけ呼ばれるから処理書く
  88.     }
  89.   }
  90.   if (digitalRead(ROW_3)) {//7番のボタンがON
  91.     if (!button7State) {//すでにONなら無意味だから無視
  92.       button7State = true;
  93.  
  94.       //TODO: 7が押されたときに一回だけ呼ばれるから処理書く
  95.     }
  96.   } else {//OFF
  97.     if (button7State) {//すでにOFFなら無意味だから無視
  98.       button7State = false;
  99.  
  100.       //TODO: 7が離されたときに一回だけ呼ばれるから処理書く
  101.     }
  102.   }
  103. }
  104.  
  105. void phase2() {
  106.   changeColumn(2);
  107.   if (digitalRead(ROW_1)) {//2番のボタンがON
  108.     if (!button2State) {//すでにONなら無意味だから無視
  109.       button2State = true;
  110.  
  111.       //TODO: 2が押されたときに一回だけ呼ばれるから処理書く
  112.     }
  113.   } else {//OFF
  114.     if (button2State) {//すでにOFFなら無意味だから無視
  115.       button2State = false;
  116.  
  117.       //TODO: 2が離されたときに一回だけ呼ばれるから処理書く
  118.     }
  119.   }
  120.   if (digitalRead(ROW_2)) {//5番のボタンがON
  121.     if (!button5State) {//すでにONなら無意味だから無視
  122.       button5State = true;
  123.  
  124.       //TODO: 5が押されたときに一回だけ呼ばれるから処理書く
  125.     }
  126.   } else {//OFF
  127.     if (button5State) {//すでにOFFなら無意味だから無視
  128.       button5State = false;
  129.  
  130.       //TODO: 5が離されたときに一回だけ呼ばれるから処理書く
  131.     }
  132.   }
  133.   if (digitalRead(ROW_3)) {//8番のボタンがON
  134.     if (!button8State) {//すでにONなら無意味だから無視
  135.       button8State = true;
  136.  
  137.       //TODO: 8が押されたときに一回だけ呼ばれるから処理書く
  138.     }
  139.   } else {//OFF
  140.     if (button8State) {//すでにOFFなら無意味だから無視
  141.       button8State = false;
  142.  
  143.       //TODO: 8が離されたときに一回だけ呼ばれるから処理書く
  144.     }
  145.   }
  146. }
  147.  
  148. void phase3() {
  149.   changeColumn(3);
  150.   if (digitalRead(ROW_1)) {//3番のボタンがON
  151.     if (!button3State) {//すでにONなら無意味だから無視
  152.       button3State = true;
  153.  
  154.       //TODO: 3が押されたときに一回だけ呼ばれるから処理書く
  155.     }
  156.   } else {//OFF
  157.     if (button3State) {//すでにOFFなら無意味だから無視
  158.       button3State = false;
  159.  
  160.       //TODO: 3が離されたときに一回だけ呼ばれるから処理書く
  161.     }
  162.   }
  163.   if (digitalRead(ROW_2)) {//6番のボタンがON
  164.     if (!button6State) {//すでにONなら無意味だから無視
  165.       button6State = true;
  166.  
  167.       //TODO: 6が押されたときに一回だけ呼ばれるから処理書く
  168.     }
  169.   } else {//OFF
  170.     if (button6State) {//すでにOFFなら無意味だから無視
  171.       button6State = false;
  172.  
  173.       //TODO: 6が離されたときに一回だけ呼ばれるから処理書く
  174.     }
  175.   }
  176.   if (digitalRead(ROW_3)) {//9番のボタンがON
  177.     if (!button9State) {//すでにONなら無意味だから無視
  178.       button9State = true;
  179.  
  180.       //TODO: 9が押されたときに一回だけ呼ばれるから処理書く
  181.     }
  182.   } else {//OFF
  183.     if (button9State) {//すでにOFFなら無意味だから無視
  184.       button9State = false;
  185.  
  186.       //TODO: 9が離されたときに一回だけ呼ばれるから処理書く
  187.     }
  188.   }
  189. }
  190.  
  191. /* メイン関数 */
  192. void setup() {
  193.   //列は出力
  194.   pinMode(COL_1, OUTPUT);
  195.   pinMode(COL_2, OUTPUT);
  196.   pinMode(COL_3, OUTPUT);
  197.   //行は入力
  198.   pinMode(ROW_1, INPUT);
  199.   pinMode(ROW_2, INPUT);
  200.   pinMode(ROW_3, INPUT);
  201.   //なにも検出しない
  202.   changeColumn(0);
  203. }
  204.  
  205. void loop() {
  206.   //REVIEW: 間に遅延必要かも
  207.   phase1();
  208.   phase2();
  209.   phase3();
  210. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top