// SPDX-License-Identifier: Apache-2.0 // Copyright (c) 2012-2024 Scott Penrose and WII5 Buoy contributors // // This file is part of WII5 Buoy firmware. // See LICENSE for full terms. /** * @file WII5Sh3dIO.h * @brief I/O abstraction: buttons, LEDs, and the IO loop tick. */ #ifndef WII5Sh3dIO_h #define WII5Sh3dIO_h #include //assumes Arduino IDE v1.0 or greater #include // Standard Hardware Locations #ifdef ISMEGA #ifndef SH3D_NODE_LED_1 #define SH3D_NODE_LED_1 15 #endif #ifndef SH3D_NODE_LED_2 #define SH3D_NODE_LED_2 14 #endif // does not work // #elifdef SH3D_DEVICE_HANDHELD_1 // #define SH3D_NODE_LED_1 17 // #define SH3D_NODE_LED_2 16 #else // #define LED1 9 // #define LED2 6 // TODO Talk2 #ifndef SH3D_NODE_LED_1 #define SH3D_NODE_LED_1 6 // T2_WPN_LED_1 #endif #ifndef SH3D_NODE_LED_2 #define SH3D_NODE_LED_2 9 // T2_WPN_LED_2 #endif #endif // Moteino Mega = 16, 15 // Moteino Standard = X, Y // Talk2 = T2_WPN_BTN_1, T2_WPN_BTN_2 #define SH3D_NODE_BUTTON_1 4 // T2_WPN_BTN_1 #define SH3D_NODE_BUTTON_2 5 // T2_WPN_BTN_2 // Temperature Sensor // TODO Temp remove for Simon #define SH3D_NODE_18B20 //#ifdef ISMEGA // #define SH3D_NODE_ONE_WIRE_BUS 24 //#else // #define SH3D_NODE_ONE_WIRE_BUS 14 //#endif #define SH3D_NODE_ONE_WIRE_BUS 16 #ifdef SH3D_NODE_18B20 #include #include #endif #include /* Noticed: T2Led - looks like it might have better features. */ #include // ENUM !!! enum { LED_OFF, LED_ON, LED_SLOW, LED_FAST, LED_SHORT, LED_DOUBLE, LED_TRIPPLE, LED_SHORT_LONG, LED_DOUBLE_LONG, LED_TRIPPLE_LONG, LED_SHORT_GAP, LED_DOUBLE_GAP, LED_TRIPPLE_GAP, LED_ONE, LED_TWO, LED_THREE, LED_FOUR, LED_FIVE, LED_SIX, LED_SEVEN, LED_EIGHT, LED_NINE, LED_TEN, LED_ONCE, LED_TWICE, }; class WII5Sh3dIO { public: void preButton(PushButton* btn1 = NULL, PushButton* btn2 = NULL, PushButton* btn3 = NULL, PushButton* btn4 = NULL); void begin( uint8_t led1 = SH3D_NODE_LED_1, uint8_t led2 = SH3D_NODE_LED_2, uint8_t btn1 = SH3D_NODE_BUTTON_1, uint8_t btn2 = SH3D_NODE_BUTTON_2 ); void begin( uint8_t led1 = SH3D_NODE_LED_1, uint8_t led2 = SH3D_NODE_LED_2, uint8_t led3 = 0, uint8_t led4 = 0, uint8_t btn1 = SH3D_NODE_BUTTON_1, uint8_t btn2 = SH3D_NODE_BUTTON_2, uint8_t btn3 = 0, uint8_t btn4 = 0 ); void loop(); void led1Set(uint8_t m) { led1_mode = m; led1_state = 0; led1_timeon = 0; } void led1SetTimeout(uint32_t m) { led1_max = m; led1_timeon = 0; } void led1SetDefault(uint8_t m) { led1_default = m; } uint8_t led1Get() { return led1_mode; } void led2Set(uint8_t m) { led2_mode = m; led2_state = 0; led2_timeon = 0; } void led2SetTimeout(uint32_t m) { led2_max = m; led2_timeon = 0; } void led2SetDefault(uint8_t m) { led2_default = m; } uint8_t led2Get() { return led2_mode; } void led3Set(uint8_t m) { led3_mode = m; led3_state = 0; led3_timeon = 0; } void led3SetTimeout(uint32_t m) { led3_max = m; led3_timeon = 0; } void led3SetDefault(uint8_t m) { led3_default = m; } uint8_t led3Get() { return led3_mode; } void led4Set(uint8_t m) { led4_mode = m; led4_state = 0; led4_timeon = 0; } void led4SetTimeout(uint32_t m) { led4_max = m; led4_timeon = 0; } void led4SetDefault(uint8_t m) { led4_default = m; } uint8_t led4Get() { return led4_mode; } // Temporary HACK version with individual - see array branch for single function for unlimited LED and Buttons PushButton *button1; PushButton *button2; PushButton *button3; PushButton *button4; uint8_t buttonSleepCheck(); void sleep(); void wake(); protected: elapsedMillis lastLedLoop; // Validity etc of most recent data uint8_t validPacketType; bool _begin; // Led udpate bool updateLED(uint8_t pin, uint8_t mode, uint8_t state); uint16_t battery_voltage; // LED1 uint8_t led1_pin; bool led1_activelow; uint8_t led1_mode; uint8_t led1_default; uint8_t led1_state; elapsedMillis led1_timeon; uint32_t led1_max; // LED2 uint8_t led2_pin; bool led2_activelow; uint8_t led2_mode; uint8_t led2_default; uint8_t led2_state; elapsedMillis led2_timeon; uint32_t led2_max; // LED3 uint8_t led3_pin; uint8_t led3_mode; uint8_t led3_default; uint8_t led3_state; elapsedMillis led3_timeon; uint32_t led3_max; // LED4 uint8_t led4_pin; uint8_t led4_mode; uint8_t led4_default; uint8_t led4_state; elapsedMillis led4_timeon; uint32_t led4_max; // Button1 uint8_t button1_pin; bool button1_activelow; // Button2 uint8_t button2_pin; bool button2_activelow; // Button3 uint8_t button3_pin; bool button3_activelow; // Button4 uint8_t button4_pin; bool button4_activelow; }; extern WII5Sh3dIO sh3dNodeIO; #endif