Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:59951a5ac94a, 2017-09-28 (annotated)
- Committer:
- SMART_CLEO
- Date:
- Thu Sep 28 03:35:54 2017 +0000
- Revision:
- 0:59951a5ac94a
SMART_CLEO
Who changed what in which revision?
| User | Revision | Line number | New 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 | */ |