Ryo Od / Mbed 2 deprecated Nucleo_rtos_4x4_Keypad_Test

Dependencies:   mbed-rtos mbed

Committer:
ryood
Date:
Tue Oct 04 12:05:27 2016 +0000
Revision:
0:ee21c9a5f330
???????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryood 0:ee21c9a5f330 1 /*
ryood 0:ee21c9a5f330 2 * aitendo 4x4 keypad Test
ryood 0:ee21c9a5f330 3 *
ryood 0:ee21c9a5f330 4 * 2016.10.04
ryood 0:ee21c9a5f330 5 *
ryood 0:ee21c9a5f330 6 */
ryood 0:ee21c9a5f330 7 #include "mbed.h"
ryood 0:ee21c9a5f330 8 #include "rtos.h"
ryood 0:ee21c9a5f330 9
ryood 0:ee21c9a5f330 10 const char keypadChar [] = {
ryood 0:ee21c9a5f330 11 'C', 'D', 'E', 'F',
ryood 0:ee21c9a5f330 12 '9', '0', 'A', 'B',
ryood 0:ee21c9a5f330 13 '5', '6', '7', '8',
ryood 0:ee21c9a5f330 14 '1', '2', '3', '4',
ryood 0:ee21c9a5f330 15 };
ryood 0:ee21c9a5f330 16
ryood 0:ee21c9a5f330 17 BusIn KeypadIn(PA_13, PA_14, PA_15, PB_7);
ryood 0:ee21c9a5f330 18 BusOut KeypadOut(PC_13, PA_9, PA_8, PB_10);
ryood 0:ee21c9a5f330 19
ryood 0:ee21c9a5f330 20 //------------------------------------------------------
ryood 0:ee21c9a5f330 21 // keyScan1(): 押されているキー
ryood 0:ee21c9a5f330 22 // return: キースキャンの結果 0..15
ryood 0:ee21c9a5f330 23 // 押されていない場合は -1
ryood 0:ee21c9a5f330 24 //------------------------------------------------------
ryood 0:ee21c9a5f330 25 int keyScan1()
ryood 0:ee21c9a5f330 26 {
ryood 0:ee21c9a5f330 27 int i, j;
ryood 0:ee21c9a5f330 28 for (i = 0; i < 4; i++) {
ryood 0:ee21c9a5f330 29 KeypadOut[i] = 1;
ryood 0:ee21c9a5f330 30 for (j = 0; j < 4; j++) {
ryood 0:ee21c9a5f330 31 if (KeypadIn[j] == 1) {
ryood 0:ee21c9a5f330 32 KeypadOut[i] = 0;
ryood 0:ee21c9a5f330 33 return i * 4 + j;
ryood 0:ee21c9a5f330 34 }
ryood 0:ee21c9a5f330 35 }
ryood 0:ee21c9a5f330 36 KeypadOut[i] = 0;
ryood 0:ee21c9a5f330 37 }
ryood 0:ee21c9a5f330 38 return -1;
ryood 0:ee21c9a5f330 39 }
ryood 0:ee21c9a5f330 40
ryood 0:ee21c9a5f330 41 //------------------------------------------------------
ryood 0:ee21c9a5f330 42 // keyScan(): 押して離されたキー
ryood 0:ee21c9a5f330 43 // return: キースキャンの結果 0..15
ryood 0:ee21c9a5f330 44 // 変化がない場合は -1
ryood 0:ee21c9a5f330 45 //------------------------------------------------------
ryood 0:ee21c9a5f330 46 int keyScan()
ryood 0:ee21c9a5f330 47 {
ryood 0:ee21c9a5f330 48 static int keyBuff;
ryood 0:ee21c9a5f330 49 int kv, kvv;
ryood 0:ee21c9a5f330 50
ryood 0:ee21c9a5f330 51 // チャタリング防止
ryood 0:ee21c9a5f330 52 kv = keyScan1();
ryood 0:ee21c9a5f330 53 Thread::wait(10);
ryood 0:ee21c9a5f330 54 kvv = keyScan1();
ryood 0:ee21c9a5f330 55
ryood 0:ee21c9a5f330 56 if (kv == kvv) {
ryood 0:ee21c9a5f330 57 if (kv != keyBuff) {
ryood 0:ee21c9a5f330 58 keyBuff = kv;
ryood 0:ee21c9a5f330 59 return kv;
ryood 0:ee21c9a5f330 60 }
ryood 0:ee21c9a5f330 61 }
ryood 0:ee21c9a5f330 62 return -1;
ryood 0:ee21c9a5f330 63 }
ryood 0:ee21c9a5f330 64
ryood 0:ee21c9a5f330 65 int main()
ryood 0:ee21c9a5f330 66 {
ryood 0:ee21c9a5f330 67 printf("\r\n\r\n*** RTOS 4x4 Keypad Test ***\r\n");
ryood 0:ee21c9a5f330 68
ryood 0:ee21c9a5f330 69 KeypadIn.mode(PullDown);
ryood 0:ee21c9a5f330 70
ryood 0:ee21c9a5f330 71 for (int i = 0; i < 4; i++) {
ryood 0:ee21c9a5f330 72 KeypadOut[i] = 0;
ryood 0:ee21c9a5f330 73 }
ryood 0:ee21c9a5f330 74
ryood 0:ee21c9a5f330 75 while (true) {
ryood 0:ee21c9a5f330 76 int v = keyScan();
ryood 0:ee21c9a5f330 77 if (v != -1) {
ryood 0:ee21c9a5f330 78 printf("%c", keypadChar[v]);
ryood 0:ee21c9a5f330 79 }
ryood 0:ee21c9a5f330 80 }
ryood 0:ee21c9a5f330 81 }