han back / Mbed OS CLEO_UART_KEYPAD
Committer:
SMART_CLEO
Date:
Thu Sep 28 03:35:54 2017 +0000
Revision:
0:59951a5ac94a
SMART_CLEO

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SMART_CLEO 0:59951a5ac94a 1 #include "mbed.h"
SMART_CLEO 0:59951a5ac94a 2
SMART_CLEO 0:59951a5ac94a 3 struct UART_buf
SMART_CLEO 0:59951a5ac94a 4 {
SMART_CLEO 0:59951a5ac94a 5 uint8_t STA;
SMART_CLEO 0:59951a5ac94a 6 uint8_t MODE;
SMART_CLEO 0:59951a5ac94a 7 uint8_t CMD;
SMART_CLEO 0:59951a5ac94a 8 uint8_t LEN;
SMART_CLEO 0:59951a5ac94a 9 uint8_t DATA[32];
SMART_CLEO 0:59951a5ac94a 10 uint8_t END;
SMART_CLEO 0:59951a5ac94a 11
SMART_CLEO 0:59951a5ac94a 12 };
SMART_CLEO 0:59951a5ac94a 13
SMART_CLEO 0:59951a5ac94a 14 // C1, C2, C3, C4
SMART_CLEO 0:59951a5ac94a 15 PinName pin_KEYPAD_C[4] = {PC_4, PC_5, PC_6, PC_7};
SMART_CLEO 0:59951a5ac94a 16 // R1, R2, R3, R4
SMART_CLEO 0:59951a5ac94a 17 PinName pin_KEYPAD_R[4] = {PC_8, PC_9, PC_10, PC_11};
SMART_CLEO 0:59951a5ac94a 18
SMART_CLEO 0:59951a5ac94a 19 DigitalInOut Keypad_C1(pin_KEYPAD_C[0]);
SMART_CLEO 0:59951a5ac94a 20 DigitalInOut Keypad_C2(pin_KEYPAD_C[1]);
SMART_CLEO 0:59951a5ac94a 21 DigitalInOut Keypad_C3(pin_KEYPAD_C[2]);
SMART_CLEO 0:59951a5ac94a 22 DigitalInOut Keypad_C4(pin_KEYPAD_C[3]);
SMART_CLEO 0:59951a5ac94a 23
SMART_CLEO 0:59951a5ac94a 24 // R1, R2, R3, R4
SMART_CLEO 0:59951a5ac94a 25 BusIn Keypad_R(pin_KEYPAD_R[0], pin_KEYPAD_R[1], pin_KEYPAD_R[2], pin_KEYPAD_R[3]);
SMART_CLEO 0:59951a5ac94a 26
SMART_CLEO 0:59951a5ac94a 27 char Key_value[16] = {'1', '2', '3', 'A', '4', '5', '6', 'B', '7', '8', '9', 'C', '*', '0', '#', 'D'};
SMART_CLEO 0:59951a5ac94a 28
SMART_CLEO 0:59951a5ac94a 29 Serial SerialUART(PA_2, PA_3);
SMART_CLEO 0:59951a5ac94a 30
SMART_CLEO 0:59951a5ac94a 31 uint8_t Buffer[37];
SMART_CLEO 0:59951a5ac94a 32
SMART_CLEO 0:59951a5ac94a 33 //UART_buf RX_BUF;
SMART_CLEO 0:59951a5ac94a 34
SMART_CLEO 0:59951a5ac94a 35 //Ticker Sensor_Timer;
SMART_CLEO 0:59951a5ac94a 36
SMART_CLEO 0:59951a5ac94a 37 //void SerialUARTRX_ISR(void);
SMART_CLEO 0:59951a5ac94a 38 //void Timer_setting(uint8_t cmd, uint8_t value);
SMART_CLEO 0:59951a5ac94a 39 //void Sensor_Read(void);
SMART_CLEO 0:59951a5ac94a 40 void Sensor_Read_Data(uint8_t data);
SMART_CLEO 0:59951a5ac94a 41 uint16_t Keypad_Read(void);
SMART_CLEO 0:59951a5ac94a 42
SMART_CLEO 0:59951a5ac94a 43 int main() {
SMART_CLEO 0:59951a5ac94a 44
SMART_CLEO 0:59951a5ac94a 45 uint8_t Key_flag_pre = 0, i;
SMART_CLEO 0:59951a5ac94a 46 uint16_t Keypad;
SMART_CLEO 0:59951a5ac94a 47
SMART_CLEO 0:59951a5ac94a 48 SerialUART.baud(115200);
SMART_CLEO 0:59951a5ac94a 49
SMART_CLEO 0:59951a5ac94a 50 //SerialUART.attach(&SerialUARTRX_ISR);
SMART_CLEO 0:59951a5ac94a 51
SMART_CLEO 0:59951a5ac94a 52 //Timer_setting(0x06, 2);
SMART_CLEO 0:59951a5ac94a 53
SMART_CLEO 0:59951a5ac94a 54 while(1)
SMART_CLEO 0:59951a5ac94a 55 {
SMART_CLEO 0:59951a5ac94a 56 Keypad = Keypad_Read();
SMART_CLEO 0:59951a5ac94a 57 if(Keypad != 0)
SMART_CLEO 0:59951a5ac94a 58 {
SMART_CLEO 0:59951a5ac94a 59 for(i=0; i<16; i++)
SMART_CLEO 0:59951a5ac94a 60 {
SMART_CLEO 0:59951a5ac94a 61 if(Keypad & (0x0001 << i))
SMART_CLEO 0:59951a5ac94a 62 {
SMART_CLEO 0:59951a5ac94a 63 if(Key_flag_pre != Key_value[i]);
SMART_CLEO 0:59951a5ac94a 64 {
SMART_CLEO 0:59951a5ac94a 65 Key_flag_pre = Key_value[i];
SMART_CLEO 0:59951a5ac94a 66 Sensor_Read_Data(Key_flag_pre);
SMART_CLEO 0:59951a5ac94a 67 }
SMART_CLEO 0:59951a5ac94a 68 break;
SMART_CLEO 0:59951a5ac94a 69 }
SMART_CLEO 0:59951a5ac94a 70 }
SMART_CLEO 0:59951a5ac94a 71 }
SMART_CLEO 0:59951a5ac94a 72 else
SMART_CLEO 0:59951a5ac94a 73 Key_flag_pre = 0;
SMART_CLEO 0:59951a5ac94a 74 wait(0.1);
SMART_CLEO 0:59951a5ac94a 75 }
SMART_CLEO 0:59951a5ac94a 76 }
SMART_CLEO 0:59951a5ac94a 77
SMART_CLEO 0:59951a5ac94a 78 /*void SerialUARTRX_ISR(void)
SMART_CLEO 0:59951a5ac94a 79 {
SMART_CLEO 0:59951a5ac94a 80 static uint8_t RX_count = 0, RX_Len = 32, RX_Status = 0;
SMART_CLEO 0:59951a5ac94a 81 uint8_t rx_da = SerialUART.getc();
SMART_CLEO 0:59951a5ac94a 82 switch(RX_Status)
SMART_CLEO 0:59951a5ac94a 83 {
SMART_CLEO 0:59951a5ac94a 84 case 0:
SMART_CLEO 0:59951a5ac94a 85 if(rx_da == 0x76)
SMART_CLEO 0:59951a5ac94a 86 {
SMART_CLEO 0:59951a5ac94a 87 RX_BUF.STA = rx_da;
SMART_CLEO 0:59951a5ac94a 88 RX_Status++;
SMART_CLEO 0:59951a5ac94a 89 }
SMART_CLEO 0:59951a5ac94a 90 break;
SMART_CLEO 0:59951a5ac94a 91 case 1:
SMART_CLEO 0:59951a5ac94a 92 RX_BUF.MODE = rx_da;
SMART_CLEO 0:59951a5ac94a 93 RX_Status++;
SMART_CLEO 0:59951a5ac94a 94 break;
SMART_CLEO 0:59951a5ac94a 95 case 2:
SMART_CLEO 0:59951a5ac94a 96 RX_BUF.CMD = rx_da;
SMART_CLEO 0:59951a5ac94a 97 RX_Status++;
SMART_CLEO 0:59951a5ac94a 98 break;
SMART_CLEO 0:59951a5ac94a 99 case 3:
SMART_CLEO 0:59951a5ac94a 100 RX_BUF.LEN = rx_da;
SMART_CLEO 0:59951a5ac94a 101 RX_Len = RX_BUF.LEN;
SMART_CLEO 0:59951a5ac94a 102 RX_Status++;
SMART_CLEO 0:59951a5ac94a 103 if(RX_Len == 0)
SMART_CLEO 0:59951a5ac94a 104 RX_Status++;
SMART_CLEO 0:59951a5ac94a 105 break;
SMART_CLEO 0:59951a5ac94a 106 case 4:
SMART_CLEO 0:59951a5ac94a 107 RX_BUF.DATA[RX_count] = rx_da;
SMART_CLEO 0:59951a5ac94a 108 RX_count++;
SMART_CLEO 0:59951a5ac94a 109 if(RX_count == RX_Len)
SMART_CLEO 0:59951a5ac94a 110 {
SMART_CLEO 0:59951a5ac94a 111 RX_Status++;
SMART_CLEO 0:59951a5ac94a 112 RX_count = 0;
SMART_CLEO 0:59951a5ac94a 113 RX_Len = 32;
SMART_CLEO 0:59951a5ac94a 114 }
SMART_CLEO 0:59951a5ac94a 115 break;
SMART_CLEO 0:59951a5ac94a 116 case 5:
SMART_CLEO 0:59951a5ac94a 117 if(rx_da == 0x3E)
SMART_CLEO 0:59951a5ac94a 118 {
SMART_CLEO 0:59951a5ac94a 119 RX_BUF.END = rx_da;
SMART_CLEO 0:59951a5ac94a 120 RX_Status = 0;
SMART_CLEO 0:59951a5ac94a 121 switch(RX_BUF.MODE)
SMART_CLEO 0:59951a5ac94a 122 {
SMART_CLEO 0:59951a5ac94a 123 case 0x04:
SMART_CLEO 0:59951a5ac94a 124 Timer_setting(RX_BUF.CMD, RX_BUF.DATA[0]);
SMART_CLEO 0:59951a5ac94a 125 break;
SMART_CLEO 0:59951a5ac94a 126 }
SMART_CLEO 0:59951a5ac94a 127 }
SMART_CLEO 0:59951a5ac94a 128 break;
SMART_CLEO 0:59951a5ac94a 129 }
SMART_CLEO 0:59951a5ac94a 130 }*/
SMART_CLEO 0:59951a5ac94a 131
SMART_CLEO 0:59951a5ac94a 132 /*void Timer_setting(uint8_t cmd, uint8_t value)
SMART_CLEO 0:59951a5ac94a 133 {
SMART_CLEO 0:59951a5ac94a 134 double Time_value = 0;
SMART_CLEO 0:59951a5ac94a 135 switch(cmd)
SMART_CLEO 0:59951a5ac94a 136 {
SMART_CLEO 0:59951a5ac94a 137 case 0x01:
SMART_CLEO 0:59951a5ac94a 138 Time_value = 30;
SMART_CLEO 0:59951a5ac94a 139 break;
SMART_CLEO 0:59951a5ac94a 140 case 0x02:
SMART_CLEO 0:59951a5ac94a 141 Time_value = 60;
SMART_CLEO 0:59951a5ac94a 142 break;
SMART_CLEO 0:59951a5ac94a 143 case 0x03:
SMART_CLEO 0:59951a5ac94a 144 Time_value = 120;
SMART_CLEO 0:59951a5ac94a 145 break;
SMART_CLEO 0:59951a5ac94a 146 case 0x04:
SMART_CLEO 0:59951a5ac94a 147 Time_value = 300;
SMART_CLEO 0:59951a5ac94a 148 break;
SMART_CLEO 0:59951a5ac94a 149 case 0x05:
SMART_CLEO 0:59951a5ac94a 150 Time_value = 600;
SMART_CLEO 0:59951a5ac94a 151 break;
SMART_CLEO 0:59951a5ac94a 152 case 0x06:
SMART_CLEO 0:59951a5ac94a 153 Time_value = value;
SMART_CLEO 0:59951a5ac94a 154 Time_value = 1.0/Time_value;
SMART_CLEO 0:59951a5ac94a 155 break;
SMART_CLEO 0:59951a5ac94a 156 }
SMART_CLEO 0:59951a5ac94a 157 Sensor_Timer.attach(&Sensor_Read, Time_value);
SMART_CLEO 0:59951a5ac94a 158 }*/
SMART_CLEO 0:59951a5ac94a 159 //
SMART_CLEO 0:59951a5ac94a 160 // bit | 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SMART_CLEO 0:59951a5ac94a 161 // -------------------------------------------------------
SMART_CLEO 0:59951a5ac94a 162 // value | D # 0 * C 9 8 7 B 6 5 4 A 3 2 1
SMART_CLEO 0:59951a5ac94a 163 //
SMART_CLEO 0:59951a5ac94a 164 // 1 2 3 A
SMART_CLEO 0:59951a5ac94a 165 // 4 5 6 B
SMART_CLEO 0:59951a5ac94a 166 // 7 8 9 C
SMART_CLEO 0:59951a5ac94a 167 // * 0 # D
SMART_CLEO 0:59951a5ac94a 168 //
SMART_CLEO 0:59951a5ac94a 169 uint16_t Keypad_Read(void)
SMART_CLEO 0:59951a5ac94a 170 {
SMART_CLEO 0:59951a5ac94a 171 uint16_t keypad_tmp, Read_data = 0, i;
SMART_CLEO 0:59951a5ac94a 172 for(i=0; i<4; i++)
SMART_CLEO 0:59951a5ac94a 173 {
SMART_CLEO 0:59951a5ac94a 174 switch(i)
SMART_CLEO 0:59951a5ac94a 175 {
SMART_CLEO 0:59951a5ac94a 176 case 0:
SMART_CLEO 0:59951a5ac94a 177 Keypad_C1.output();
SMART_CLEO 0:59951a5ac94a 178 Keypad_C1 = 1;
SMART_CLEO 0:59951a5ac94a 179 break;
SMART_CLEO 0:59951a5ac94a 180 case 1:
SMART_CLEO 0:59951a5ac94a 181 Keypad_C2.output();
SMART_CLEO 0:59951a5ac94a 182 Keypad_C2 = 1;
SMART_CLEO 0:59951a5ac94a 183 break;
SMART_CLEO 0:59951a5ac94a 184 case 2:
SMART_CLEO 0:59951a5ac94a 185 Keypad_C3.output();
SMART_CLEO 0:59951a5ac94a 186 Keypad_C3 = 1;
SMART_CLEO 0:59951a5ac94a 187 break;
SMART_CLEO 0:59951a5ac94a 188 case 3:
SMART_CLEO 0:59951a5ac94a 189 Keypad_C4.output();
SMART_CLEO 0:59951a5ac94a 190 Keypad_C4 = 1;
SMART_CLEO 0:59951a5ac94a 191 break;
SMART_CLEO 0:59951a5ac94a 192 }
SMART_CLEO 0:59951a5ac94a 193
SMART_CLEO 0:59951a5ac94a 194 wait(0.001);
SMART_CLEO 0:59951a5ac94a 195 keypad_tmp = Keypad_R;
SMART_CLEO 0:59951a5ac94a 196 Read_data |= (keypad_tmp << (i*4));
SMART_CLEO 0:59951a5ac94a 197 switch(i)
SMART_CLEO 0:59951a5ac94a 198 {
SMART_CLEO 0:59951a5ac94a 199 case 0:
SMART_CLEO 0:59951a5ac94a 200 Keypad_C1 = 0;
SMART_CLEO 0:59951a5ac94a 201 Keypad_C1.input();
SMART_CLEO 0:59951a5ac94a 202 break;
SMART_CLEO 0:59951a5ac94a 203 case 1:
SMART_CLEO 0:59951a5ac94a 204 Keypad_C2 = 0;
SMART_CLEO 0:59951a5ac94a 205 Keypad_C2.input();
SMART_CLEO 0:59951a5ac94a 206 break;
SMART_CLEO 0:59951a5ac94a 207 case 2:
SMART_CLEO 0:59951a5ac94a 208 Keypad_C3 = 0;
SMART_CLEO 0:59951a5ac94a 209 Keypad_C3.input();
SMART_CLEO 0:59951a5ac94a 210 break;
SMART_CLEO 0:59951a5ac94a 211 case 3:
SMART_CLEO 0:59951a5ac94a 212 Keypad_C4 = 0;
SMART_CLEO 0:59951a5ac94a 213 Keypad_C4.input();
SMART_CLEO 0:59951a5ac94a 214 break;
SMART_CLEO 0:59951a5ac94a 215 }
SMART_CLEO 0:59951a5ac94a 216 }
SMART_CLEO 0:59951a5ac94a 217 return Read_data;
SMART_CLEO 0:59951a5ac94a 218 }
SMART_CLEO 0:59951a5ac94a 219
SMART_CLEO 0:59951a5ac94a 220 void Sensor_Read_Data(uint8_t data)
SMART_CLEO 0:59951a5ac94a 221 {
SMART_CLEO 0:59951a5ac94a 222 Buffer[0] = 0x76;
SMART_CLEO 0:59951a5ac94a 223 Buffer[1] = 0x01;
SMART_CLEO 0:59951a5ac94a 224 Buffer[2] = 0x19;
SMART_CLEO 0:59951a5ac94a 225 Buffer[3] = 0x01;
SMART_CLEO 0:59951a5ac94a 226 Buffer[4] = data;
SMART_CLEO 0:59951a5ac94a 227 Buffer[5] = 0x3E;
SMART_CLEO 0:59951a5ac94a 228 for(int i=0; i<6; i++)
SMART_CLEO 0:59951a5ac94a 229 SerialUART.putc(Buffer[i]);
SMART_CLEO 0:59951a5ac94a 230 }
SMART_CLEO 0:59951a5ac94a 231 /*
SMART_CLEO 0:59951a5ac94a 232 void Sensor_Read(void)
SMART_CLEO 0:59951a5ac94a 233 {
SMART_CLEO 0:59951a5ac94a 234 Buffer[0] = 0x76;
SMART_CLEO 0:59951a5ac94a 235 Buffer[1] = 0x01;
SMART_CLEO 0:59951a5ac94a 236 Buffer[2] = 0x05;
SMART_CLEO 0:59951a5ac94a 237 Buffer[3] = 0x01;
SMART_CLEO 0:59951a5ac94a 238 Buffer[4] = IR_Detect;
SMART_CLEO 0:59951a5ac94a 239 Buffer[5] = 0x3E;
SMART_CLEO 0:59951a5ac94a 240 for(int i=0; i<6; i++)
SMART_CLEO 0:59951a5ac94a 241 SerialUART.putc(Buffer[i]);
SMART_CLEO 0:59951a5ac94a 242 }
SMART_CLEO 0:59951a5ac94a 243 */