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:
Fri Jan 13 13:46:10 2017 +0000
Revision:
17:663243430dc2
Parent:
16:5df99e9291af
2017-01-13?

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 17:663243430dc2 59 //#define LED_PIN0 P0_8 //med bug can't use
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 17:663243430dc2 103 //DigitalOut LED_0(LED_PIN0);
noboruk 14:388dd59269c8 104 //
noboruk 14:388dd59269c8 105 ////////////////////////////////////////
noboruk 14:388dd59269c8 106 //
noboruk 14:388dd59269c8 107 BLEDevice ble;
noboruk 14:388dd59269c8 108 UARTService *uartServicePtr;
noboruk 14:388dd59269c8 109 Ticker ticker;
noboruk 14:388dd59269c8 110 //
noboruk 14:388dd59269c8 111 ////////////////////////////////////////
noboruk 14:388dd59269c8 112 uint16_t input_now;
noboruk 14:388dd59269c8 113 uint16_t input_old;
noboruk 14:388dd59269c8 114 uint16_t ain1_now;
noboruk 14:388dd59269c8 115 uint16_t ain2_now;
noboruk 14:388dd59269c8 116 uint16_t ain1_old;
noboruk 14:388dd59269c8 117 uint16_t ain2_old;
noboruk 14:388dd59269c8 118 uint16_t output_buf;
noboruk 17:663243430dc2 119 uint16_t save_buf;
yihui 0:e910d9bb040f 120
noboruk 14:388dd59269c8 121 ////////////////////////////////////////
noboruk 14:388dd59269c8 122 void periodicCallback_led_blink( void );
noboruk 14:388dd59269c8 123 void periodicCallback_sw_read( void );
noboruk 14:388dd59269c8 124 void set_LED( int num, int val );
noboruk 14:388dd59269c8 125 void set_OUT( int num, int val );
noboruk 14:388dd59269c8 126 void read_IN( void );
noboruk 14:388dd59269c8 127 void port_clear( void );
noboruk 14:388dd59269c8 128 void cmd_check( uint8_t* s );
noboruk 14:388dd59269c8 129 void board_test( void );
noboruk 14:388dd59269c8 130 //
noboruk 14:388dd59269c8 131 ////////////////////////////////////////
noboruk 14:388dd59269c8 132 uint16_t board_test_fg = 0;
noboruk 14:388dd59269c8 133 uint16_t uart_cmd_check( void );
noboruk 14:388dd59269c8 134 uint16_t cmd_c_wp;
noboruk 14:388dd59269c8 135 uint8_t cmd_str[8];
noboruk 14:388dd59269c8 136 bool update_characteristic_fg;
noboruk 14:388dd59269c8 137 bool change_input_fg;
noboruk 17:663243430dc2 138 bool port_restor_fg;
noboruk 14:388dd59269c8 139 uint16_t adc_update_cnt;
noboruk 17:663243430dc2 140 uint16_t first_update_cnt;
noboruk 14:388dd59269c8 141 //
noboruk 14:388dd59269c8 142 ////////////////////////////////////////
noboruk 14:388dd59269c8 143 // BLEイベント接続時
noboruk 14:388dd59269c8 144 void connectionCallback(const Gap::ConnectionCallbackParams_t * params)
noboruk 14:388dd59269c8 145 {
noboruk 14:388dd59269c8 146 ticker.detach();
noboruk 14:388dd59269c8 147 DEBUG.printf("Connection handle:%u \r\n",params->handle);
noboruk 14:388dd59269c8 148 // stop blinking when we connect
noboruk 17:663243430dc2 149 LED_1 = save_buf & 0x0001;
noboruk 14:388dd59269c8 150 read_IN();
noboruk 16:5df99e9291af 151 ticker.attach(periodicCallback_sw_read, 0.05);
noboruk 14:388dd59269c8 152 update_characteristic_fg = true;
noboruk 17:663243430dc2 153 first_update_cnt = 0;
noboruk 17:663243430dc2 154 port_restor_fg = true;
noboruk 14:388dd59269c8 155 adc_update_cnt = 0;
noboruk 14:388dd59269c8 156 }
yihui 0:e910d9bb040f 157
noboruk 14:388dd59269c8 158 //
noboruk 14:388dd59269c8 159 ////////////////////////////////////////
noboruk 14:388dd59269c8 160 // BLEイベント切断時
rgrover1 13:15764cc1f12c 161 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
yihui 0:e910d9bb040f 162 {
noboruk 17:663243430dc2 163 // int i;
noboruk 14:388dd59269c8 164 update_characteristic_fg = false;
noboruk 17:663243430dc2 165 first_update_cnt = 0;
noboruk 14:388dd59269c8 166 ticker.detach();
noboruk 14:388dd59269c8 167 DEBUG.printf("Disconnected!\n\r");
noboruk 14:388dd59269c8 168 DEBUG.printf("Restarting the advertising process\n\r");
Rohit Grover 2:e060367b9024 169 ble.startAdvertising();
noboruk 14:388dd59269c8 170 ticker.attach(periodicCallback_led_blink, 1);
noboruk 17:663243430dc2 171 // for( i=1; i < 4+1 ; i++ ){ set_LED(i,0); }
noboruk 17:663243430dc2 172 // for( i=1; i < 8+1 ; i++ ){ set_OUT(i,0); }
Rohit Grover 2:e060367b9024 173 }
noboruk 14:388dd59269c8 174 //
noboruk 14:388dd59269c8 175 ////////////////////////////////////////
noboruk 14:388dd59269c8 176 // BLE-UART受信時
rgrover1 12:33153cf38631 177 void onDataWritten(const GattWriteCallbackParams *params)
yihui 0:e910d9bb040f 178 {
noboruk 17:663243430dc2 179 uint8_t* ps;
noboruk 17:663243430dc2 180 uint16_t bytesRead;
noboruk 17:663243430dc2 181 // char send_str[20];
noboruk 17:663243430dc2 182 // uint16_t slen;
noboruk 17:663243430dc2 183
rgrover1 12:33153cf38631 184 if ((uartServicePtr != NULL) && (params->handle == uartServicePtr->getTXCharacteristicHandle())) {
noboruk 17:663243430dc2 185 bytesRead = params->len;
noboruk 14:388dd59269c8 186 DEBUG.printf("received %u bytes\n\r", bytesRead);
noboruk 17:663243430dc2 187 ps = (uint8_t*)(&(params->data[0]));
noboruk 17:663243430dc2 188 cmd_check(ps);
noboruk 17:663243430dc2 189 // sprintf(send_str,"o%04X00000000 \r",save_buf ); //出力ポートデータ
noboruk 17:663243430dc2 190 // slen = strlen(send_str);
noboruk 17:663243430dc2 191 // // BLE-UART送信
noboruk 17:663243430dc2 192 // ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(),(uint8_t*)(&send_str[0]),slen);
yihui 0:e910d9bb040f 193 }
Rohit Grover 2:e060367b9024 194 }
noboruk 14:388dd59269c8 195 //
noboruk 14:388dd59269c8 196 ////////////////////////////////////////
noboruk 14:388dd59269c8 197 // 未接続時周期割り込み
noboruk 14:388dd59269c8 198 void periodicCallback_led_blink(void)
noboruk 14:388dd59269c8 199 {
noboruk 17:663243430dc2 200 // LED_0 = !LED_0;
noboruk 14:388dd59269c8 201 LED_1 = !LED_1;
noboruk 14:388dd59269c8 202 }
noboruk 14:388dd59269c8 203 //
noboruk 14:388dd59269c8 204 ////////////////////////////////////////
noboruk 14:388dd59269c8 205 // 接続時周期割り込み
noboruk 14:388dd59269c8 206 void periodicCallback_sw_read( void )
Rohit Grover 2:e060367b9024 207 {
noboruk 14:388dd59269c8 208 char send_str[20];
noboruk 14:388dd59269c8 209 uint16_t slen;
noboruk 14:388dd59269c8 210
noboruk 14:388dd59269c8 211 read_IN();
noboruk 17:663243430dc2 212 sprintf(send_str,"i%04X%04X%04X \r",input_now,ain1_now,ain2_now );
noboruk 14:388dd59269c8 213 slen = strlen(send_str);
noboruk 14:388dd59269c8 214
noboruk 17:663243430dc2 215 if( first_update_cnt < 10 )
noboruk 14:388dd59269c8 216 {
noboruk 17:663243430dc2 217 first_update_cnt++;
noboruk 14:388dd59269c8 218 change_input_fg = true;
noboruk 17:663243430dc2 219 sprintf(send_str,"o%04X00000000 \r",save_buf ); //出力ポートデータ
noboruk 17:663243430dc2 220 slen = strlen(send_str);
noboruk 14:388dd59269c8 221 }
noboruk 14:388dd59269c8 222 else
noboruk 14:388dd59269c8 223 {
noboruk 14:388dd59269c8 224 change_input_fg = false;
noboruk 14:388dd59269c8 225 }
noboruk 14:388dd59269c8 226
noboruk 14:388dd59269c8 227 if( input_now != input_old )
noboruk 14:388dd59269c8 228 {
noboruk 14:388dd59269c8 229 change_input_fg = true;
noboruk 14:388dd59269c8 230 }
noboruk 14:388dd59269c8 231 adc_update_cnt++;
noboruk 16:5df99e9291af 232 if( adc_update_cnt > 5 )
noboruk 14:388dd59269c8 233 {
noboruk 14:388dd59269c8 234 adc_update_cnt = 0;
noboruk 14:388dd59269c8 235 change_input_fg = true;
noboruk 14:388dd59269c8 236 }
noboruk 14:388dd59269c8 237 if(( update_characteristic_fg == true )&&( change_input_fg == true ))
noboruk 14:388dd59269c8 238 {
noboruk 14:388dd59269c8 239 DEBUG.printf("len=%d,data=%s",slen,send_str);
noboruk 14:388dd59269c8 240 ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(),(uint8_t*)(&send_str[0]),slen);
noboruk 17:663243430dc2 241 // LED_0 = !LED_0;
noboruk 14:388dd59269c8 242 }
Rohit Grover 2:e060367b9024 243 }
noboruk 14:388dd59269c8 244 //
noboruk 14:388dd59269c8 245 ////////////////////////////////////////
noboruk 14:388dd59269c8 246 // メイン
yihui 0:e910d9bb040f 247 int main(void)
yihui 0:e910d9bb040f 248 {
noboruk 14:388dd59269c8 249 DEBUG.baud(9600);
noboruk 14:388dd59269c8 250 port_clear();
noboruk 14:388dd59269c8 251 read_IN();
noboruk 16:5df99e9291af 252 read_IN();
noboruk 14:388dd59269c8 253 DEBUG.printf("\r\n");
noboruk 14:388dd59269c8 254 DEBUG.printf("BLE remote I/O \r\n");
noboruk 15:828ad860628f 255 DEBUG.printf(" nRFUART version\r\n");
noboruk 15:828ad860628f 256 DEBUG.printf(" 2019/12/24\r\n");
noboruk 14:388dd59269c8 257 read_IN();
noboruk 14:388dd59269c8 258 DEBUG.printf("\r\n");
noboruk 14:388dd59269c8 259 if( ( input_now & 0x0003 ) == 0x0003 ){ board_test(); } //SW1,2 ON?
noboruk 14:388dd59269c8 260 //
noboruk 14:388dd59269c8 261 DEBUG.printf("Start program\r\n");
noboruk 14:388dd59269c8 262 ticker.attach(periodicCallback_led_blink, 1);
yihui 0:e910d9bb040f 263
Rohit Grover 2:e060367b9024 264 ble.init();
noboruk 14:388dd59269c8 265 ble.onConnection(connectionCallback);
Rohit Grover 2:e060367b9024 266 ble.onDisconnection(disconnectionCallback);
Rohit Grover 2:e060367b9024 267 ble.onDataWritten(onDataWritten);
yihui 0:e910d9bb040f 268
Rohit Grover 2:e060367b9024 269 /* setup advertising */
Rohit Grover 2:e060367b9024 270 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
Rohit Grover 2:e060367b9024 271 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
Rohit Grover 2:e060367b9024 272 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
noboruk 14:388dd59269c8 273 (const uint8_t *)"BLE IO", sizeof("BLE IO") - 1);
noboruk 14:388dd59269c8 274 // (const uint8_t *)"BLE UART", sizeof("BLE UART") - 1);
Rohit Grover 2:e060367b9024 275 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
rgrover1 6:e0fc9072e853 276 (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
yihui 0:e910d9bb040f 277
rgrover1 12:33153cf38631 278 ble.setAdvertisingInterval(1000); /* 1000ms; in multiples of 0.625ms. */
Rohit Grover 2:e060367b9024 279 ble.startAdvertising();
yihui 0:e910d9bb040f 280
rgrover1 6:e0fc9072e853 281 UARTService uartService(ble);
rgrover1 6:e0fc9072e853 282 uartServicePtr = &uartService;
yihui 0:e910d9bb040f 283
Rohit Grover 2:e060367b9024 284 while (true) {
Rohit Grover 2:e060367b9024 285 ble.waitForEvent();
yihui 0:e910d9bb040f 286 }
yihui 0:e910d9bb040f 287 }
noboruk 14:388dd59269c8 288
noboruk 14:388dd59269c8 289 ////////////////////////////////////////
noboruk 14:388dd59269c8 290 void board_test( void )
noboruk 14:388dd59269c8 291 {
noboruk 14:388dd59269c8 292 // I/O port debug
noboruk 14:388dd59269c8 293 cmd_c_wp = 0;
noboruk 14:388dd59269c8 294
noboruk 14:388dd59269c8 295 DEBUG.printf("board I/O debug \r\n");
noboruk 14:388dd59269c8 296 output_buf = 0;
noboruk 14:388dd59269c8 297 read_IN();
noboruk 16:5df99e9291af 298 read_IN();
noboruk 14:388dd59269c8 299 while( 1 )
noboruk 14:388dd59269c8 300 {
noboruk 14:388dd59269c8 301 wait_ms(200);
noboruk 17:663243430dc2 302 // LED_0 = !LED_0;
noboruk 14:388dd59269c8 303 read_IN();
noboruk 14:388dd59269c8 304 DEBUG.printf("%04X,%04X,%04X \r",input_now,ain1_now,ain2_now);
noboruk 14:388dd59269c8 305 //
noboruk 14:388dd59269c8 306 if( input_now & 0x0001 ){ set_LED(1,1); } else { set_LED(1,0); }
noboruk 14:388dd59269c8 307 if( input_now & 0x0002 ){ set_LED(2,1); } else { set_LED(2,0); }
noboruk 14:388dd59269c8 308 if( input_now & 0x0004 ){ set_LED(3,1); } else { set_LED(3,0); }
noboruk 14:388dd59269c8 309 if( input_now & 0x0008 ){ set_LED(4,1); } else { set_LED(4,0); }
noboruk 14:388dd59269c8 310 //
noboruk 14:388dd59269c8 311 if( output_buf & 0x0001 ){ set_OUT(1,1); } else { set_OUT(1,0); }
noboruk 14:388dd59269c8 312 if( output_buf & 0x0002 ){ set_OUT(2,1); } else { set_OUT(2,0); }
noboruk 14:388dd59269c8 313 if( output_buf & 0x0004 ){ set_OUT(3,1); } else { set_OUT(3,0); }
noboruk 14:388dd59269c8 314 if( output_buf & 0x0008 ){ set_OUT(4,1); } else { set_OUT(4,0); }
noboruk 14:388dd59269c8 315 if( output_buf & 0x0010 ){ set_OUT(5,1); } else { set_OUT(5,0); }
noboruk 14:388dd59269c8 316 if( output_buf & 0x0020 ){ set_OUT(6,1); } else { set_OUT(6,0); }
noboruk 14:388dd59269c8 317 if( output_buf & 0x0040 ){ set_OUT(7,1); } else { set_OUT(7,0); }
noboruk 14:388dd59269c8 318 if( output_buf & 0x0080 ){ set_OUT(8,1); } else { set_OUT(8,0); }
noboruk 14:388dd59269c8 319 output_buf++;
noboruk 14:388dd59269c8 320 if( uart_cmd_check() != 0 )
noboruk 14:388dd59269c8 321 {
noboruk 14:388dd59269c8 322 cmd_check( cmd_str );
noboruk 14:388dd59269c8 323 }
noboruk 14:388dd59269c8 324 }
noboruk 14:388dd59269c8 325 }
noboruk 14:388dd59269c8 326
noboruk 14:388dd59269c8 327 ////////////////////////////////////////
noboruk 14:388dd59269c8 328 void set_LED( int num, int val )
noboruk 14:388dd59269c8 329 {
noboruk 14:388dd59269c8 330 switch( num )
noboruk 14:388dd59269c8 331 {
noboruk 14:388dd59269c8 332 case 1:
noboruk 14:388dd59269c8 333 LED_1 = val;
noboruk 17:663243430dc2 334 if( val ){ save_buf |= 0x0001; }else{ save_buf &= 0xfffe; }
noboruk 14:388dd59269c8 335 break;
noboruk 14:388dd59269c8 336 case 2:
noboruk 14:388dd59269c8 337 LED_2 = val;
noboruk 17:663243430dc2 338 if( val ){ save_buf |= 0x0002; }else{ save_buf &= 0xfffd; }
noboruk 14:388dd59269c8 339 break;
noboruk 14:388dd59269c8 340 case 3:
noboruk 14:388dd59269c8 341 LED_3 = val;
noboruk 17:663243430dc2 342 if( val ){ save_buf |= 0x0004; }else{ save_buf &= 0xfffb; }
noboruk 14:388dd59269c8 343 break;
noboruk 14:388dd59269c8 344 case 4:
noboruk 14:388dd59269c8 345 LED_4 = val;
noboruk 17:663243430dc2 346 if( val ){ save_buf |= 0x0008; }else{ save_buf &= 0xfff7; }
noboruk 14:388dd59269c8 347 break;
noboruk 14:388dd59269c8 348 }
noboruk 14:388dd59269c8 349 }
noboruk 14:388dd59269c8 350
noboruk 14:388dd59269c8 351 void set_OUT( int num, int val )
noboruk 14:388dd59269c8 352 {
noboruk 14:388dd59269c8 353 switch( num )
noboruk 14:388dd59269c8 354 {
noboruk 14:388dd59269c8 355 case 1:
noboruk 14:388dd59269c8 356 DO_1 = val;
noboruk 17:663243430dc2 357 if( val ){ save_buf |= 0x0100; }else{ save_buf &= 0xfeff; }
noboruk 14:388dd59269c8 358 break;
noboruk 14:388dd59269c8 359 case 2:
noboruk 14:388dd59269c8 360 DO_2 = val;
noboruk 17:663243430dc2 361 if( val ){ save_buf |= 0x0200; }else{ save_buf &= 0xfdff; }
noboruk 14:388dd59269c8 362 break;
noboruk 14:388dd59269c8 363 case 3:
noboruk 14:388dd59269c8 364 DO_3 = val;
noboruk 17:663243430dc2 365 if( val ){ save_buf |= 0x0400; }else{ save_buf &= 0xfbff; }
noboruk 14:388dd59269c8 366 break;
noboruk 14:388dd59269c8 367 case 4:
noboruk 14:388dd59269c8 368 DO_4 = val;
noboruk 17:663243430dc2 369 if( val ){ save_buf |= 0x0800; }else{ save_buf &= 0xf7ff; }
noboruk 14:388dd59269c8 370 break;
noboruk 14:388dd59269c8 371 case 5:
noboruk 14:388dd59269c8 372 DO_5 = val;
noboruk 17:663243430dc2 373 if( val ){ save_buf |= 0x1000; }else{ save_buf &= 0xefff; }
noboruk 14:388dd59269c8 374 break;
noboruk 14:388dd59269c8 375 case 6:
noboruk 14:388dd59269c8 376 DO_6 = val;
noboruk 17:663243430dc2 377 if( val ){ save_buf |= 0x2000; }else{ save_buf &= 0xdfff; }
noboruk 14:388dd59269c8 378 break;
noboruk 14:388dd59269c8 379 case 7:
noboruk 14:388dd59269c8 380 DO_7 = val;
noboruk 17:663243430dc2 381 if( val ){ save_buf |= 0x4000; }else{ save_buf &= 0xbfff; }
noboruk 14:388dd59269c8 382 break;
noboruk 14:388dd59269c8 383 case 8:
noboruk 14:388dd59269c8 384 DO_8 = val;
noboruk 17:663243430dc2 385 if( val ){ save_buf |= 0x8000; }else{ save_buf &= 0x7fff; }
noboruk 14:388dd59269c8 386 break;
noboruk 14:388dd59269c8 387 }
noboruk 14:388dd59269c8 388 }
noboruk 14:388dd59269c8 389
noboruk 14:388dd59269c8 390 void read_IN( void )
noboruk 14:388dd59269c8 391 {
noboruk 14:388dd59269c8 392 input_old = input_now;
noboruk 14:388dd59269c8 393 input_now = 0;
noboruk 14:388dd59269c8 394 if( SW_1 == 0 ){ input_now |= 0x0001; }
noboruk 14:388dd59269c8 395 if( SW_2 == 0 ){ input_now |= 0x0002; }
noboruk 14:388dd59269c8 396 if( SW_3 == 0 ){ input_now |= 0x0004; }
noboruk 14:388dd59269c8 397 if( SW_4 == 0 ){ input_now |= 0x0008; }
noboruk 14:388dd59269c8 398 if( DI_1 == 0 ){ input_now |= 0x0100; }
noboruk 14:388dd59269c8 399 if( DI_2 == 0 ){ input_now |= 0x0200; }
noboruk 14:388dd59269c8 400 if( DI_3 == 0 ){ input_now |= 0x0400; }
noboruk 14:388dd59269c8 401 if( DI_4 == 0 ){ input_now |= 0x0800; }
noboruk 14:388dd59269c8 402 if( DI_5 == 0 ){ input_now |= 0x1000; }
noboruk 14:388dd59269c8 403 if( DI_6 == 0 ){ input_now |= 0x2000; }
noboruk 14:388dd59269c8 404 if( DI_7 == 0 ){ input_now |= 0x4000; }
noboruk 14:388dd59269c8 405 if( DI_8 == 0 ){ input_now |= 0x8000; }
noboruk 14:388dd59269c8 406 ain1_old = ain1_now;
noboruk 16:5df99e9291af 407 ain1_now = AIN_1.read_u16();
noboruk 14:388dd59269c8 408 ain2_old = ain2_now;
noboruk 16:5df99e9291af 409 ain2_now = AIN_2.read_u16();
noboruk 14:388dd59269c8 410 }
noboruk 14:388dd59269c8 411
noboruk 14:388dd59269c8 412 void port_clear( void )
noboruk 14:388dd59269c8 413 {
noboruk 14:388dd59269c8 414 int i;
noboruk 14:388dd59269c8 415 for( i=1; i < 4+1 ; i++ ){ set_LED(i,0); }
noboruk 14:388dd59269c8 416 for( i=1; i < 8+1 ; i++ ){ set_OUT(i,0); }
noboruk 14:388dd59269c8 417 //
noboruk 14:388dd59269c8 418 LED_1 = 1;
noboruk 14:388dd59269c8 419 wait_ms(100);
noboruk 14:388dd59269c8 420 LED_2 = 1;
noboruk 14:388dd59269c8 421 wait_ms(100);
noboruk 14:388dd59269c8 422 LED_3 = 1;
noboruk 14:388dd59269c8 423 wait_ms(100);
noboruk 14:388dd59269c8 424 LED_4 = 1;
noboruk 14:388dd59269c8 425 wait_ms(100);
noboruk 14:388dd59269c8 426 LED_1 = 0;
noboruk 14:388dd59269c8 427 wait_ms(100);
noboruk 14:388dd59269c8 428 LED_2 = 0;
noboruk 14:388dd59269c8 429 wait_ms(100);
noboruk 14:388dd59269c8 430 LED_3 = 0;
noboruk 14:388dd59269c8 431 wait_ms(100);
noboruk 14:388dd59269c8 432 LED_4 = 0;
noboruk 14:388dd59269c8 433 wait_ms(400);
noboruk 14:388dd59269c8 434 LED_1 = 1;
noboruk 14:388dd59269c8 435 LED_2 = 1;
noboruk 14:388dd59269c8 436 LED_3 = 1;
noboruk 14:388dd59269c8 437 LED_4 = 1;
noboruk 14:388dd59269c8 438 wait_ms(400);
noboruk 14:388dd59269c8 439 LED_1 = 0;
noboruk 14:388dd59269c8 440 LED_2 = 0;
noboruk 14:388dd59269c8 441 LED_3 = 0;
noboruk 14:388dd59269c8 442 LED_4 = 0;
noboruk 17:663243430dc2 443 save_buf = 0;
noboruk 14:388dd59269c8 444 //
noboruk 14:388dd59269c8 445 }
noboruk 14:388dd59269c8 446
noboruk 14:388dd59269c8 447 uint16_t uart_cmd_check( void )
noboruk 14:388dd59269c8 448 {
noboruk 14:388dd59269c8 449 uint16_t res;
noboruk 14:388dd59269c8 450 uint8_t c;
noboruk 14:388dd59269c8 451 res = 0;
noboruk 14:388dd59269c8 452 if( DEBUG.readable() )
noboruk 14:388dd59269c8 453 {
noboruk 14:388dd59269c8 454 c = DEBUG.getc();
noboruk 14:388dd59269c8 455 cmd_str[cmd_c_wp] = c;
noboruk 14:388dd59269c8 456 cmd_c_wp++;
noboruk 14:388dd59269c8 457 if( cmd_c_wp >= 4 )
noboruk 14:388dd59269c8 458 {
noboruk 14:388dd59269c8 459 cmd_str[cmd_c_wp] = 0;
noboruk 14:388dd59269c8 460 cmd_c_wp = 0;
noboruk 14:388dd59269c8 461 res = 1;
noboruk 14:388dd59269c8 462 }
noboruk 14:388dd59269c8 463 }
noboruk 14:388dd59269c8 464 return res;
noboruk 14:388dd59269c8 465 }
noboruk 14:388dd59269c8 466
noboruk 14:388dd59269c8 467 void cmd_check( uint8_t* s )
noboruk 14:388dd59269c8 468 {
noboruk 14:388dd59269c8 469 int val;
noboruk 14:388dd59269c8 470
noboruk 14:388dd59269c8 471 DEBUG.printf("\r\ncmd=%s\r\n",s);
noboruk 14:388dd59269c8 472 if( s[2] == '0' )
noboruk 14:388dd59269c8 473 {
noboruk 14:388dd59269c8 474 val = 0;
noboruk 14:388dd59269c8 475 }
noboruk 14:388dd59269c8 476 else if( s[2] == '1' )
noboruk 14:388dd59269c8 477 {
noboruk 14:388dd59269c8 478 val = 1;
noboruk 14:388dd59269c8 479 }
noboruk 14:388dd59269c8 480 if( s[0] == 'L' )
noboruk 14:388dd59269c8 481 {
noboruk 14:388dd59269c8 482 switch( s[1] )
noboruk 14:388dd59269c8 483 {
noboruk 14:388dd59269c8 484 case '1':
noboruk 14:388dd59269c8 485 set_LED( 1, val );
noboruk 14:388dd59269c8 486 break;
noboruk 14:388dd59269c8 487 case '2':
noboruk 14:388dd59269c8 488 set_LED( 2, val );
noboruk 14:388dd59269c8 489 break;
noboruk 14:388dd59269c8 490 case '3':
noboruk 14:388dd59269c8 491 set_LED( 3, val );
noboruk 14:388dd59269c8 492 break;
noboruk 14:388dd59269c8 493 case '4':
noboruk 14:388dd59269c8 494 set_LED( 4, val );
noboruk 14:388dd59269c8 495 break;
noboruk 14:388dd59269c8 496 }
noboruk 14:388dd59269c8 497 return;
noboruk 14:388dd59269c8 498 }
noboruk 14:388dd59269c8 499 if( s[0] == 'O' )
noboruk 14:388dd59269c8 500 {
noboruk 14:388dd59269c8 501 switch( s[1] )
noboruk 14:388dd59269c8 502 {
noboruk 14:388dd59269c8 503 case '1':
noboruk 14:388dd59269c8 504 set_OUT( 1, val );
noboruk 14:388dd59269c8 505 break;
noboruk 14:388dd59269c8 506 case '2':
noboruk 14:388dd59269c8 507 set_OUT( 2, val );
noboruk 14:388dd59269c8 508 break;
noboruk 14:388dd59269c8 509 case '3':
noboruk 14:388dd59269c8 510 set_OUT( 3, val );
noboruk 14:388dd59269c8 511 break;
noboruk 14:388dd59269c8 512 case '4':
noboruk 14:388dd59269c8 513 set_OUT( 4, val );
noboruk 14:388dd59269c8 514 break;
noboruk 14:388dd59269c8 515 case '5':
noboruk 14:388dd59269c8 516 set_OUT( 5, val );
noboruk 14:388dd59269c8 517 break;
noboruk 14:388dd59269c8 518 case '6':
noboruk 14:388dd59269c8 519 set_OUT( 6, val );
noboruk 14:388dd59269c8 520 break;
noboruk 14:388dd59269c8 521 case '7':
noboruk 14:388dd59269c8 522 set_OUT( 7, val );
noboruk 14:388dd59269c8 523 break;
noboruk 14:388dd59269c8 524 case '8':
noboruk 14:388dd59269c8 525 set_OUT( 8, val );
noboruk 14:388dd59269c8 526 break;
noboruk 14:388dd59269c8 527 }
noboruk 14:388dd59269c8 528 return;
noboruk 14:388dd59269c8 529 }
noboruk 14:388dd59269c8 530 }
noboruk 14:388dd59269c8 531
noboruk 14:388dd59269c8 532