From 98423ac38af8542eaa37f409b2d3e5180d84a6fa Mon Sep 17 00:00:00 2001 From: unicod Date: Sat, 10 Dec 2022 17:51:46 +0100 Subject: [PATCH] TODO commit --- TimedPin.cpp | 12 +++++++++--- TimedPin.h | 1 + XAirMixerControl.ino | 22 +++++++++++++-------- ui.cpp | 46 ++++++++++++++++++++++++++++++++++---------- ui.h | 37 +++++++++++++++++------------------ 5 files changed, 78 insertions(+), 40 deletions(-) diff --git a/TimedPin.cpp b/TimedPin.cpp index bf8bce8..c073ce6 100644 --- a/TimedPin.cpp +++ b/TimedPin.cpp @@ -7,9 +7,15 @@ TimedPin::TimedPin(uint8_t pin_id, bool inverted) { OnTime = 0; OffTime = 0; } +TimedPin::TimedPin() { + PinId = 0xFF; + TPinMode = TPM_OFF; + OnTime = 0; + OffTime = 0; +} void TimedPin::begin() { - pinMode(PinId, OUTPUT); + if (PinId < 0xFF) pinMode(PinId, OUTPUT); PinOff(); } @@ -103,10 +109,10 @@ void TimedPin::Off() { void TimedPin::PinOn() { PinState = true; - digitalWrite(PinId, PinInvert ? LOW : HIGH); + if (PinId < 0xFF) digitalWrite(PinId, PinInvert ? LOW : HIGH); } void TimedPin::PinOff() { PinState = false; - digitalWrite(PinId, PinInvert ? HIGH : LOW); + if (PinId < 0xFF) digitalWrite(PinId, PinInvert ? HIGH : LOW); } diff --git a/TimedPin.h b/TimedPin.h index 7ec5835..4798f10 100644 --- a/TimedPin.h +++ b/TimedPin.h @@ -26,6 +26,7 @@ class TimedPin { void PinOff(); /// set pin to "off" (internal function) public: + TimedPin(); TimedPin(uint8_t pin, bool inverted = false); void begin(); void update(); diff --git a/XAirMixerControl.ino b/XAirMixerControl.ino index f61012c..bea6171 100644 --- a/XAirMixerControl.ino +++ b/XAirMixerControl.ino @@ -68,12 +68,15 @@ const uint8_t pinBtnChOn2 = 12; *******************************************************************************/ const uint8_t pinRelay1 = 13; const uint8_t pinRelay2 = A7; -TimedPin RelayMute(pinRelay2); +//TimedPin RelayMute(pinRelay2); +TimedPin RelayMute(LED_BUILTIN); /***************************************************************************//** * @brief LED *******************************************************************************/ -TimedPin LedBoard(LED_BUILTIN); +//TimedPin LedBoard(LED_BUILTIN); +TimedPin LedBoard(pinRelay2); + TimedPin LedChOn1(pinLedChOn1); TimedPin LedChOn2(pinLedChOn2); TimedPin LedInc1(pinLedInc1); @@ -86,8 +89,8 @@ TimedPin LedDec2(pinLedDec2); bool MidiCfgTxOnly; /// duplex or only tx configuration (without MIDI rx line) MixerMuteState AirMutes[2] = { - MixerMuteState(22, &LedChOn1, BTN_CH_ON1, EV_UI_RX_MUTE_CH1_ON, EV_UI_RX_MUTE_CH1_OFF), - MixerMuteStateRly(23, &LedChOn2, &RelayMute, BTN_CH_ON2, EV_UI_RX_MUTE_CH2_ON, EV_UI_RX_MUTE_CH2_OFF) + MixerMuteState(22, &LedChOn1, &RelayMute, BTN_CH_ON1, EV_UI_RX_MUTE_CH1_ON, EV_UI_RX_MUTE_CH1_OFF), + MixerMuteState(23, &LedChOn2, BTN_CH_ON2, EV_UI_RX_MUTE_CH2_ON, EV_UI_RX_MUTE_CH2_OFF) }; MixerFaderState AirFaders[2] = { @@ -96,9 +99,6 @@ MixerFaderState AirFaders[2] = { }; -#if defined(ARDUINO_SAM_DUE) || defined(USBCON) || defined(__MK20DX128__) || defined(__MK20DX256__) || defined(__MKL26Z64__) -HardwareSerial& Serial1; // Unused code, workaround for Intellisense bug -#endif /***************************************************************************//** * @brief MIDI instance (serial port) *******************************************************************************/ @@ -111,6 +111,7 @@ void MidiCCHandler(byte channel, byte ctrl_no, byte val) { MixerFaderState& fader = AirFaders[i]; if (ctrl_no == fader.MidiCtrlNr) { fader.VolumeReceived(val); + UI_EventProc(EV_UI_RX_MIDI); } } } @@ -172,6 +173,12 @@ void setup() { UI_Init(); // Start user interface (main state machine) } +static uint8_t BtnPrev = 0x00; +uint8_t ButtonGetVal() { return BtnPrev; } +bool ButtonCheck(uint8_t btn) { + return (BtnPrev & (1 << btn)) ? true : false; +} + /***************************************************************************//** * @brief Main loop *******************************************************************************/ @@ -181,7 +188,6 @@ void loop() { uint32_t t = millis(); // execute every 10ms ******************************************************* if (Tmr10ms.Check(t)) { - static uint8_t BtnPrev = 0x00; static uint8_t BtnNew = 0; static uint8_t BtnRel = 0; uint8_t btn = (digitalRead(pinBtnInc1) ? 0: (1 << BTN_INC1 )) diff --git a/ui.cpp b/ui.cpp index 0923da4..cc74b42 100644 --- a/ui.cpp +++ b/ui.cpp @@ -30,7 +30,7 @@ extern MIDI_NAMESPACE::MidiInterface> extern MixerMuteState AirMutes[2]; extern MixerFaderState AirFaders[2]; - +extern bool ButtonCheck(uint8_t btn); // Typedefs ==================================================================== struct UI_SM { @@ -45,6 +45,7 @@ typedef void UI_STATE_FUNC(UI_SM* me, uint16_t event); // Local variables ============================================================= static UI_SM UiSm; #define DEFINE_MY_OBJECT() UI_SM* const me = &UiSm; +TimedPin DummyRelay; const uint16_t ToutProg = 30; // [s] @@ -118,14 +119,15 @@ void UiSt_MixerStartup(UI_SM* const me, uint16_t event) { case EV_STATE_ENTER: { //u MixerStartup: entry: me->Timer = 0; LedBoard.Blink(30, 270, 5); - LedChOn1.Blink(500, 500); - LedChOn2.Blink(500, 500); - LedInc1.Blink(500, 500); - LedDec1.Blink(500, 500); + LedChOn1.Blink(10, 1990); + LedChOn2.Blink(10, 1990); + LedInc1.Blink(10, 1990); + LedDec1.Blink(10, 1990); }break; case EV_STATE_EXIT: { }break; + case EV_UI_RX_MIDI: case EV_UI_RX_MUTE_CH1_ON: case EV_UI_RX_MUTE_CH1_OFF: case EV_UI_RX_MUTE_CH2_ON: @@ -134,12 +136,13 @@ void UiSt_MixerStartup(UI_SM* const me, uint16_t event) { }break; case EV_UI_TICK_1S: { + if ((me->Timer % 2) == 0) { + MixerFaderState& fader = AirFaders[0]; + MIDI.sendControlChange(fader.MidiCtrlNr, fader.FaderStd - ((me->Timer >> 1) % 2), 1); // ping mixer with changing value (std, std-1, std,...) + } if (++me->Timer == 15) { SM_SET_STATE(&UiSt_Home); //u MixerStartup -left-> Home : timeout } - //static uint8_t MuteVal = 0; - //MIDI.sendControlChange(21, MuteVal, 2); // Send Mute: CH2, 21-26: Aux1-6 - //MuteVal = MuteVal ? 0 : 127; }break; } } @@ -162,6 +165,19 @@ void UiSt_Home(UI_SM* const me, uint16_t event) { switch (event) { case EV_STATE_ENTER: { LedBoard.Blink(30, 270, 5); + // initialize mixer + for (uint_fast8_t i=0; iBlink(t_on, t_off); - } -}; - -struct MixerMuteStateRly : MixerMuteState { - MixerMuteStateRly(uint8_t ctrl_nr, TimedPin* led, TimedPin* relay, BTN_CODES button = BTN_MAX, uint16_t uieventon = EV_NO_EVENT, uint16_t uieventoff = EV_NO_EVENT) : - MixerMuteState(ctrl_nr, led, button, uieventon, uieventoff), Relay(relay) { } - void ToggleState() { - MixerMuteState::ToggleState(); Relay->Set(MuteLocal); } - - TimedPin* Relay; + void LedUpdate() { + Led->Set(!MuteLocal); + } }; /***************************************************************************//** @@ -136,11 +132,14 @@ struct MixerFaderState { } LedDec->Blink(t_on, t_off); } + void LedUpdate() { + LedInc->Set((FaderLocal > FaderStd)); + LedDec->Set((FaderLocal < FaderStd)); + } void VolumeReceived(uint8_t vol) { FaderMixer = vol; FaderLocal = vol; - LedInc->Set((vol > FaderStd)); - LedDec->Set((vol < FaderStd)); + LedUpdate(); } bool VolumeInc() { if (FaderLocal < FaderMax) {