diff options
author | Jakob Stendahl <jakob.stendahl@outlook.com> | 2021-06-08 00:56:19 +0200 |
---|---|---|
committer | Jakob Stendahl <jakob.stendahl@outlook.com> | 2021-06-08 00:56:19 +0200 |
commit | 820e89ead9577c7aa4b7ef10f363daf8a28247ac (patch) | |
tree | 8006e48de8129e836ee45ef4516a036625949062 | |
parent | e9a5544db7be5e461b92743b37adcc77162483b7 (diff) | |
download | hoverbit-ble-820e89ead9577c7aa4b7ef10f363daf8a28247ac.tar.gz hoverbit-ble-820e89ead9577c7aa4b7ef10f363daf8a28247ac.zip |
:sparkles: Do lots of small tweaks
-rw-r--r-- | CMakeLists.txt | 11 | ||||
-rw-r--r-- | inc/Screen.h | 2 | ||||
-rw-r--r-- | source/HoverBitController.cpp | 29 | ||||
-rw-r--r-- | source/Screen.cpp | 38 | ||||
-rw-r--r-- | source/main.cpp | 35 |
5 files changed, 32 insertions, 83 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 879568c..e2130f4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,17 +82,6 @@ SET(CODAL_OUTPUT_NAME ${device.device}) SET(CODAL_TARGET_PROCESSOR ${device.processor}) SET(CODAL_TARGET_CPU_ARCHITECTURE ${device.architecture}) -# if this is the first build, lets copy a sample main.cpp from the target if available. -if(NOT EXISTS ${CMAKE_CURRENT_LIST_DIR}/${CODAL_APP_SOURCE_DIR} AND EXISTS ${CMAKE_CURRENT_LIST_DIR}/${LIB_DEST}/${codal.target.name}/samples/main.cpp) - FILE(COPY ${CMAKE_CURRENT_LIST_DIR}/${LIB_DEST}/${codal.target.name}/samples/main.cpp DESTINATION ${CMAKE_CURRENT_LIST_DIR}/${CODAL_APP_SOURCE_DIR}) -endif() - -#copy samples and remove main.cpp -if(NOT EXISTS ${CMAKE_CURRENT_LIST_DIR}/samples AND EXISTS ${CMAKE_CURRENT_LIST_DIR}/${LIB_DEST}/${codal.target.name}/samples/) - FILE(COPY ${CMAKE_CURRENT_LIST_DIR}/${LIB_DEST}/${codal.target.name}/samples DESTINATION ${CMAKE_CURRENT_LIST_DIR}) - FILE(REMOVE ${CMAKE_CURRENT_LIST_DIR}/samples/main.cpp) -endif() - #################### SET(TOOLCHAIN ${device.toolchain}) diff --git a/inc/Screen.h b/inc/Screen.h index abac919..0ea7b8c 100644 --- a/inc/Screen.h +++ b/inc/Screen.h @@ -83,8 +83,6 @@ class HoverBitDisplay { DisplayMainScreenMode screenMode; unsigned int tmpTimer; bool BLEconnected; - bool bBLEIndicator; - bool flipFrame; bool isPause; void lowBattery(); diff --git a/source/HoverBitController.cpp b/source/HoverBitController.cpp index 1ecc21b..301fdeb 100644 --- a/source/HoverBitController.cpp +++ b/source/HoverBitController.cpp @@ -27,8 +27,6 @@ DEALINGS IN THE SOFTWARE. /** * Init method for HoverBitController, this sets everything to the default values. * It also initializes the airbit-pcb with some protocol magic. - * - * @param _uBit the MicroBit instance */ void HoverBitController::init() { mainController = false; @@ -44,9 +42,8 @@ void HoverBitController::init() { throttle = 0; lastReceiveTime = uBit.systemTime(); - /* I am not completly sure what this does, but it seems to me like this is - putting the air:bit board in some kind of "bind-mode", on the spec-sheet - there isn't any documentation for what 20 pulses means tho... */ + /* I am not completly sure what this does, according to the hover:bit guys + this is some magic to disable gyro-control of the lift fan. */ uBit.sleep(100); int o; for (o = 0; o < 20; o++) { @@ -60,14 +57,14 @@ void HoverBitController::init() { */ bool HoverBitController::failSafe(void) { unsigned long deltaReceiveTime = uBit.systemTime() - lastReceiveTime; - if (deltaReceiveTime > FSAFE_TLIM_THROTTLE) { - Throttle(0); - Rudder(0); - AirBit(0, arm, 0, throttle, roll, roll + 45, servo_1); - } if (deltaReceiveTime > FSAFE_TLIM_ARM) { - Arm(0); - AirBit(0, arm, 0, throttle, roll, roll + 45, servo_1); + arm = 0; + AirBit(0, 0, 0, 0, 0, 0 + 45, servo_1); + } + if (deltaReceiveTime > FSAFE_TLIM_THROTTLE) { + throttle = 0; + roll = 0; + AirBit(0, arm, 0, 0, 0, 0 + 45, servo_1); } return (deltaReceiveTime > FSAFE_TLIM_THROTTLE) || (deltaReceiveTime > FSAFE_TLIM_ARM); } @@ -87,9 +84,9 @@ unsigned int HoverBitController::GetBatteryVoltage() { void HoverBitController::checkBattery() { if (GetBatteryVoltage() < BATTERY_LOW_LIMIT - 60) { bBatteryEmpty = true; - Throttle(0); - Arm(0); - Rudder(0); + throttle = 0; + arm = 0; + roll = 0; } } @@ -162,7 +159,7 @@ void HoverBitController::AirBit(int Pitch,int Arm,int Roll,int Throttle,int Yaw, void HoverBitController::HoverControl() { checkBattery(); if (BatteryEmpty()) { - Arm(0); + arm = 0; } if (!failSafe()) { AirBit(0, arm, 0, throttle, roll, roll + 45, servo_1); diff --git a/source/Screen.cpp b/source/Screen.cpp index ad52247..f961994 100644 --- a/source/Screen.cpp +++ b/source/Screen.cpp @@ -179,9 +179,6 @@ void HoverBitDisplay::update() { if (isPause) { return; } int batteryMilliVolt = controller.GetBatteryVoltage(); - flipFrame = (uBit.systemTime() - tmpTimer) > 1000; - if (flipFrame) { tmpTimer = uBit.systemTime(); } - if ((((&uBit.io.P0)->getAnalogValue()) < 600) && (((&uBit.io.P0)->getAnalogValue()) >= 400)) { iconBatteryCharging(); } else if (controller.BatteryEmpty() || (batteryMilliVolt < BATTERY_LOW_LIMIT && (&uBit.io.P0)->getAnalogValue() > 300)) { @@ -189,7 +186,7 @@ void HoverBitDisplay::update() { } else if (!BLEconnected) { BLENotConnected(); } else { - mainScreen(); + showGraphs(); } } @@ -211,40 +208,15 @@ void HoverBitDisplay::lowBattery() { * Flashes a bluetooth symbol on screen. */ void HoverBitDisplay::BLENotConnected() { - if ((((uBit.systemTime() >> (12 - 1) & 1)) == 1)) { - bBLEIndicator = !bBLEIndicator; + if (uBit.systemTime() % 1000 > 250) { + MicroBitImage img(bluetoothSymbol); + uBit.display.print(img); + } else { uBit.display.clear(); - if (bBLEIndicator) { - MicroBitImage img(bluetoothSymbol); - uBit.display.print(img); - } else { - // Need to actually see this to know if I want to flash only - // blank screen or with battery. - //batteryLevelFullScreen(); - } } } /** - * Method that does the "default" main screen mode. - * Called when in a connected "normal" operating state. - */ -void HoverBitDisplay::mainScreen() { - switch (displayMainScreenMode) { - case OFF: - break; - case BATTERY: - uBit.display.clear(); - batteryLevelFullScreen(); - break; - case GRAPHS: - default: - showGraphs(); - break; - } -} - -/** * Show the GRAPH displayMainScreenMode */ void HoverBitDisplay::showGraphs() { diff --git a/source/main.cpp b/source/main.cpp index 6f3332b..16e665a 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -52,6 +52,7 @@ void onDisconnected(MicroBitEvent) { void onDelim(MicroBitEvent) { ManagedString msg = uart->readUntil(BLE_UART_DELIM); + uBit.display.image.setPixelValue(1, 0, 255); int length = msg.length(); const char* command = msg.toCharArray(); @@ -120,13 +121,6 @@ void onDelim(MicroBitEvent) { uart->send(accString); } -void onButtonA_press(MicroBitEvent e) { - hoverBitDisplay.nextMode(); -} - -void onButtonB_press(MicroBitEvent e) { -} - void onButtonAB_press(MicroBitEvent e) { hoverBitDisplay.pause(); uBit.display.scroll(VERSION); @@ -135,14 +129,15 @@ void onButtonAB_press(MicroBitEvent e) { int main() { uBit.init(); - uBit.audio.setVolume(255); // Setup serial for Spektsat communication with air:bit board uBit.serial.setBaud(115200); uBit.serial.redirect(uBit.io.P1, uBit.io.P2); - /* Initialize hover:bit controller module - * the init procedure have to be run within 100ms after air:bit power up */ + /* Initialize hover:bit controller module, these timeouts are some voodo + magic I don't quite understand. But for the init method to function + as we want, there should be a relatively long delay here. */ + uBit.sleep(3000); controller.init(); // Setup listeners @@ -150,8 +145,6 @@ int main() { uBit.messageBus.listen(MICROBIT_ID_BLE, MICROBIT_BLE_EVT_DISCONNECTED, onDisconnected); uBit.messageBus.listen(MICROBIT_ID_BLE_UART, MICROBIT_UART_S_EVT_DELIM_MATCH, onDelim); - uBit.messageBus.listen(MICROBIT_ID_BUTTON_A, MICROBIT_BUTTON_EVT_CLICK, onButtonA_press); - uBit.messageBus.listen(MICROBIT_ID_BUTTON_B, MICROBIT_BUTTON_EVT_CLICK, onButtonB_press); uBit.messageBus.listen(MICROBIT_ID_BUTTON_AB, MICROBIT_BUTTON_EVT_CLICK, onButtonAB_press); // uartService @@ -160,21 +153,21 @@ int main() { uart = new MicroBitUARTService(*uBit.ble, 32, 32); uart->eventOn(BLE_UART_DELIM); + uBit.audio.setVolume(20); uBit.audio.soundExpressions.play(ManagedString("hello")); + hoverBitDisplay.mode(GRAPHS); while (1) { - if (uBit.logo.isPressed()) { - if (!bCapLogoIsPressed) { - bCapLogoIsPressed = true; - hoverBitDisplay.nextMode(); - } - } else if (bCapLogoIsPressed) { - bCapLogoIsPressed = false; - } - hoverBitDisplay.update(); controller.HoverControl(); + if (uBit.systemTime() % 2000 > 1900) { + uart->send( + ManagedString("B:") + + ManagedString((int)controller.GetBatteryVoltage()) + ); + } uBit.sleep(20); + schedule(); } // If main exits, there may still be other fibers running or registered event handlers etc. |