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 Bluetooth Low Energy

Committer:
noboruk
Date:
Wed Dec 28 18:10:12 2016 +0000
Revision:
16:5df99e9291af
Parent:
15:828ad860628f
Child:
17:663243430dc2
1.0;

Who changed what in which revision?

UserRevisionLine numberNew 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 16:5df99e9291af 148 ticker.attach(periodicCallback_sw_read, 0.05);
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 16:5df99e9291af 218 if( adc_update_cnt > 5 )
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 16:5df99e9291af 237 read_IN();
noboruk 14:388dd59269c8 238 DEBUG.printf("\r\n");
noboruk 14:388dd59269c8 239 DEBUG.printf("BLE remote I/O \r\n");
noboruk 15:828ad860628f 240 DEBUG.printf(" nRFUART version\r\n");
noboruk 15:828ad860628f 241 DEBUG.printf(" 2019/12/24\r\n");
noboruk 14:388dd59269c8 242 read_IN();
noboruk 14:388dd59269c8 243 DEBUG.printf("\r\n");
noboruk 14:388dd59269c8 244 if( ( input_now & 0x0003 ) == 0x0003 ){ board_test(); } //SW1,2 ON?
noboruk 14:388dd59269c8 245 //
noboruk 14:388dd59269c8 246 DEBUG.printf("Start program\r\n");
noboruk 14:388dd59269c8 247 ticker.attach(periodicCallback_led_blink, 1);
yihui 0:e910d9bb040f 248
Rohit Grover 2:e060367b9024 249 ble.init();
noboruk 14:388dd59269c8 250 ble.onConnection(connectionCallback);
Rohit Grover 2:e060367b9024 251 ble.onDisconnection(disconnectionCallback);
Rohit Grover 2:e060367b9024 252 ble.onDataWritten(onDataWritten);
yihui 0:e910d9bb040f 253
Rohit Grover 2:e060367b9024 254 /* setup advertising */
Rohit Grover 2:e060367b9024 255 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
Rohit Grover 2:e060367b9024 256 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
Rohit Grover 2:e060367b9024 257 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
noboruk 14:388dd59269c8 258 (const uint8_t *)"BLE IO", sizeof("BLE IO") - 1);
noboruk 14:388dd59269c8 259 // (const uint8_t *)"BLE UART", sizeof("BLE UART") - 1);
Rohit Grover 2:e060367b9024 260 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
rgrover1 6:e0fc9072e853 261 (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
yihui 0:e910d9bb040f 262
rgrover1 12:33153cf38631 263 ble.setAdvertisingInterval(1000); /* 1000ms; in multiples of 0.625ms. */
Rohit Grover 2:e060367b9024 264 ble.startAdvertising();
yihui 0:e910d9bb040f 265
rgrover1 6:e0fc9072e853 266 UARTService uartService(ble);
rgrover1 6:e0fc9072e853 267 uartServicePtr = &uartService;
yihui 0:e910d9bb040f 268
Rohit Grover 2:e060367b9024 269 while (true) {
Rohit Grover 2:e060367b9024 270 ble.waitForEvent();
yihui 0:e910d9bb040f 271 }
yihui 0:e910d9bb040f 272 }
noboruk 14:388dd59269c8 273
noboruk 14:388dd59269c8 274 ////////////////////////////////////////
noboruk 14:388dd59269c8 275 void board_test( void )
noboruk 14:388dd59269c8 276 {
noboruk 14:388dd59269c8 277 // I/O port debug
noboruk 14:388dd59269c8 278 cmd_c_wp = 0;
noboruk 14:388dd59269c8 279
noboruk 14:388dd59269c8 280 DEBUG.printf("board I/O debug \r\n");
noboruk 14:388dd59269c8 281 output_buf = 0;
noboruk 14:388dd59269c8 282 read_IN();
noboruk 16:5df99e9291af 283 read_IN();
noboruk 14:388dd59269c8 284 while( 1 )
noboruk 14:388dd59269c8 285 {
noboruk 14:388dd59269c8 286 wait_ms(200);
noboruk 14:388dd59269c8 287 read_IN();
noboruk 14:388dd59269c8 288 DEBUG.printf("%04X,%04X,%04X \r",input_now,ain1_now,ain2_now);
noboruk 14:388dd59269c8 289 //
noboruk 14:388dd59269c8 290 if( input_now & 0x0001 ){ set_LED(1,1); } else { set_LED(1,0); }
noboruk 14:388dd59269c8 291 if( input_now & 0x0002 ){ set_LED(2,1); } else { set_LED(2,0); }
noboruk 14:388dd59269c8 292 if( input_now & 0x0004 ){ set_LED(3,1); } else { set_LED(3,0); }
noboruk 14:388dd59269c8 293 if( input_now & 0x0008 ){ set_LED(4,1); } else { set_LED(4,0); }
noboruk 14:388dd59269c8 294 //
noboruk 14:388dd59269c8 295 if( output_buf & 0x0001 ){ set_OUT(1,1); } else { set_OUT(1,0); }
noboruk 14:388dd59269c8 296 if( output_buf & 0x0002 ){ set_OUT(2,1); } else { set_OUT(2,0); }
noboruk 14:388dd59269c8 297 if( output_buf & 0x0004 ){ set_OUT(3,1); } else { set_OUT(3,0); }
noboruk 14:388dd59269c8 298 if( output_buf & 0x0008 ){ set_OUT(4,1); } else { set_OUT(4,0); }
noboruk 14:388dd59269c8 299 if( output_buf & 0x0010 ){ set_OUT(5,1); } else { set_OUT(5,0); }
noboruk 14:388dd59269c8 300 if( output_buf & 0x0020 ){ set_OUT(6,1); } else { set_OUT(6,0); }
noboruk 14:388dd59269c8 301 if( output_buf & 0x0040 ){ set_OUT(7,1); } else { set_OUT(7,0); }
noboruk 14:388dd59269c8 302 if( output_buf & 0x0080 ){ set_OUT(8,1); } else { set_OUT(8,0); }
noboruk 14:388dd59269c8 303 output_buf++;
noboruk 14:388dd59269c8 304 if( uart_cmd_check() != 0 )
noboruk 14:388dd59269c8 305 {
noboruk 14:388dd59269c8 306 cmd_check( cmd_str );
noboruk 14:388dd59269c8 307 }
noboruk 14:388dd59269c8 308 }
noboruk 14:388dd59269c8 309 }
noboruk 14:388dd59269c8 310
noboruk 14:388dd59269c8 311 ////////////////////////////////////////
noboruk 14:388dd59269c8 312 void set_LED( int num, int val )
noboruk 14:388dd59269c8 313 {
noboruk 14:388dd59269c8 314 switch( num )
noboruk 14:388dd59269c8 315 {
noboruk 14:388dd59269c8 316 case 1:
noboruk 14:388dd59269c8 317 LED_1 = val;
noboruk 14:388dd59269c8 318 break;
noboruk 14:388dd59269c8 319 case 2:
noboruk 14:388dd59269c8 320 LED_2 = val;
noboruk 14:388dd59269c8 321 break;
noboruk 14:388dd59269c8 322 case 3:
noboruk 14:388dd59269c8 323 LED_3 = val;
noboruk 14:388dd59269c8 324 break;
noboruk 14:388dd59269c8 325 case 4:
noboruk 14:388dd59269c8 326 LED_4 = val;
noboruk 14:388dd59269c8 327 break;
noboruk 14:388dd59269c8 328 }
noboruk 14:388dd59269c8 329 }
noboruk 14:388dd59269c8 330
noboruk 14:388dd59269c8 331 void set_OUT( int num, int val )
noboruk 14:388dd59269c8 332 {
noboruk 14:388dd59269c8 333 switch( num )
noboruk 14:388dd59269c8 334 {
noboruk 14:388dd59269c8 335 case 1:
noboruk 14:388dd59269c8 336 DO_1 = val;
noboruk 14:388dd59269c8 337 break;
noboruk 14:388dd59269c8 338 case 2:
noboruk 14:388dd59269c8 339 DO_2 = val;
noboruk 14:388dd59269c8 340 break;
noboruk 14:388dd59269c8 341 case 3:
noboruk 14:388dd59269c8 342 DO_3 = val;
noboruk 14:388dd59269c8 343 break;
noboruk 14:388dd59269c8 344 case 4:
noboruk 14:388dd59269c8 345 DO_4 = val;
noboruk 14:388dd59269c8 346 break;
noboruk 14:388dd59269c8 347 case 5:
noboruk 14:388dd59269c8 348 DO_5 = val;
noboruk 14:388dd59269c8 349 break;
noboruk 14:388dd59269c8 350 case 6:
noboruk 14:388dd59269c8 351 DO_6 = val;
noboruk 14:388dd59269c8 352 break;
noboruk 14:388dd59269c8 353 case 7:
noboruk 14:388dd59269c8 354 DO_7 = val;
noboruk 14:388dd59269c8 355 break;
noboruk 14:388dd59269c8 356 case 8:
noboruk 14:388dd59269c8 357 DO_8 = val;
noboruk 14:388dd59269c8 358 break;
noboruk 14:388dd59269c8 359 }
noboruk 14:388dd59269c8 360 }
noboruk 14:388dd59269c8 361
noboruk 14:388dd59269c8 362 void read_IN( void )
noboruk 14:388dd59269c8 363 {
noboruk 14:388dd59269c8 364 input_old = input_now;
noboruk 14:388dd59269c8 365 input_now = 0;
noboruk 14:388dd59269c8 366 if( SW_1 == 0 ){ input_now |= 0x0001; }
noboruk 14:388dd59269c8 367 if( SW_2 == 0 ){ input_now |= 0x0002; }
noboruk 14:388dd59269c8 368 if( SW_3 == 0 ){ input_now |= 0x0004; }
noboruk 14:388dd59269c8 369 if( SW_4 == 0 ){ input_now |= 0x0008; }
noboruk 14:388dd59269c8 370 if( DI_1 == 0 ){ input_now |= 0x0100; }
noboruk 14:388dd59269c8 371 if( DI_2 == 0 ){ input_now |= 0x0200; }
noboruk 14:388dd59269c8 372 if( DI_3 == 0 ){ input_now |= 0x0400; }
noboruk 14:388dd59269c8 373 if( DI_4 == 0 ){ input_now |= 0x0800; }
noboruk 14:388dd59269c8 374 if( DI_5 == 0 ){ input_now |= 0x1000; }
noboruk 14:388dd59269c8 375 if( DI_6 == 0 ){ input_now |= 0x2000; }
noboruk 14:388dd59269c8 376 if( DI_7 == 0 ){ input_now |= 0x4000; }
noboruk 14:388dd59269c8 377 if( DI_8 == 0 ){ input_now |= 0x8000; }
noboruk 14:388dd59269c8 378 ain1_old = ain1_now;
noboruk 16:5df99e9291af 379 ain1_now = AIN_1.read_u16();
noboruk 14:388dd59269c8 380 ain2_old = ain2_now;
noboruk 16:5df99e9291af 381 ain2_now = AIN_2.read_u16();
noboruk 14:388dd59269c8 382 }
noboruk 14:388dd59269c8 383
noboruk 14:388dd59269c8 384 void port_clear( void )
noboruk 14:388dd59269c8 385 {
noboruk 14:388dd59269c8 386 int i;
noboruk 14:388dd59269c8 387 for( i=1; i < 4+1 ; i++ ){ set_LED(i,0); }
noboruk 14:388dd59269c8 388 for( i=1; i < 8+1 ; i++ ){ set_OUT(i,0); }
noboruk 14:388dd59269c8 389 //
noboruk 14:388dd59269c8 390 LED_1 = 1;
noboruk 14:388dd59269c8 391 wait_ms(100);
noboruk 14:388dd59269c8 392 LED_2 = 1;
noboruk 14:388dd59269c8 393 wait_ms(100);
noboruk 14:388dd59269c8 394 LED_3 = 1;
noboruk 14:388dd59269c8 395 wait_ms(100);
noboruk 14:388dd59269c8 396 LED_4 = 1;
noboruk 14:388dd59269c8 397 wait_ms(100);
noboruk 14:388dd59269c8 398 LED_1 = 0;
noboruk 14:388dd59269c8 399 wait_ms(100);
noboruk 14:388dd59269c8 400 LED_2 = 0;
noboruk 14:388dd59269c8 401 wait_ms(100);
noboruk 14:388dd59269c8 402 LED_3 = 0;
noboruk 14:388dd59269c8 403 wait_ms(100);
noboruk 14:388dd59269c8 404 LED_4 = 0;
noboruk 14:388dd59269c8 405 wait_ms(400);
noboruk 14:388dd59269c8 406 LED_1 = 1;
noboruk 14:388dd59269c8 407 LED_2 = 1;
noboruk 14:388dd59269c8 408 LED_3 = 1;
noboruk 14:388dd59269c8 409 LED_4 = 1;
noboruk 14:388dd59269c8 410 wait_ms(400);
noboruk 14:388dd59269c8 411 LED_1 = 0;
noboruk 14:388dd59269c8 412 LED_2 = 0;
noboruk 14:388dd59269c8 413 LED_3 = 0;
noboruk 14:388dd59269c8 414 LED_4 = 0;
noboruk 14:388dd59269c8 415 //
noboruk 14:388dd59269c8 416 }
noboruk 14:388dd59269c8 417
noboruk 14:388dd59269c8 418 uint16_t uart_cmd_check( void )
noboruk 14:388dd59269c8 419 {
noboruk 14:388dd59269c8 420 uint16_t res;
noboruk 14:388dd59269c8 421 uint8_t c;
noboruk 14:388dd59269c8 422 res = 0;
noboruk 14:388dd59269c8 423 if( DEBUG.readable() )
noboruk 14:388dd59269c8 424 {
noboruk 14:388dd59269c8 425 c = DEBUG.getc();
noboruk 14:388dd59269c8 426 cmd_str[cmd_c_wp] = c;
noboruk 14:388dd59269c8 427 cmd_c_wp++;
noboruk 14:388dd59269c8 428 if( cmd_c_wp >= 4 )
noboruk 14:388dd59269c8 429 {
noboruk 14:388dd59269c8 430 cmd_str[cmd_c_wp] = 0;
noboruk 14:388dd59269c8 431 cmd_c_wp = 0;
noboruk 14:388dd59269c8 432 res = 1;
noboruk 14:388dd59269c8 433 }
noboruk 14:388dd59269c8 434 }
noboruk 14:388dd59269c8 435 return res;
noboruk 14:388dd59269c8 436 }
noboruk 14:388dd59269c8 437
noboruk 14:388dd59269c8 438 void cmd_check( uint8_t* s )
noboruk 14:388dd59269c8 439 {
noboruk 14:388dd59269c8 440 int val;
noboruk 14:388dd59269c8 441
noboruk 14:388dd59269c8 442 DEBUG.printf("\r\ncmd=%s\r\n",s);
noboruk 14:388dd59269c8 443 if( s[2] == '0' )
noboruk 14:388dd59269c8 444 {
noboruk 14:388dd59269c8 445 val = 0;
noboruk 14:388dd59269c8 446 }
noboruk 14:388dd59269c8 447 else if( s[2] == '1' )
noboruk 14:388dd59269c8 448 {
noboruk 14:388dd59269c8 449 val = 1;
noboruk 14:388dd59269c8 450 }
noboruk 14:388dd59269c8 451 if( s[0] == 'L' )
noboruk 14:388dd59269c8 452 {
noboruk 14:388dd59269c8 453 switch( s[1] )
noboruk 14:388dd59269c8 454 {
noboruk 14:388dd59269c8 455 case '1':
noboruk 14:388dd59269c8 456 set_LED( 1, val );
noboruk 14:388dd59269c8 457 break;
noboruk 14:388dd59269c8 458 case '2':
noboruk 14:388dd59269c8 459 set_LED( 2, val );
noboruk 14:388dd59269c8 460 break;
noboruk 14:388dd59269c8 461 case '3':
noboruk 14:388dd59269c8 462 set_LED( 3, val );
noboruk 14:388dd59269c8 463 break;
noboruk 14:388dd59269c8 464 case '4':
noboruk 14:388dd59269c8 465 set_LED( 4, val );
noboruk 14:388dd59269c8 466 break;
noboruk 14:388dd59269c8 467 }
noboruk 14:388dd59269c8 468 return;
noboruk 14:388dd59269c8 469 }
noboruk 14:388dd59269c8 470 if( s[0] == 'O' )
noboruk 14:388dd59269c8 471 {
noboruk 14:388dd59269c8 472 switch( s[1] )
noboruk 14:388dd59269c8 473 {
noboruk 14:388dd59269c8 474 case '1':
noboruk 14:388dd59269c8 475 set_OUT( 1, val );
noboruk 14:388dd59269c8 476 break;
noboruk 14:388dd59269c8 477 case '2':
noboruk 14:388dd59269c8 478 set_OUT( 2, val );
noboruk 14:388dd59269c8 479 break;
noboruk 14:388dd59269c8 480 case '3':
noboruk 14:388dd59269c8 481 set_OUT( 3, val );
noboruk 14:388dd59269c8 482 break;
noboruk 14:388dd59269c8 483 case '4':
noboruk 14:388dd59269c8 484 set_OUT( 4, val );
noboruk 14:388dd59269c8 485 break;
noboruk 14:388dd59269c8 486 case '5':
noboruk 14:388dd59269c8 487 set_OUT( 5, val );
noboruk 14:388dd59269c8 488 break;
noboruk 14:388dd59269c8 489 case '6':
noboruk 14:388dd59269c8 490 set_OUT( 6, val );
noboruk 14:388dd59269c8 491 break;
noboruk 14:388dd59269c8 492 case '7':
noboruk 14:388dd59269c8 493 set_OUT( 7, val );
noboruk 14:388dd59269c8 494 break;
noboruk 14:388dd59269c8 495 case '8':
noboruk 14:388dd59269c8 496 set_OUT( 8, val );
noboruk 14:388dd59269c8 497 break;
noboruk 14:388dd59269c8 498 }
noboruk 14:388dd59269c8 499 return;
noboruk 14:388dd59269c8 500 }
noboruk 14:388dd59269c8 501 }
noboruk 14:388dd59269c8 502
noboruk 14:388dd59269c8 503