Remote I/O Switchx4 LEDx4 AINx2(Battery,Potentiometer) OUTx8 INx8 nRFUARTの改造版 ライブラリアップデートに注意 BLE_API,nRF51822,mbed
Dependencies: BLE_API mbed nRF51822
Fork of BLE_LoopbackUART by
main.cpp@15:828ad860628f, 2016-12-26 (annotated)
- Committer:
- noboruk
- Date:
- Mon Dec 26 07:04:53 2016 +0000
- Revision:
- 15:828ad860628f
- Parent:
- 14:388dd59269c8
- Child:
- 16:5df99e9291af
?RFUART
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
yihui | 0:e910d9bb040f | 1 | /* mbed Microcontroller Library |
yihui | 0:e910d9bb040f | 2 | * Copyright (c) 2006-2013 ARM Limited |
yihui | 0:e910d9bb040f | 3 | * |
yihui | 0:e910d9bb040f | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
yihui | 0:e910d9bb040f | 5 | * you may not use this file except in compliance with the License. |
yihui | 0:e910d9bb040f | 6 | * You may obtain a copy of the License at |
yihui | 0:e910d9bb040f | 7 | * |
yihui | 0:e910d9bb040f | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
yihui | 0:e910d9bb040f | 9 | * |
yihui | 0:e910d9bb040f | 10 | * Unless required by applicable law or agreed to in writing, software |
yihui | 0:e910d9bb040f | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
yihui | 0:e910d9bb040f | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
yihui | 0:e910d9bb040f | 13 | * See the License for the specific language governing permissions and |
yihui | 0:e910d9bb040f | 14 | * limitations under the License. |
yihui | 0:e910d9bb040f | 15 | */ |
yihui | 0:e910d9bb040f | 16 | |
yihui | 0:e910d9bb040f | 17 | #include "mbed.h" |
rgrover1 | 12:33153cf38631 | 18 | #include "ble/BLE.h" |
noboruk | 14:388dd59269c8 | 19 | #include "ble/services/UARTService.h" |
noboruk | 14:388dd59269c8 | 20 | // |
noboruk | 14:388dd59269c8 | 21 | //////////////////////////////////////// |
noboruk | 14:388dd59269c8 | 22 | // |
noboruk | 14:388dd59269c8 | 23 | #define LED_ON 1 |
noboruk | 14:388dd59269c8 | 24 | #define LED_OFF 0 |
noboruk | 14:388dd59269c8 | 25 | // |
noboruk | 14:388dd59269c8 | 26 | //////////////////////////////////////// |
noboruk | 14:388dd59269c8 | 27 | // I/O pin define |
noboruk | 14:388dd59269c8 | 28 | #define LED_PIN1 P0_25 |
noboruk | 14:388dd59269c8 | 29 | #define LED_PIN2 P0_28 |
noboruk | 14:388dd59269c8 | 30 | #define LED_PIN3 P0_29 |
noboruk | 14:388dd59269c8 | 31 | #define LED_PIN4 P0_30 |
yihui | 0:e910d9bb040f | 32 | |
noboruk | 14:388dd59269c8 | 33 | #define SWITCH_PIN1 P0_4 |
noboruk | 14:388dd59269c8 | 34 | #define SWITCH_PIN2 P0_5 |
noboruk | 14:388dd59269c8 | 35 | #define SWITCH_PIN3 P0_6 |
noboruk | 14:388dd59269c8 | 36 | #define SWITCH_PIN4 P0_7 |
noboruk | 14:388dd59269c8 | 37 | |
noboruk | 14:388dd59269c8 | 38 | #define OUT_PORT_PIN1 P0_18 |
noboruk | 14:388dd59269c8 | 39 | #define OUT_PORT_PIN2 P0_17 |
noboruk | 14:388dd59269c8 | 40 | #define OUT_PORT_PIN3 P0_16 |
noboruk | 14:388dd59269c8 | 41 | #define OUT_PORT_PIN4 P0_20 |
noboruk | 14:388dd59269c8 | 42 | #define OUT_PORT_PIN5 P0_21 |
noboruk | 14:388dd59269c8 | 43 | #define OUT_PORT_PIN6 P0_22 |
noboruk | 14:388dd59269c8 | 44 | #define OUT_PORT_PIN7 P0_23 |
noboruk | 14:388dd59269c8 | 45 | #define OUT_PORT_PIN8 P0_24 |
yihui | 0:e910d9bb040f | 46 | |
noboruk | 14:388dd59269c8 | 47 | #define IN_PORT_PIN1 P0_0 |
noboruk | 14:388dd59269c8 | 48 | #define IN_PORT_PIN2 P0_1 |
noboruk | 14:388dd59269c8 | 49 | #define IN_PORT_PIN3 P0_10 |
noboruk | 14:388dd59269c8 | 50 | #define IN_PORT_PIN4 P0_12 |
noboruk | 14:388dd59269c8 | 51 | #define IN_PORT_PIN5 P0_13 |
noboruk | 14:388dd59269c8 | 52 | #define IN_PORT_PIN6 P0_14 |
noboruk | 14:388dd59269c8 | 53 | #define IN_PORT_PIN7 P0_15 |
noboruk | 14:388dd59269c8 | 54 | #define IN_PORT_PIN8 P0_19 |
noboruk | 14:388dd59269c8 | 55 | |
noboruk | 14:388dd59269c8 | 56 | #define ANALOG_IN_PIN1 P0_2 |
noboruk | 14:388dd59269c8 | 57 | #define ANALOG_IN_PIN2 P0_3 |
noboruk | 14:388dd59269c8 | 58 | |
noboruk | 14:388dd59269c8 | 59 | //#define PWM_PIN P0_8 |
noboruk | 14:388dd59269c8 | 60 | |
noboruk | 14:388dd59269c8 | 61 | #define DEBUG_TX_PIN P0_9 |
noboruk | 14:388dd59269c8 | 62 | #define DEBUG_RX_PIN P0_11 |
noboruk | 14:388dd59269c8 | 63 | // |
noboruk | 14:388dd59269c8 | 64 | //////////////////////////////////////// |
noboruk | 14:388dd59269c8 | 65 | // |
noboruk | 14:388dd59269c8 | 66 | #define cmd_LED 'L' // "Lxx" |
noboruk | 14:388dd59269c8 | 67 | #define cmd_OUT 'O' // "Oxx" |
noboruk | 14:388dd59269c8 | 68 | // |
noboruk | 14:388dd59269c8 | 69 | //////////////////////////////////////// |
noboruk | 14:388dd59269c8 | 70 | // |
noboruk | 14:388dd59269c8 | 71 | DigitalOut LED_1(LED_PIN1); |
noboruk | 14:388dd59269c8 | 72 | DigitalOut LED_2(LED_PIN2); |
noboruk | 14:388dd59269c8 | 73 | DigitalOut LED_3(LED_PIN3); |
noboruk | 14:388dd59269c8 | 74 | DigitalOut LED_4(LED_PIN4); |
noboruk | 14:388dd59269c8 | 75 | |
noboruk | 14:388dd59269c8 | 76 | DigitalIn SW_1(SWITCH_PIN1); |
noboruk | 14:388dd59269c8 | 77 | DigitalIn SW_2(SWITCH_PIN2); |
noboruk | 14:388dd59269c8 | 78 | DigitalIn SW_3(SWITCH_PIN3); |
noboruk | 14:388dd59269c8 | 79 | DigitalIn SW_4(SWITCH_PIN4); |
yihui | 0:e910d9bb040f | 80 | |
noboruk | 14:388dd59269c8 | 81 | DigitalOut DO_1(OUT_PORT_PIN1); |
noboruk | 14:388dd59269c8 | 82 | DigitalOut DO_2(OUT_PORT_PIN2); |
noboruk | 14:388dd59269c8 | 83 | DigitalOut DO_3(OUT_PORT_PIN3); |
noboruk | 14:388dd59269c8 | 84 | DigitalOut DO_4(OUT_PORT_PIN4); |
noboruk | 14:388dd59269c8 | 85 | DigitalOut DO_5(OUT_PORT_PIN5); |
noboruk | 14:388dd59269c8 | 86 | DigitalOut DO_6(OUT_PORT_PIN6); |
noboruk | 14:388dd59269c8 | 87 | DigitalOut DO_7(OUT_PORT_PIN7); |
noboruk | 14:388dd59269c8 | 88 | DigitalOut DO_8(OUT_PORT_PIN8); |
noboruk | 14:388dd59269c8 | 89 | |
noboruk | 14:388dd59269c8 | 90 | DigitalIn DI_1(IN_PORT_PIN1); |
noboruk | 14:388dd59269c8 | 91 | DigitalIn DI_2(IN_PORT_PIN2); |
noboruk | 14:388dd59269c8 | 92 | DigitalIn DI_3(IN_PORT_PIN3); |
noboruk | 14:388dd59269c8 | 93 | DigitalIn DI_4(IN_PORT_PIN4); |
noboruk | 14:388dd59269c8 | 94 | DigitalIn DI_5(IN_PORT_PIN5); |
noboruk | 14:388dd59269c8 | 95 | DigitalIn DI_6(IN_PORT_PIN6); |
noboruk | 14:388dd59269c8 | 96 | DigitalIn DI_7(IN_PORT_PIN7); |
noboruk | 14:388dd59269c8 | 97 | DigitalIn DI_8(IN_PORT_PIN8); |
noboruk | 14:388dd59269c8 | 98 | |
noboruk | 14:388dd59269c8 | 99 | // |
noboruk | 14:388dd59269c8 | 100 | Serial DEBUG(DEBUG_TX_PIN, DEBUG_RX_PIN); |
noboruk | 14:388dd59269c8 | 101 | AnalogIn AIN_1(ANALOG_IN_PIN1); |
noboruk | 14:388dd59269c8 | 102 | AnalogIn AIN_2(ANALOG_IN_PIN2); |
noboruk | 14:388dd59269c8 | 103 | // |
noboruk | 14:388dd59269c8 | 104 | //////////////////////////////////////// |
noboruk | 14:388dd59269c8 | 105 | // |
noboruk | 14:388dd59269c8 | 106 | BLEDevice ble; |
noboruk | 14:388dd59269c8 | 107 | UARTService *uartServicePtr; |
noboruk | 14:388dd59269c8 | 108 | Ticker ticker; |
noboruk | 14:388dd59269c8 | 109 | // |
noboruk | 14:388dd59269c8 | 110 | //////////////////////////////////////// |
noboruk | 14:388dd59269c8 | 111 | uint16_t input_now; |
noboruk | 14:388dd59269c8 | 112 | uint16_t input_old; |
noboruk | 14:388dd59269c8 | 113 | uint16_t ain1_now; |
noboruk | 14:388dd59269c8 | 114 | uint16_t ain2_now; |
noboruk | 14:388dd59269c8 | 115 | uint16_t ain1_old; |
noboruk | 14:388dd59269c8 | 116 | uint16_t ain2_old; |
noboruk | 14:388dd59269c8 | 117 | uint16_t output_buf; |
yihui | 0:e910d9bb040f | 118 | |
noboruk | 14:388dd59269c8 | 119 | //////////////////////////////////////// |
noboruk | 14:388dd59269c8 | 120 | void periodicCallback_led_blink( void ); |
noboruk | 14:388dd59269c8 | 121 | void periodicCallback_sw_read( void ); |
noboruk | 14:388dd59269c8 | 122 | void set_LED( int num, int val ); |
noboruk | 14:388dd59269c8 | 123 | void set_OUT( int num, int val ); |
noboruk | 14:388dd59269c8 | 124 | void read_IN( void ); |
noboruk | 14:388dd59269c8 | 125 | void port_clear( void ); |
noboruk | 14:388dd59269c8 | 126 | void cmd_check( uint8_t* s ); |
noboruk | 14:388dd59269c8 | 127 | void board_test( void ); |
noboruk | 14:388dd59269c8 | 128 | // |
noboruk | 14:388dd59269c8 | 129 | //////////////////////////////////////// |
noboruk | 14:388dd59269c8 | 130 | uint16_t board_test_fg = 0; |
noboruk | 14:388dd59269c8 | 131 | uint16_t uart_cmd_check( void ); |
noboruk | 14:388dd59269c8 | 132 | uint16_t cmd_c_wp; |
noboruk | 14:388dd59269c8 | 133 | uint8_t cmd_str[8]; |
noboruk | 14:388dd59269c8 | 134 | bool update_characteristic_fg; |
noboruk | 14:388dd59269c8 | 135 | bool change_input_fg; |
noboruk | 14:388dd59269c8 | 136 | bool first_update_fg; |
noboruk | 14:388dd59269c8 | 137 | uint16_t adc_update_cnt; |
noboruk | 14:388dd59269c8 | 138 | // |
noboruk | 14:388dd59269c8 | 139 | //////////////////////////////////////// |
noboruk | 14:388dd59269c8 | 140 | // BLEイベント接続時 |
noboruk | 14:388dd59269c8 | 141 | void connectionCallback(const Gap::ConnectionCallbackParams_t * params) |
noboruk | 14:388dd59269c8 | 142 | { |
noboruk | 14:388dd59269c8 | 143 | ticker.detach(); |
noboruk | 14:388dd59269c8 | 144 | DEBUG.printf("Connection handle:%u \r\n",params->handle); |
noboruk | 14:388dd59269c8 | 145 | // stop blinking when we connect |
noboruk | 14:388dd59269c8 | 146 | LED_1 = LED_OFF; |
noboruk | 14:388dd59269c8 | 147 | read_IN(); |
noboruk | 14:388dd59269c8 | 148 | ticker.attach(periodicCallback_sw_read, 0.1); |
noboruk | 14:388dd59269c8 | 149 | update_characteristic_fg = true; |
noboruk | 14:388dd59269c8 | 150 | first_update_fg = true; |
noboruk | 14:388dd59269c8 | 151 | adc_update_cnt = 0; |
noboruk | 14:388dd59269c8 | 152 | } |
yihui | 0:e910d9bb040f | 153 | |
noboruk | 14:388dd59269c8 | 154 | // |
noboruk | 14:388dd59269c8 | 155 | //////////////////////////////////////// |
noboruk | 14:388dd59269c8 | 156 | // BLEイベント切断時 |
rgrover1 | 13:15764cc1f12c | 157 | void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) |
yihui | 0:e910d9bb040f | 158 | { |
noboruk | 14:388dd59269c8 | 159 | int i; |
noboruk | 14:388dd59269c8 | 160 | update_characteristic_fg = false; |
noboruk | 14:388dd59269c8 | 161 | ticker.detach(); |
noboruk | 14:388dd59269c8 | 162 | DEBUG.printf("Disconnected!\n\r"); |
noboruk | 14:388dd59269c8 | 163 | DEBUG.printf("Restarting the advertising process\n\r"); |
Rohit Grover |
2:e060367b9024 | 164 | ble.startAdvertising(); |
noboruk | 14:388dd59269c8 | 165 | ticker.attach(periodicCallback_led_blink, 1); |
noboruk | 14:388dd59269c8 | 166 | for( i=1; i < 4+1 ; i++ ){ set_LED(i,0); } |
noboruk | 14:388dd59269c8 | 167 | for( i=1; i < 8+1 ; i++ ){ set_OUT(i,0); } |
Rohit Grover |
2:e060367b9024 | 168 | } |
noboruk | 14:388dd59269c8 | 169 | // |
noboruk | 14:388dd59269c8 | 170 | //////////////////////////////////////// |
noboruk | 14:388dd59269c8 | 171 | // BLE-UART受信時 |
rgrover1 | 12:33153cf38631 | 172 | void onDataWritten(const GattWriteCallbackParams *params) |
yihui | 0:e910d9bb040f | 173 | { |
noboruk | 14:388dd59269c8 | 174 | uint8_t* s; |
rgrover1 | 12:33153cf38631 | 175 | if ((uartServicePtr != NULL) && (params->handle == uartServicePtr->getTXCharacteristicHandle())) { |
rgrover1 | 5:4bc41267a03a | 176 | uint16_t bytesRead = params->len; |
noboruk | 14:388dd59269c8 | 177 | DEBUG.printf("received %u bytes\n\r", bytesRead); |
noboruk | 14:388dd59269c8 | 178 | s = (uint8_t*)(&(params->data[0])); |
noboruk | 14:388dd59269c8 | 179 | cmd_check(s); |
noboruk | 14:388dd59269c8 | 180 | // BLE-UART送信 |
noboruk | 14:388dd59269c8 | 181 | // ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), params->data, bytesRead); |
yihui | 0:e910d9bb040f | 182 | } |
Rohit Grover |
2:e060367b9024 | 183 | } |
noboruk | 14:388dd59269c8 | 184 | // |
noboruk | 14:388dd59269c8 | 185 | //////////////////////////////////////// |
noboruk | 14:388dd59269c8 | 186 | // 未接続時周期割り込み |
noboruk | 14:388dd59269c8 | 187 | void periodicCallback_led_blink(void) |
noboruk | 14:388dd59269c8 | 188 | { |
noboruk | 14:388dd59269c8 | 189 | LED_1 = !LED_1; |
noboruk | 14:388dd59269c8 | 190 | } |
noboruk | 14:388dd59269c8 | 191 | // |
noboruk | 14:388dd59269c8 | 192 | //////////////////////////////////////// |
noboruk | 14:388dd59269c8 | 193 | // 接続時周期割り込み |
noboruk | 14:388dd59269c8 | 194 | void periodicCallback_sw_read( void ) |
Rohit Grover |
2:e060367b9024 | 195 | { |
noboruk | 14:388dd59269c8 | 196 | char send_str[20]; |
noboruk | 14:388dd59269c8 | 197 | uint16_t slen; |
noboruk | 14:388dd59269c8 | 198 | |
noboruk | 14:388dd59269c8 | 199 | read_IN(); |
noboruk | 14:388dd59269c8 | 200 | sprintf(send_str,"%04X,%04X,%04X \r",input_now,ain1_now,ain2_now); |
noboruk | 14:388dd59269c8 | 201 | slen = strlen(send_str); |
noboruk | 14:388dd59269c8 | 202 | |
noboruk | 14:388dd59269c8 | 203 | if( first_update_fg == true ) |
noboruk | 14:388dd59269c8 | 204 | { |
noboruk | 14:388dd59269c8 | 205 | first_update_fg = false; |
noboruk | 14:388dd59269c8 | 206 | change_input_fg = true; |
noboruk | 14:388dd59269c8 | 207 | } |
noboruk | 14:388dd59269c8 | 208 | else |
noboruk | 14:388dd59269c8 | 209 | { |
noboruk | 14:388dd59269c8 | 210 | change_input_fg = false; |
noboruk | 14:388dd59269c8 | 211 | } |
noboruk | 14:388dd59269c8 | 212 | |
noboruk | 14:388dd59269c8 | 213 | if( input_now != input_old ) |
noboruk | 14:388dd59269c8 | 214 | { |
noboruk | 14:388dd59269c8 | 215 | change_input_fg = true; |
noboruk | 14:388dd59269c8 | 216 | } |
noboruk | 14:388dd59269c8 | 217 | adc_update_cnt++; |
noboruk | 14:388dd59269c8 | 218 | if( adc_update_cnt > 10 ) |
noboruk | 14:388dd59269c8 | 219 | { |
noboruk | 14:388dd59269c8 | 220 | adc_update_cnt = 0; |
noboruk | 14:388dd59269c8 | 221 | change_input_fg = true; |
noboruk | 14:388dd59269c8 | 222 | } |
noboruk | 14:388dd59269c8 | 223 | if(( update_characteristic_fg == true )&&( change_input_fg == true )) |
noboruk | 14:388dd59269c8 | 224 | { |
noboruk | 14:388dd59269c8 | 225 | DEBUG.printf("len=%d,data=%s",slen,send_str); |
noboruk | 14:388dd59269c8 | 226 | ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(),(uint8_t*)(&send_str[0]),slen); |
noboruk | 14:388dd59269c8 | 227 | } |
Rohit Grover |
2:e060367b9024 | 228 | } |
noboruk | 14:388dd59269c8 | 229 | // |
noboruk | 14:388dd59269c8 | 230 | //////////////////////////////////////// |
noboruk | 14:388dd59269c8 | 231 | // メイン |
yihui | 0:e910d9bb040f | 232 | int main(void) |
yihui | 0:e910d9bb040f | 233 | { |
noboruk | 14:388dd59269c8 | 234 | DEBUG.baud(9600); |
noboruk | 14:388dd59269c8 | 235 | port_clear(); |
noboruk | 14:388dd59269c8 | 236 | read_IN(); |
noboruk | 14:388dd59269c8 | 237 | DEBUG.printf("\r\n"); |
noboruk | 14:388dd59269c8 | 238 | DEBUG.printf("BLE remote I/O \r\n"); |
noboruk | 15:828ad860628f | 239 | DEBUG.printf(" nRFUART version\r\n"); |
noboruk | 15:828ad860628f | 240 | DEBUG.printf(" 2019/12/24\r\n"); |
noboruk | 14:388dd59269c8 | 241 | read_IN(); |
noboruk | 14:388dd59269c8 | 242 | DEBUG.printf("\r\n"); |
noboruk | 14:388dd59269c8 | 243 | if( ( input_now & 0x0003 ) == 0x0003 ){ board_test(); } //SW1,2 ON? |
noboruk | 14:388dd59269c8 | 244 | // |
noboruk | 14:388dd59269c8 | 245 | DEBUG.printf("Start program\r\n"); |
noboruk | 14:388dd59269c8 | 246 | ticker.attach(periodicCallback_led_blink, 1); |
yihui | 0:e910d9bb040f | 247 | |
Rohit Grover |
2:e060367b9024 | 248 | ble.init(); |
noboruk | 14:388dd59269c8 | 249 | ble.onConnection(connectionCallback); |
Rohit Grover |
2:e060367b9024 | 250 | ble.onDisconnection(disconnectionCallback); |
Rohit Grover |
2:e060367b9024 | 251 | ble.onDataWritten(onDataWritten); |
yihui | 0:e910d9bb040f | 252 | |
Rohit Grover |
2:e060367b9024 | 253 | /* setup advertising */ |
Rohit Grover |
2:e060367b9024 | 254 | ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED); |
Rohit Grover |
2:e060367b9024 | 255 | ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); |
Rohit Grover |
2:e060367b9024 | 256 | ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME, |
noboruk | 14:388dd59269c8 | 257 | (const uint8_t *)"BLE IO", sizeof("BLE IO") - 1); |
noboruk | 14:388dd59269c8 | 258 | // (const uint8_t *)"BLE UART", sizeof("BLE UART") - 1); |
Rohit Grover |
2:e060367b9024 | 259 | ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS, |
rgrover1 | 6:e0fc9072e853 | 260 | (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed)); |
yihui | 0:e910d9bb040f | 261 | |
rgrover1 | 12:33153cf38631 | 262 | ble.setAdvertisingInterval(1000); /* 1000ms; in multiples of 0.625ms. */ |
Rohit Grover |
2:e060367b9024 | 263 | ble.startAdvertising(); |
yihui | 0:e910d9bb040f | 264 | |
rgrover1 | 6:e0fc9072e853 | 265 | UARTService uartService(ble); |
rgrover1 | 6:e0fc9072e853 | 266 | uartServicePtr = &uartService; |
yihui | 0:e910d9bb040f | 267 | |
Rohit Grover |
2:e060367b9024 | 268 | while (true) { |
Rohit Grover |
2:e060367b9024 | 269 | ble.waitForEvent(); |
yihui | 0:e910d9bb040f | 270 | } |
yihui | 0:e910d9bb040f | 271 | } |
noboruk | 14:388dd59269c8 | 272 | |
noboruk | 14:388dd59269c8 | 273 | //////////////////////////////////////// |
noboruk | 14:388dd59269c8 | 274 | void board_test( void ) |
noboruk | 14:388dd59269c8 | 275 | { |
noboruk | 14:388dd59269c8 | 276 | // I/O port debug |
noboruk | 14:388dd59269c8 | 277 | cmd_c_wp = 0; |
noboruk | 14:388dd59269c8 | 278 | |
noboruk | 14:388dd59269c8 | 279 | DEBUG.printf("board I/O debug \r\n"); |
noboruk | 14:388dd59269c8 | 280 | output_buf = 0; |
noboruk | 14:388dd59269c8 | 281 | read_IN(); |
noboruk | 14:388dd59269c8 | 282 | while( 1 ) |
noboruk | 14:388dd59269c8 | 283 | { |
noboruk | 14:388dd59269c8 | 284 | wait_ms(200); |
noboruk | 14:388dd59269c8 | 285 | read_IN(); |
noboruk | 14:388dd59269c8 | 286 | DEBUG.printf("%04X,%04X,%04X \r",input_now,ain1_now,ain2_now); |
noboruk | 14:388dd59269c8 | 287 | // |
noboruk | 14:388dd59269c8 | 288 | if( input_now & 0x0001 ){ set_LED(1,1); } else { set_LED(1,0); } |
noboruk | 14:388dd59269c8 | 289 | if( input_now & 0x0002 ){ set_LED(2,1); } else { set_LED(2,0); } |
noboruk | 14:388dd59269c8 | 290 | if( input_now & 0x0004 ){ set_LED(3,1); } else { set_LED(3,0); } |
noboruk | 14:388dd59269c8 | 291 | if( input_now & 0x0008 ){ set_LED(4,1); } else { set_LED(4,0); } |
noboruk | 14:388dd59269c8 | 292 | // |
noboruk | 14:388dd59269c8 | 293 | if( output_buf & 0x0001 ){ set_OUT(1,1); } else { set_OUT(1,0); } |
noboruk | 14:388dd59269c8 | 294 | if( output_buf & 0x0002 ){ set_OUT(2,1); } else { set_OUT(2,0); } |
noboruk | 14:388dd59269c8 | 295 | if( output_buf & 0x0004 ){ set_OUT(3,1); } else { set_OUT(3,0); } |
noboruk | 14:388dd59269c8 | 296 | if( output_buf & 0x0008 ){ set_OUT(4,1); } else { set_OUT(4,0); } |
noboruk | 14:388dd59269c8 | 297 | if( output_buf & 0x0010 ){ set_OUT(5,1); } else { set_OUT(5,0); } |
noboruk | 14:388dd59269c8 | 298 | if( output_buf & 0x0020 ){ set_OUT(6,1); } else { set_OUT(6,0); } |
noboruk | 14:388dd59269c8 | 299 | if( output_buf & 0x0040 ){ set_OUT(7,1); } else { set_OUT(7,0); } |
noboruk | 14:388dd59269c8 | 300 | if( output_buf & 0x0080 ){ set_OUT(8,1); } else { set_OUT(8,0); } |
noboruk | 14:388dd59269c8 | 301 | output_buf++; |
noboruk | 14:388dd59269c8 | 302 | if( uart_cmd_check() != 0 ) |
noboruk | 14:388dd59269c8 | 303 | { |
noboruk | 14:388dd59269c8 | 304 | cmd_check( cmd_str ); |
noboruk | 14:388dd59269c8 | 305 | } |
noboruk | 14:388dd59269c8 | 306 | } |
noboruk | 14:388dd59269c8 | 307 | } |
noboruk | 14:388dd59269c8 | 308 | |
noboruk | 14:388dd59269c8 | 309 | //////////////////////////////////////// |
noboruk | 14:388dd59269c8 | 310 | void set_LED( int num, int val ) |
noboruk | 14:388dd59269c8 | 311 | { |
noboruk | 14:388dd59269c8 | 312 | switch( num ) |
noboruk | 14:388dd59269c8 | 313 | { |
noboruk | 14:388dd59269c8 | 314 | case 1: |
noboruk | 14:388dd59269c8 | 315 | LED_1 = val; |
noboruk | 14:388dd59269c8 | 316 | break; |
noboruk | 14:388dd59269c8 | 317 | case 2: |
noboruk | 14:388dd59269c8 | 318 | LED_2 = val; |
noboruk | 14:388dd59269c8 | 319 | break; |
noboruk | 14:388dd59269c8 | 320 | case 3: |
noboruk | 14:388dd59269c8 | 321 | LED_3 = val; |
noboruk | 14:388dd59269c8 | 322 | break; |
noboruk | 14:388dd59269c8 | 323 | case 4: |
noboruk | 14:388dd59269c8 | 324 | LED_4 = val; |
noboruk | 14:388dd59269c8 | 325 | break; |
noboruk | 14:388dd59269c8 | 326 | } |
noboruk | 14:388dd59269c8 | 327 | } |
noboruk | 14:388dd59269c8 | 328 | |
noboruk | 14:388dd59269c8 | 329 | void set_OUT( int num, int val ) |
noboruk | 14:388dd59269c8 | 330 | { |
noboruk | 14:388dd59269c8 | 331 | switch( num ) |
noboruk | 14:388dd59269c8 | 332 | { |
noboruk | 14:388dd59269c8 | 333 | case 1: |
noboruk | 14:388dd59269c8 | 334 | DO_1 = val; |
noboruk | 14:388dd59269c8 | 335 | break; |
noboruk | 14:388dd59269c8 | 336 | case 2: |
noboruk | 14:388dd59269c8 | 337 | DO_2 = val; |
noboruk | 14:388dd59269c8 | 338 | break; |
noboruk | 14:388dd59269c8 | 339 | case 3: |
noboruk | 14:388dd59269c8 | 340 | DO_3 = val; |
noboruk | 14:388dd59269c8 | 341 | break; |
noboruk | 14:388dd59269c8 | 342 | case 4: |
noboruk | 14:388dd59269c8 | 343 | DO_4 = val; |
noboruk | 14:388dd59269c8 | 344 | break; |
noboruk | 14:388dd59269c8 | 345 | case 5: |
noboruk | 14:388dd59269c8 | 346 | DO_5 = val; |
noboruk | 14:388dd59269c8 | 347 | break; |
noboruk | 14:388dd59269c8 | 348 | case 6: |
noboruk | 14:388dd59269c8 | 349 | DO_6 = val; |
noboruk | 14:388dd59269c8 | 350 | break; |
noboruk | 14:388dd59269c8 | 351 | case 7: |
noboruk | 14:388dd59269c8 | 352 | DO_7 = val; |
noboruk | 14:388dd59269c8 | 353 | break; |
noboruk | 14:388dd59269c8 | 354 | case 8: |
noboruk | 14:388dd59269c8 | 355 | DO_8 = val; |
noboruk | 14:388dd59269c8 | 356 | break; |
noboruk | 14:388dd59269c8 | 357 | } |
noboruk | 14:388dd59269c8 | 358 | } |
noboruk | 14:388dd59269c8 | 359 | |
noboruk | 14:388dd59269c8 | 360 | void read_IN( void ) |
noboruk | 14:388dd59269c8 | 361 | { |
noboruk | 14:388dd59269c8 | 362 | input_old = input_now; |
noboruk | 14:388dd59269c8 | 363 | input_now = 0; |
noboruk | 14:388dd59269c8 | 364 | if( SW_1 == 0 ){ input_now |= 0x0001; } |
noboruk | 14:388dd59269c8 | 365 | if( SW_2 == 0 ){ input_now |= 0x0002; } |
noboruk | 14:388dd59269c8 | 366 | if( SW_3 == 0 ){ input_now |= 0x0004; } |
noboruk | 14:388dd59269c8 | 367 | if( SW_4 == 0 ){ input_now |= 0x0008; } |
noboruk | 14:388dd59269c8 | 368 | if( DI_1 == 0 ){ input_now |= 0x0100; } |
noboruk | 14:388dd59269c8 | 369 | if( DI_2 == 0 ){ input_now |= 0x0200; } |
noboruk | 14:388dd59269c8 | 370 | if( DI_3 == 0 ){ input_now |= 0x0400; } |
noboruk | 14:388dd59269c8 | 371 | if( DI_4 == 0 ){ input_now |= 0x0800; } |
noboruk | 14:388dd59269c8 | 372 | if( DI_5 == 0 ){ input_now |= 0x1000; } |
noboruk | 14:388dd59269c8 | 373 | if( DI_6 == 0 ){ input_now |= 0x2000; } |
noboruk | 14:388dd59269c8 | 374 | if( DI_7 == 0 ){ input_now |= 0x4000; } |
noboruk | 14:388dd59269c8 | 375 | if( DI_8 == 0 ){ input_now |= 0x8000; } |
noboruk | 14:388dd59269c8 | 376 | ain1_old = ain1_now; |
noboruk | 14:388dd59269c8 | 377 | ain2_old = ain2_now; |
noboruk | 14:388dd59269c8 | 378 | ain1_now = AIN_1.read_u16(); |
noboruk | 14:388dd59269c8 | 379 | ain2_now = AIN_2.read_u16();; |
noboruk | 14:388dd59269c8 | 380 | } |
noboruk | 14:388dd59269c8 | 381 | |
noboruk | 14:388dd59269c8 | 382 | void port_clear( void ) |
noboruk | 14:388dd59269c8 | 383 | { |
noboruk | 14:388dd59269c8 | 384 | int i; |
noboruk | 14:388dd59269c8 | 385 | for( i=1; i < 4+1 ; i++ ){ set_LED(i,0); } |
noboruk | 14:388dd59269c8 | 386 | for( i=1; i < 8+1 ; i++ ){ set_OUT(i,0); } |
noboruk | 14:388dd59269c8 | 387 | // |
noboruk | 14:388dd59269c8 | 388 | LED_1 = 1; |
noboruk | 14:388dd59269c8 | 389 | wait_ms(100); |
noboruk | 14:388dd59269c8 | 390 | LED_2 = 1; |
noboruk | 14:388dd59269c8 | 391 | wait_ms(100); |
noboruk | 14:388dd59269c8 | 392 | LED_3 = 1; |
noboruk | 14:388dd59269c8 | 393 | wait_ms(100); |
noboruk | 14:388dd59269c8 | 394 | LED_4 = 1; |
noboruk | 14:388dd59269c8 | 395 | wait_ms(100); |
noboruk | 14:388dd59269c8 | 396 | LED_1 = 0; |
noboruk | 14:388dd59269c8 | 397 | wait_ms(100); |
noboruk | 14:388dd59269c8 | 398 | LED_2 = 0; |
noboruk | 14:388dd59269c8 | 399 | wait_ms(100); |
noboruk | 14:388dd59269c8 | 400 | LED_3 = 0; |
noboruk | 14:388dd59269c8 | 401 | wait_ms(100); |
noboruk | 14:388dd59269c8 | 402 | LED_4 = 0; |
noboruk | 14:388dd59269c8 | 403 | wait_ms(400); |
noboruk | 14:388dd59269c8 | 404 | LED_1 = 1; |
noboruk | 14:388dd59269c8 | 405 | LED_2 = 1; |
noboruk | 14:388dd59269c8 | 406 | LED_3 = 1; |
noboruk | 14:388dd59269c8 | 407 | LED_4 = 1; |
noboruk | 14:388dd59269c8 | 408 | wait_ms(400); |
noboruk | 14:388dd59269c8 | 409 | LED_1 = 0; |
noboruk | 14:388dd59269c8 | 410 | LED_2 = 0; |
noboruk | 14:388dd59269c8 | 411 | LED_3 = 0; |
noboruk | 14:388dd59269c8 | 412 | LED_4 = 0; |
noboruk | 14:388dd59269c8 | 413 | // |
noboruk | 14:388dd59269c8 | 414 | } |
noboruk | 14:388dd59269c8 | 415 | |
noboruk | 14:388dd59269c8 | 416 | uint16_t uart_cmd_check( void ) |
noboruk | 14:388dd59269c8 | 417 | { |
noboruk | 14:388dd59269c8 | 418 | uint16_t res; |
noboruk | 14:388dd59269c8 | 419 | uint8_t c; |
noboruk | 14:388dd59269c8 | 420 | res = 0; |
noboruk | 14:388dd59269c8 | 421 | if( DEBUG.readable() ) |
noboruk | 14:388dd59269c8 | 422 | { |
noboruk | 14:388dd59269c8 | 423 | c = DEBUG.getc(); |
noboruk | 14:388dd59269c8 | 424 | cmd_str[cmd_c_wp] = c; |
noboruk | 14:388dd59269c8 | 425 | cmd_c_wp++; |
noboruk | 14:388dd59269c8 | 426 | if( cmd_c_wp >= 4 ) |
noboruk | 14:388dd59269c8 | 427 | { |
noboruk | 14:388dd59269c8 | 428 | cmd_str[cmd_c_wp] = 0; |
noboruk | 14:388dd59269c8 | 429 | cmd_c_wp = 0; |
noboruk | 14:388dd59269c8 | 430 | res = 1; |
noboruk | 14:388dd59269c8 | 431 | } |
noboruk | 14:388dd59269c8 | 432 | } |
noboruk | 14:388dd59269c8 | 433 | return res; |
noboruk | 14:388dd59269c8 | 434 | } |
noboruk | 14:388dd59269c8 | 435 | |
noboruk | 14:388dd59269c8 | 436 | void cmd_check( uint8_t* s ) |
noboruk | 14:388dd59269c8 | 437 | { |
noboruk | 14:388dd59269c8 | 438 | int val; |
noboruk | 14:388dd59269c8 | 439 | |
noboruk | 14:388dd59269c8 | 440 | DEBUG.printf("\r\ncmd=%s\r\n",s); |
noboruk | 14:388dd59269c8 | 441 | if( s[2] == '0' ) |
noboruk | 14:388dd59269c8 | 442 | { |
noboruk | 14:388dd59269c8 | 443 | val = 0; |
noboruk | 14:388dd59269c8 | 444 | } |
noboruk | 14:388dd59269c8 | 445 | else if( s[2] == '1' ) |
noboruk | 14:388dd59269c8 | 446 | { |
noboruk | 14:388dd59269c8 | 447 | val = 1; |
noboruk | 14:388dd59269c8 | 448 | } |
noboruk | 14:388dd59269c8 | 449 | if( s[0] == 'L' ) |
noboruk | 14:388dd59269c8 | 450 | { |
noboruk | 14:388dd59269c8 | 451 | switch( s[1] ) |
noboruk | 14:388dd59269c8 | 452 | { |
noboruk | 14:388dd59269c8 | 453 | case '1': |
noboruk | 14:388dd59269c8 | 454 | set_LED( 1, val ); |
noboruk | 14:388dd59269c8 | 455 | break; |
noboruk | 14:388dd59269c8 | 456 | case '2': |
noboruk | 14:388dd59269c8 | 457 | set_LED( 2, val ); |
noboruk | 14:388dd59269c8 | 458 | break; |
noboruk | 14:388dd59269c8 | 459 | case '3': |
noboruk | 14:388dd59269c8 | 460 | set_LED( 3, val ); |
noboruk | 14:388dd59269c8 | 461 | break; |
noboruk | 14:388dd59269c8 | 462 | case '4': |
noboruk | 14:388dd59269c8 | 463 | set_LED( 4, val ); |
noboruk | 14:388dd59269c8 | 464 | break; |
noboruk | 14:388dd59269c8 | 465 | } |
noboruk | 14:388dd59269c8 | 466 | return; |
noboruk | 14:388dd59269c8 | 467 | } |
noboruk | 14:388dd59269c8 | 468 | if( s[0] == 'O' ) |
noboruk | 14:388dd59269c8 | 469 | { |
noboruk | 14:388dd59269c8 | 470 | switch( s[1] ) |
noboruk | 14:388dd59269c8 | 471 | { |
noboruk | 14:388dd59269c8 | 472 | case '1': |
noboruk | 14:388dd59269c8 | 473 | set_OUT( 1, val ); |
noboruk | 14:388dd59269c8 | 474 | break; |
noboruk | 14:388dd59269c8 | 475 | case '2': |
noboruk | 14:388dd59269c8 | 476 | set_OUT( 2, val ); |
noboruk | 14:388dd59269c8 | 477 | break; |
noboruk | 14:388dd59269c8 | 478 | case '3': |
noboruk | 14:388dd59269c8 | 479 | set_OUT( 3, val ); |
noboruk | 14:388dd59269c8 | 480 | break; |
noboruk | 14:388dd59269c8 | 481 | case '4': |
noboruk | 14:388dd59269c8 | 482 | set_OUT( 4, val ); |
noboruk | 14:388dd59269c8 | 483 | break; |
noboruk | 14:388dd59269c8 | 484 | case '5': |
noboruk | 14:388dd59269c8 | 485 | set_OUT( 5, val ); |
noboruk | 14:388dd59269c8 | 486 | break; |
noboruk | 14:388dd59269c8 | 487 | case '6': |
noboruk | 14:388dd59269c8 | 488 | set_OUT( 6, val ); |
noboruk | 14:388dd59269c8 | 489 | break; |
noboruk | 14:388dd59269c8 | 490 | case '7': |
noboruk | 14:388dd59269c8 | 491 | set_OUT( 7, val ); |
noboruk | 14:388dd59269c8 | 492 | break; |
noboruk | 14:388dd59269c8 | 493 | case '8': |
noboruk | 14:388dd59269c8 | 494 | set_OUT( 8, val ); |
noboruk | 14:388dd59269c8 | 495 | break; |
noboruk | 14:388dd59269c8 | 496 | } |
noboruk | 14:388dd59269c8 | 497 | return; |
noboruk | 14:388dd59269c8 | 498 | } |
noboruk | 14:388dd59269c8 | 499 | } |
noboruk | 14:388dd59269c8 | 500 | |
noboruk | 14:388dd59269c8 | 501 |