Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.62 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement