// // main loop // int main(void) { #ifdef DEBUG #if __USE_USB usbCDC ser; ser.connect(); #else CSerial ser; ser.settings(115200); #endif CDebug dbg(ser); dbg.start(); #endif // // your setup code here // myBLE ble; ble.enable(128); bleBatteryLevel bl(ble); // declare Battery Level Service object bleHealthThermometer ht(ble); // declare Health Thermometer Service object myFirmata.begin(ble); // begin the Firmata Object with the ble serial stream. callback_init(); // initialize the callback functions for myFirmata Object. CTimeout t1, t2; // t1=battery level update, t2=analog-input interval #ifndef DEBUG myPowerSave ps; // use power Save #endif ledACT = LED_ON; float value; uint8_t level; // // your loop code here // while(1) { if ( ble.isConnected() ) { #ifndef DEBUG ps.disable(); // disable power save mode #endif // // myFirmataClass Check // if ( myFirmata.available() ) { do { myFirmata.processInput(); } while(myFirmata.available()); } else { if ( t1.isExpired(3000)==false ) { // // check the Digital Input // checkDigitalInputs(); // // check the Analog Input with a sampling Interval // if (t2.isExpired(samplingInterval) ) { t2.reset(); checkAnalogInputs(); } } else { t1.reset(); // update Battery Level // if ( bl.readSystemVoltage(value) ) { if ( value>=2.0 && value<=3.6 ) { level = map(value, 2.0, 3.3, 0, 100); bl.sendBatteryLevel(level); DBG("battery:%0.2f %d\n", value, level); } } // // update Temperature // if ( ht.readTemperature(value) ) { ht.sendMeasure(value); DBG("temp=%0.2f\n", value); } // */ } }// */ } else { #ifndef DEBUG ps.enable(POWER_DOWN); // enable power save mode #endif sleep(200); } } return 0 ; }
// // main loop // int main(void) { #ifdef DEBUG #if __USE_USB usbCDC ser; ser.connect(); #else CSerial ser; ser.settings(115200); #endif CDebug dbg(ser); dbg.start(); #else #undef __USE_USB #endif /************************************************************************* * * your setup code here * **************************************************************************/ // // BLE Engine (Serial Stream) // myBLE ble; ble.advertising(100, -59); // set adv. interval = 100ms, calibrater tx power = -59dBm ble.enable(); // start the ble engine first!! // // Device Information Service // bleDeviceInfo info(ble); info.setManufactureName(u8"英倍達國際"); // u8 mean to use the UTF-8 string info.setModelNumber("nano11U37"); info.setSerialNumber("140226000"); info.setFirmwareRevision(uCXpresso_VER_STR); info.setHardwareRevision("R1"); info.setPnP(VS_USB, 1, 2, 0x3456); // vendor Id=1, product Id = 2, product ver. = 0x3456 SYS_ID_T sysId = { {0x00, 0x01, 0x02, 0x03, 0x04}, // Manufacturer Identifier {0x05, 0x06, 0x07} // Organizationally Unique Identifier }; info.setSystemId(sysId); // // Proximity Service // myProximity alert(ble); // declare Proximity Service (Immediate alert + Lose Link) // // Battery Level Service // bleBatteryLevel bl(ble); // declare Battery Level Service object // // Health Thermometer Service // bleHealthThermometer ht(ble); // declare Health Thermometer Service object ht.measurementInterval(1); // set measurement interval = 1 second // // Arduino Firmata // myFirmata.begin(ble); // begin the Firmata Object with the ble serial stream. callback_init(); // initialize the callback functions for myFirmata Object. // // A key input for Alert (for Proximity) // CPin keyAlert(P8); // define P8 as a push button keyAlert.input(); PIN_LEVEL_T pinVal = keyAlert; // // Timeout for time interval // CTimeout t1, t2, t3; // t1=analog input check, t2=temperature check, t3=battery check #ifndef DEBUG // // Power Save Feature // myPowerSave ps; // use power Save feature #endif float value; uint8_t level; while(1) { /********************************************************************** * * your loop code here * **********************************************************************/ if ( ble.isConnected() ) { #ifndef DEBUG // // Power On // ps.disable(); // disable power save mode #else ledACT = !ledACT; #endif // // UART Service // if ( ble.isAvailable() ) { // // BLE Firmata Demo // if ( myFirmata.available() ) { do { myFirmata.processInput(); } while(myFirmata.available()); } else { // // check the Digital Input // checkDigitalInputs(); // // check the Analog Input with a sampling Interval // if (t1.isExpired(samplingInterval) ) { t1.reset(); checkAnalogInputs(); } } } // // Proximity Service // if ( alert.isAvailable() ) { // // push button check (Proximity Service) // if ( keyAlert != pinVal ) { pinVal = keyAlert; // keep last status of key alert.sendEvent(keyAlert.read()==LOW ? 1 : 0); } } // // Health Thermometer Service // if ( ht.isAvailable() ) { // // check temperature // if ( t2.isExpired(1000) ) { t2.reset(); if ( ht.readTemperature(value) ) { ht.sendMeasure(value); DBG("temp=%0.2f\n", value); } // */ } } // // Battery Service // if ( bl.isAvailable() ) { // // update Battery Level // if ( t3.isExpired(3000) ) { t3.reset(); if ( bl.readSystemVoltage(value) ) { if ( value>=2.4 && value<=3.6 ) { level = map(value, 2.0, 3.3, 0, 100); bl.sendBatteryLevel(level); DBG("battery:%0.2fv %d%c\n", value, level, '%'); } } } } } // isConnected else { #ifndef DEBUG // // Power Save // ps.enable(POWER_DOWN); // enable power save mode #else ledACT = LED_ON; #endif sleep(1000); } } return 0 ; }
void checkDigitalPinStatus() { checkDigitalInputs(); }