1

Topic: Read timeout error

I am working on a stepper motor control program with RemoteXY using Visuino.  If I use on (2) buttons I can connect to Bluetooth BLE on a ESP32 developer board.  If I use (3) buttons I can still connect to my smartphone app.  If I use (4) buttons I receive a Read timeout error when trying to connect Bluetooth BLE.  My stepper program is written in Visuino, and was working.  Just recently it has stopped working since the last Remotexy library update.  Any help would be appreciated.

// RemoteXY select connection mode and include library
#define REMOTEXY_MODE__ESP32CORE_BLE
#include <BLEDevice.h>

#include <RemoteXY.h>

// RemoteXY connection settings
#define REMOTEXY_BLUETOOTH_NAME "RemoteXY"


// RemoteXY configurate 
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =   // 58 bytes
  { 255,4,0,0,0,51,0,16,24,1,1,0,23,57,19,19,26,10,68,87,
  78,0,1,0,3,34,19,19,26,10,76,70,84,0,1,0,23,13,19,19,
  26,10,85,80,0,1,0,42,34,19,19,26,10,82,71,72,84,0 };
 
// this structure defines all the variables and events of your control interface
struct {

    // input variables
  uint8_t UP_1; // =1 if button pressed, else =0
  uint8_t LFT_1; // =1 if button pressed, else =0
  uint8_t UP_1; // =1 if button pressed, else =0
  uint8_t UP_1; // =1 if button pressed, else =0

    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0

} RemoteXY;
#pragma pack(pop)

/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////



void setup()
{
  RemoteXY_Init ();

2

Re: Read timeout error

Here is the full Visuino code, with the embedded RemoteXY code
//----------------------------------------------
//
//         Sketch Generated by Visuino
//               www.visuino.com
//
//------------------ Source --------------------
//
// BLE Control PAN-TILT_Rev001.visuino
//
//----------------------------------------------

#define VISUINO_ESP32

#include <OpenWire.h>
#include <Mitov.h>
#include <Arduino.h>
#include <Mitov_ESP32.h>
#include <Mitov_ESP32_BLE.h>
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <Mitov_ESP32_BLE_Server.h>
#include <Mitov_BluetoothLE_Uart_Service.h>
#include <Mitov_StandardSerial.h>
#include <Mitov_Stepper.h>
#include <Mitov_Packet.h>
#include <Mitov_RemoteXY.h>
#include <Mitov_LogicGates.h>



// Shared Component Member Variables

namespace ComponentVariables
{
class
{
public:
  bool Value1 : 1;
  bool Value2 : 1;
  uint32_t Value3 : 4;
  bool Value4 : 1;
  bool Value5 : 1;
  bool Value6 : 1;
  bool Value7 : 1;
  bool Value8 : 1;
  bool Value9 : 1;
  bool Value10 : 1;
  bool Value11 : 1;
  bool Value12 : 1;
  bool Value13 : 1;
  bool Value14 : 1;
  bool Value15 : 1;
  bool Value16 : 1;
  bool Value17 : 1;
  bool Value18 : 1;
  uint32_t Value19 : 4;
  int32_t Value20 : 1;
  bool Value21 : 1;
  bool Value22 : 1;
  bool Value23 : 1;
  bool Value24 : 1;
  bool Value25 : 1;
  bool Value26 : 1;
  bool Value27 : 1;
  bool Value28 : 1;

} BitFields;

class Variable1
{
public:
  inline static bool GetValue() { return BitFields.Value1; }
  inline static void SetValue( bool AValue ) { BitFields.Value1 = AValue; }

};

class Variable2
{
public:
  inline static bool GetValue() { return BitFields.Value2; }
  inline static void SetValue( bool AValue ) { BitFields.Value2 = AValue; }

};

class Variable3
{
public:
  inline static uint32_t GetValue() { return BitFields.Value3; }
  inline static void SetValue( uint32_t AValue ) { BitFields.Value3 = AValue; }

};

class Variable4
{
public:
  inline static bool GetValue() { return BitFields.Value4; }
  inline static void SetValue( bool AValue ) { BitFields.Value4 = AValue; }

};

class Variable5
{
public:
  inline static bool GetValue() { return BitFields.Value5; }
  inline static void SetValue( bool AValue ) { BitFields.Value5 = AValue; }

};

class Variable6
{
public:
  inline static bool GetValue() { return BitFields.Value6; }
  inline static void SetValue( bool AValue ) { BitFields.Value6 = AValue; }

};

class Variable7
{
public:
  inline static bool GetValue() { return BitFields.Value7; }
  inline static void SetValue( bool AValue ) { BitFields.Value7 = AValue; }

};

class Variable8
{
public:
  inline static bool GetValue() { return BitFields.Value8; }
  inline static void SetValue( bool AValue ) { BitFields.Value8 = AValue; }

};

class Variable9
{
public:
  inline static bool GetValue() { return BitFields.Value9; }
  inline static void SetValue( bool AValue ) { BitFields.Value9 = AValue; }

};

class Variable10
{
public:
  inline static bool GetValue() { return BitFields.Value10; }
  inline static void SetValue( bool AValue ) { BitFields.Value10 = AValue; }

};

class Variable11
{
public:
  inline static bool GetValue() { return BitFields.Value11; }
  inline static void SetValue( bool AValue ) { BitFields.Value11 = AValue; }

};

class Variable12
{
public:
  inline static bool GetValue() { return BitFields.Value12; }
  inline static void SetValue( bool AValue ) { BitFields.Value12 = AValue; }

};

class Variable13
{
public:
  inline static bool GetValue() { return BitFields.Value13; }
  inline static void SetValue( bool AValue ) { BitFields.Value13 = AValue; }

};

class Variable14
{
public:
  inline static bool GetValue() { return BitFields.Value14; }
  inline static void SetValue( bool AValue ) { BitFields.Value14 = AValue; }

};

class Variable15
{
public:
  inline static bool GetValue() { return BitFields.Value15; }
  inline static void SetValue( bool AValue ) { BitFields.Value15 = AValue; }

};

class Variable16
{
public:
  inline static bool GetValue() { return BitFields.Value16; }
  inline static void SetValue( bool AValue ) { BitFields.Value16 = AValue; }

};

class Variable17
{
public:
  inline static bool GetValue() { return BitFields.Value17; }
  inline static void SetValue( bool AValue ) { BitFields.Value17 = AValue; }

};

class Variable18
{
public:
  inline static bool GetValue() { return BitFields.Value18; }
  inline static void SetValue( bool AValue ) { BitFields.Value18 = AValue; }

};

class Variable19
{
public:
  inline static uint32_t GetValue() { return BitFields.Value19; }
  inline static void SetValue( uint32_t AValue ) { BitFields.Value19 = AValue; }

};

class Variable20
{
public:
  inline static int32_t GetValue() { return BitFields.Value20; }
  inline static void SetValue( int32_t AValue ) { BitFields.Value20 = AValue; }

};

class Variable21
{
public:
  inline static bool GetValue() { return BitFields.Value21; }
  inline static void SetValue( bool AValue ) { BitFields.Value21 = AValue; }

};

class Variable22
{
public:
  inline static bool GetValue() { return BitFields.Value22; }
  inline static void SetValue( bool AValue ) { BitFields.Value22 = AValue; }

};

class Variable23
{
public:
  inline static bool GetValue() { return BitFields.Value23; }
  inline static void SetValue( bool AValue ) { BitFields.Value23 = AValue; }

};

class Variable24
{
public:
  inline static bool GetValue() { return BitFields.Value24; }
  inline static void SetValue( bool AValue ) { BitFields.Value24 = AValue; }

};

class Variable25
{
public:
  inline static bool GetValue() { return BitFields.Value25; }
  inline static void SetValue( bool AValue ) { BitFields.Value25 = AValue; }

};

class Variable26
{
public:
  inline static bool GetValue() { return BitFields.Value26; }
  inline static void SetValue( bool AValue ) { BitFields.Value26 = AValue; }

};

class Variable27
{
public:
  inline static bool GetValue() { return BitFields.Value27; }
  inline static void SetValue( bool AValue ) { BitFields.Value27 = AValue; }

};

class Variable28
{
public:
  inline static bool GetValue() { return BitFields.Value28; }
  inline static void SetValue( bool AValue ) { BitFields.Value28 = AValue; }

};

} // ComponentVariables

// Arduino Constant Declarations

namespace VisuinoConstants
{
class FloatValue0
{
public:
    inline static constexpr float GetValue() { return 80; }
};

class FloatValue1
{
public:
    inline static constexpr float GetValue() { return 250; }
};

class TextValue1
{
public:
    inline static constexpr const char *GetValue() { return ""; }
};

class TextValue0
{
public:
    inline static constexpr const char *GetValue() { return "GARAGE1"; }
};

} // VisuinoConstants

// Pin Call Declarations

namespace PinCalls
{
class PinCallerReceive0
{
public:
  void Notify( void *_Data );

};
class PinCallerReceive1
{
public:
  void Notify( void *_Data );

};
class PinCallerReceive2
{
public:
  void Notify( void *_Data );

};
class PinCallerReceive3
{
public:
  void Notify( void *_Data );

};
class PinCallerReceive4
{
public:
  void Notify( void *_Data );

};
class PinCallerReceive5
{
public:
  void Notify( void *_Data );

};
class PinCallerReceive6
{
public:
  void Notify( void *_Data );

};
class PinCallerReceive7
{
public:
  void Notify( void *_Data );

};
class PinCallerReceive8
{
public:
  void Notify( void *_Data );

};
class PinCallerReceive9
{
public:
  void Notify( void *_Data );

};
} // PinCalls

// Call Chains

namespace CallChains
{
class CheckPopulated1
{
public:
  inline static uint32_t Count() { return 5; }
  static void Call( bool & AIsPopulated );

};
class GetData1
{
public:
  inline static uint32_t Count() { return 5; }
  static void Call( uint8_t *& ADataStart, uint32_t & ADataIndex, uint8_t & AOffset );

};
class GetSize1
{
public:
  inline static uint32_t Count() { return 5; }
  static void Call( int32_t AIndex, bool & AAlligned, int & AResult );

};
class Expand1
{
public:
  inline static uint32_t Count() { return 5; }
  static void Call( int32_t AIndex, uint8_t * const & AInBuffer, uint8_t * const & AOutBuffer, int & ASize, bool & AResult );

};
class GetValue1
{
public:
  inline static uint32_t Count() { return 0; }
  static void Call( int32_t AIndex, uint8_t & AValue );

};
class ApplyValues1
{
public:
  inline static uint32_t Count() { return 0; }
  static void Call( uint8_t * AValue );

};
} // CallChains

// Arduino Board Declarations

namespace BoardDeclarations
{
namespace Types
{
typedef Mitov::SerialPort<
  SERIAL_TYPE, // 0_T_TYPE
  Serial, // 1_C_TYPE
  Mitov::ConstantProperty<4, uint32_t, 0 >, // AfterSendingDelay
  Mitov::ConstantProperty<7, uint32_t, 8 >, // DataBits
  Mitov::ConstantProperty<3, bool, true >, // Enabled
  Mitov::ConstantProperty<51, uint32_t, 0>, // FEndTime
  Mitov::ConstantProperty<50, bool, false>, // FSending
  Mitov::GenericPin_NoImplementation<5 >, // OutputPin
  Mitov::ConstantProperty<9, Mitov::TArduinoStandardSerialParity, Mitov::spNone >, // Parity
  Mitov::DigitalPin_NoImplementation<2 >, // SendingOutputPin
  Mitov::ConstantProperty<6, uint32_t, 9600 >, // Speed
  Mitov::ConstantProperty<8, uint32_t, 1 > // StopBits
   > SerialPort0;
} // Types

namespace Instances
{
Types::SerialPort0 SerialPort0;
} // Instances

namespace Types
{
typedef Mitov::ArduinoSerialInput_Binary<Types::SerialPort0, Instances::SerialPort0, Mitov::TArray<uint8_t>> SerialPort0_Input_IOWByteStream_1;
} // Types

namespace Instances
{
Types::SerialPort0_Input_IOWByteStream_1 SerialPort0_Input_IOWByteStream_1;
} // Instances

namespace Types
{
typedef Mitov::ArduinoDigitalChannel<
  Mitov::ConstantProperty<51, bool, false>, // InitialValue
  Mitov::ConstantProperty<22, bool, false>, // IsAnalog
  Mitov::ConstantProperty<24, bool, true>, // IsCombinedInOut
  Mitov::ConstantProperty<21, bool, false>, // IsOpenDrain
  Mitov::ConstantProperty<25, bool, true>, // IsOutput
  Mitov::ConstantProperty<10, bool, false >, // IsPullDown
  Mitov::ConstantProperty<5, bool, false >, // IsPullUp
  Mitov::ConstantProperty<23, bool, false>, // IsRawInput
  Mitov::DigitalPin_EmbeddedPinImplementation<6, ::PinCalls::PinCallerReceive0 >, // OutputPin
  14 // PIN
  > ArduinoDigitalChannel_14;
} // Types

namespace Instances
{
Types::ArduinoDigitalChannel_14 ArduinoDigitalChannel_14;
} // Instances

namespace Types
{
typedef Mitov::DigitalInput<
  Mitov::ConstantProperty<10, bool, false >, // IsPullDown
  Mitov::ConstantProperty<5, bool, false >, // IsPullUp
  Mitov::DigitalPin_EmbeddedPinImplementation<6, ::PinCalls::PinCallerReceive0 >, // OutputPin
  14 // PIN
  > ArduinoAnalogInputChannel_AsDigital_14;
} // Types

namespace Instances
{
Types::ArduinoAnalogInputChannel_AsDigital_14 ArduinoAnalogInputChannel_AsDigital_14;
} // Instances

namespace Types
{
typedef Mitov::ESP32BluetoothLE<
  Mitov::TypedPin_NoImplementation<2, int32_t >, // ConnectedCountOutputPin
  Mitov::ConstantPropertyString<3, ::VisuinoConstants::TextValue0 >, // DeviceName
  Mitov::TextPin_NoImplementation<1 >, // MACAddressOutputPin
  Mitov::ConstantProperty<4, uint32_t, 460 >, // MaximumTransmissionUnit
  Mitov::ConstantProperty<6, Mitov::TArduinoESP32BluetoothLESecurity::TArduinoESP32BluetoothLESecurity, Mitov::TArduinoESP32BluetoothLESecurity::Default >, // Security
  Mitov::ESP32ServerImp, // Server
  Mitov::ConstantProperty<5, uint32_t, 5 > // TransmitPower
   > TArduinoESP32BluetoothLEModule1;
} // Types

namespace Instances
{
Types::TArduinoESP32BluetoothLEModule1 TArduinoESP32BluetoothLEModule1;
} // Instances

namespace Types
{
typedef Mitov::ESP32BluetoothLEServer<
  BoardDeclarations::Types::TArduinoESP32BluetoothLEModule1, // 0_TYPE_OWNER
  BoardDeclarations::Instances::TArduinoESP32BluetoothLEModule1, // 1_NAME_OWNER
  Mitov::ConstantProperty<1, bool, true > // Enabled
   > TArduinoESP32BluetoothLEServer1;
} // Types

namespace Instances
{
Types::TArduinoESP32BluetoothLEServer1 TArduinoESP32BluetoothLEServer1;
} // Instances

} // BoardDeclarations

// Declarations

namespace Declarations
{
namespace Types
{
typedef Mitov::ArduinoBluetoothLEUartService<
  BoardDeclarations::Types::TArduinoESP32BluetoothLEServer1, // 0_TYPE_OWNER
  BoardDeclarations::Instances::TArduinoESP32BluetoothLEServer1, // 1_NAME_OWNER
  Mitov::ArduinoBluetoothLEUartServiceImpl_HC08, // BASE
  Mitov::ConstantProperty<5, uint32_t, 200 >, // BufferSize
  Mitov::ConstantProperty<1, bool, true >, // Enabled
  Mitov::GenericPin_EmbeddedPinImplementation<3, ::PinCalls::PinCallerReceive1 > // OutputPin
   > TArduinoBluetoothUartService1;
} // Types

namespace Instances
{
Types::TArduinoBluetoothUartService1 TArduinoBluetoothUartService1;
} // Instances

namespace Types
{
typedef Mitov::StepperMotor4Wire<
  Mitov::TypedVariableValue<9, bool, ::ComponentVariables::Variable1, false >, // Enabled
  Mitov::TypedVariable<13, uint32_t, ::ComponentVariables::Variable3 >, // FStep
  Mitov::ConstantProperty<12, bool, false >, // HalfStep
  Mitov::DigitalPin_DirectBoardPinImplementation<5 >, // OutputPins_0
  Mitov::DigitalPin_DirectBoardPinImplementation<18 >, // OutputPins_1
  Mitov::DigitalPin_DirectBoardPinImplementation<19 >, // OutputPins_2
  Mitov::DigitalPin_DirectBoardPinImplementation<21 >, // OutputPins_3
  Mitov::TypedVariableValue<10, bool, ::ComponentVariables::Variable2, false >, // Reversed
  Mitov::StepperMotorSpeed, // Speed_Implementation
  Mitov::ConstantPropertyFloat<11, float, ::VisuinoConstants::FloatValue0 > // StepsPerSecond
   > TILT;
} // Types

namespace Instances
{
Types::TILT TILT;
} // Instances

namespace Types
{
typedef Mitov::Packet<
  5, // COUNT_Elements
  Mitov::NestedProperty<12, Mitov::PacketChecksumElement<
    Mitov::ConstantProperty<11, bool, true > // Enabled
     > >, // Checksum
  Mitov::EmbeddedCallChain<CallChains::CheckPopulated1 >, // Elements_CheckPopulated
  Mitov::EmbeddedCallChain<CallChains::Expand1 >, // Elements_Expand
  Mitov::EmbeddedCallChain<CallChains::GetData1 >, // Elements_GetData
  Mitov::EmbeddedCallChain<CallChains::GetSize1 >, // Elements_GetSize
  Mitov::TypedVariable<15, bool, ::ComponentVariables::Variable5 >, // FModified
  Mitov::TypedVariable<13, bool, ::ComponentVariables::Variable4 >, // FNeedsNewSize
  Mitov::TypedVariable<17, bool, ::ComponentVariables::Variable6 >, // FRefreshed
  Mitov::NestedProperty<9, Mitov::TArduinoHeadMarkerBinaryPacketElement<
    Mitov::NullPropertyArray<8, uint8_t, uint8_t >, // Bytes
    Mitov::EmbeddedCallChain<CallChains::ApplyValues1 >, // Bytes_ApplyValues
    Mitov::EmbeddedCallChain<CallChains::GetValue1 > // Bytes_GetValue
     > >, // HeadMarker
  Mitov::ConstantProperty<5, bool, false >, // OnlyModified
  Mitov::TypedPin_EmbeddedPinImplementation<3, ::PinCalls::PinCallerReceive2, Mitov::TArray<uint8_t> > // OutputPin
   > Packet1;
} // Types

namespace Instances
{
Types::Packet1 Packet1;
} // Instances

namespace Types
{
typedef Mitov::PacketDigitalBinaryElement<
  Declarations::Types::Packet1, // 0_TYPE_OWNER
  Declarations::Instances::Packet1, // 1_NAME_OWNER
  Mitov::TypedVariable<5, bool, ::ComponentVariables::Variable8 >, // FBoolValue
  Mitov::TypedVariable<3, bool, ::ComponentVariables::Variable7 > // FPopulated
   > TArduinoDigitalBinaryPacketElement1;
} // Types

namespace Instances
{
Types::TArduinoDigitalBinaryPacketElement1 TArduinoDigitalBinaryPacketElement1 = Types::TArduinoDigitalBinaryPacketElement1( false );
} // Instances

namespace Types
{
typedef Mitov::PacketDigitalBinaryElement<
  Declarations::Types::Packet1, // 0_TYPE_OWNER
  Declarations::Instances::Packet1, // 1_NAME_OWNER
  Mitov::TypedVariable<5, bool, ::ComponentVariables::Variable10 >, // FBoolValue
  Mitov::TypedVariable<3, bool, ::ComponentVariables::Variable9 > // FPopulated
   > TArduinoDigitalBinaryPacketElement2;
} // Types

namespace Instances
{
Types::TArduinoDigitalBinaryPacketElement2 TArduinoDigitalBinaryPacketElement2 = Types::TArduinoDigitalBinaryPacketElement2( false );
} // Instances

namespace Types
{
typedef Mitov::PacketDigitalBinaryElement<
  Declarations::Types::Packet1, // 0_TYPE_OWNER
  Declarations::Instances::Packet1, // 1_NAME_OWNER
  Mitov::TypedVariable<5, bool, ::ComponentVariables::Variable12 >, // FBoolValue
  Mitov::TypedVariable<3, bool, ::ComponentVariables::Variable11 > // FPopulated
   > TArduinoDigitalBinaryPacketElement3;
} // Types

namespace Instances
{
Types::TArduinoDigitalBinaryPacketElement3 TArduinoDigitalBinaryPacketElement3 = Types::TArduinoDigitalBinaryPacketElement3( false );
} // Instances

namespace Types
{
typedef Mitov::PacketDigitalBinaryElement<
  Declarations::Types::Packet1, // 0_TYPE_OWNER
  Declarations::Instances::Packet1, // 1_NAME_OWNER
  Mitov::TypedVariable<5, bool, ::ComponentVariables::Variable14 >, // FBoolValue
  Mitov::TypedVariable<3, bool, ::ComponentVariables::Variable13 > // FPopulated
   > TArduinoDigitalBinaryPacketElement4;
} // Types

namespace Instances
{
Types::TArduinoDigitalBinaryPacketElement4 TArduinoDigitalBinaryPacketElement4 = Types::TArduinoDigitalBinaryPacketElement4( false );
} // Instances

namespace Types
{
typedef Mitov::PacketDigitalBinaryElement<
  Declarations::Types::Packet1, // 0_TYPE_OWNER
  Declarations::Instances::Packet1, // 1_NAME_OWNER
  Mitov::TypedVariable<5, bool, ::ComponentVariables::Variable16 >, // FBoolValue
  Mitov::TypedVariable<3, bool, ::ComponentVariables::Variable15 > // FPopulated
   > TArduinoDigitalBinaryPacketElement5;
} // Types

namespace Instances
{
Types::TArduinoDigitalBinaryPacketElement5 TArduinoDigitalBinaryPacketElement5 = Types::TArduinoDigitalBinaryPacketElement5( false );
} // Instances

namespace Types
{
typedef Mitov::StepperMotor4Wire<
  Mitov::TypedVariableValue<9, bool, ::ComponentVariables::Variable17, false >, // Enabled
  Mitov::TypedVariable<13, uint32_t, ::ComponentVariables::Variable19 >, // FStep
  Mitov::ConstantProperty<12, bool, false >, // HalfStep
  Mitov::DigitalPin_DirectBoardPinImplementation<26 >, // OutputPins_0
  Mitov::DigitalPin_DirectBoardPinImplementation<25 >, // OutputPins_1
  Mitov::DigitalPin_DirectBoardPinImplementation<33 >, // OutputPins_2
  Mitov::DigitalPin_DirectBoardPinImplementation<32 >, // OutputPins_3
  Mitov::TypedVariableValue<10, bool, ::ComponentVariables::Variable18, false >, // Reversed
  Mitov::StepperMotorSpeed, // Speed_Implementation
  Mitov::ConstantPropertyFloat<11, float, ::VisuinoConstants::FloatValue1 > // StepsPerSecond
   > PAN;
} // Types

namespace Instances
{
Types::PAN PAN;
} // Instances

namespace RemoteXY_Declarations
{
  namespace _o_RemoteXY1
  {
    #pragma pack(push, 1)

    // RemoteXY configurate
    static uint8_t const PROGMEM Config[] =
    {
      15, 25, 1, 1, 0, 23, 64, 19, 19, 2, 31, 68, 87, 78, 0, 1, 0, 23, 19, 19, 19, 2, 31, 85, 80, 0, 1, 0, 1, 40, 19, 19, 2, 31, 76, 69, 70, 84, 0, 1, 0, 43, 40, 19, 19, 2, 31, 82, 73, 71, 72, 84, 0
    };

    // this structure defines all the variables of your control interface
    struct
    {
      // input variable
      uint8_t switch_0; // =1 if switch ON and =0 if OFF
      uint8_t switch_1; // =1 if switch ON and =0 if OFF
      uint8_t switch_2; // =1 if switch ON and =0 if OFF
      uint8_t switch_3; // =1 if switch ON and =0 if OFF

      // output variable
    }
    RemoteXY;

    #pragma pack(pop)

    class Access
    {
    public:
      inline static uint8_t *GetConfig()
      {
        return (uint8_t*)Config;
      }

      inline static uint8_t *GetData()
      {
        return (uint8_t*)&RemoteXY;
      }

    };

  } // _o_RemoteXY1
} // RemoteXY_Declarations

namespace Types
{
typedef Mitov::MitovRemoteXY<
  ::Declarations::RemoteXY_Declarations::_o_RemoteXY1::Access, // 0_ACCESS
  53, // C_CONFIG_LENGTH
  53, // C_CONFIG_VERSION
  4, // C_INPUT_LENGTH
  0, // C_OUTPUT_LENGTH
  Mitov::TypedVariable<32, int32_t, ::ComponentVariables::Variable20> // FProtocolConnectedFlags
   > RemoteXY1;
} // Types

namespace Instances
{
Types::RemoteXY1 RemoteXY1;
} // Instances

namespace Types
{
typedef Mitov::MitovRemoteXYDigitalOutput<
  Declarations::Types::RemoteXY1, // 0_TYPE_OWNER
  Declarations::Instances::RemoteXY1, // 1_NAME_OWNER
  Mitov::ConstantProperty<4, bool, false >, // InitialValue
  Mitov::DigitalPin_EmbeddedPinImplementation<3, ::PinCalls::PinCallerReceive3 >, // OutputPin
  Mitov::ConstantProperty<2, bool, true > // UseInitialValueOnDisconnect
   > TArduinoRemoteXYButtonElement1;
} // Types

namespace Instances
{
Types::TArduinoRemoteXYButtonElement1 TArduinoRemoteXYButtonElement1;
} // Instances

namespace Types
{
typedef Mitov::MitovRemoteXYDigitalOutput<
  Declarations::Types::RemoteXY1, // 0_TYPE_OWNER
  Declarations::Instances::RemoteXY1, // 1_NAME_OWNER
  Mitov::ConstantProperty<4, bool, false >, // InitialValue
  Mitov::DigitalPin_EmbeddedPinImplementation<3, ::PinCalls::PinCallerReceive4 >, // OutputPin
  Mitov::ConstantProperty<2, bool, true > // UseInitialValueOnDisconnect
   > TArduinoRemoteXYButtonElement2;
} // Types

namespace Instances
{
Types::TArduinoRemoteXYButtonElement2 TArduinoRemoteXYButtonElement2;
} // Instances

namespace Types
{
typedef Mitov::MitovRemoteXYDigitalOutput<
  Declarations::Types::RemoteXY1, // 0_TYPE_OWNER
  Declarations::Instances::RemoteXY1, // 1_NAME_OWNER
  Mitov::ConstantProperty<4, bool, false >, // InitialValue
  Mitov::DigitalPin_EmbeddedPinImplementation<3, ::PinCalls::PinCallerReceive5 >, // OutputPin
  Mitov::ConstantProperty<2, bool, true > // UseInitialValueOnDisconnect
   > TArduinoRemoteXYButtonElement3;
} // Types

namespace Instances
{
Types::TArduinoRemoteXYButtonElement3 TArduinoRemoteXYButtonElement3;
} // Instances

namespace Types
{
typedef Mitov::MitovRemoteXYDigitalOutput<
  Declarations::Types::RemoteXY1, // 0_TYPE_OWNER
  Declarations::Instances::RemoteXY1, // 1_NAME_OWNER
  Mitov::ConstantProperty<4, bool, false >, // InitialValue
  Mitov::DigitalPin_EmbeddedPinImplementation<3, ::PinCalls::PinCallerReceive6 >, // OutputPin
  Mitov::ConstantProperty<2, bool, true > // UseInitialValueOnDisconnect
   > TArduinoRemoteXYButtonElement4;
} // Types

namespace Instances
{
Types::TArduinoRemoteXYButtonElement4 TArduinoRemoteXYButtonElement4;
} // Instances

namespace Types
{
typedef Mitov::MitovRemoteXYProtpcol<
  Mitov::RemoteXY_Serial<
      Declarations::Types::TArduinoBluetoothUartService1, // 0_SERIAL_TYPE_PIN
      Declarations::Instances::TArduinoBluetoothUartService1 // 1_SERIAL_NAME_PIN
      >, // 0_INTERFACE
  Declarations::Types::RemoteXY1, // 0_TYPE_OWNER
  Declarations::Instances::RemoteXY1, // 1_NAME_OWNER
  Mitov::DigitalPin_NoImplementation<2 >, // ConnectedOutputPin
  0, // INDEX
  Mitov::ConstantPropertyString<3, ::VisuinoConstants::TextValue1 > // Password
   > TArduinoRemoteXYProtocolSerial1;
} // Types

namespace Instances
{
Types::TArduinoRemoteXYProtocolSerial1 TArduinoRemoteXYProtocolSerial1;
} // Instances

namespace Types
{
typedef Mitov::BooleanOperation<
  Mitov::BooleanOr, // BASE
  2, // COUNT_InputPins
  Mitov::TypedVariable<7, bool, ::ComponentVariables::Variable22 >, // FModified
  Mitov::DigitalPin_EmbeddedPinImplementation_ChangeOnly<3, ::PinCalls::PinCallerReceive7, Mitov::TypedVariable<0, bool, ::ComponentVariables::Variable21 > > // OutputPin
   > Or1;
} // Types

namespace Instances
{
Types::Or1 Or1;
} // Instances

namespace Types
{
typedef Mitov::BooleanOperation<
  Mitov::BooleanOr, // BASE
  2, // COUNT_InputPins
  Mitov::TypedVariable<7, bool, ::ComponentVariables::Variable24 >, // FModified
  Mitov::DigitalPin_EmbeddedPinImplementation_ChangeOnly<3, ::PinCalls::PinCallerReceive8, Mitov::TypedVariable<0, bool, ::ComponentVariables::Variable23 > > // OutputPin
   > Or2;
} // Types

namespace Instances
{
Types::Or2 Or2;
} // Instances

namespace Types
{
typedef Mitov::BooleanOperation<
  Mitov::BooleanOr, // BASE
  4, // COUNT_InputPins
  Mitov::TypedVariable<9, bool, ::ComponentVariables::Variable26 >, // FModified
  Mitov::DigitalPin_EmbeddedPinImplementation_ChangeOnly<3, ::PinCalls::PinCallerReceive9, Mitov::TypedVariable<0, bool, ::ComponentVariables::Variable25 > > // OutputPin
   > Or3;
} // Types

namespace Instances
{
Types::Or3 Or3;
} // Instances

} // Declarations

// Type Converters

namespace TypeConverters
{
Mitov::Convert_BinaryToClock<Mitov::TypedVariable<0, bool, ::ComponentVariables::Variable27 >> Converter0;
Mitov::Convert_BinaryToClock<Mitov::TypedVariable<0, bool, ::ComponentVariables::Variable28 >> Converter1;
} // TypeConverters

// Call Chains

namespace CallChains
{
void CheckPopulated1::Call( bool & AIsPopulated )
{
  Declarations::Instances::TArduinoDigitalBinaryPacketElement1.CheckPopulated( AIsPopulated );
  Declarations::Instances::TArduinoDigitalBinaryPacketElement2.CheckPopulated( AIsPopulated );
  Declarations::Instances::TArduinoDigitalBinaryPacketElement3.CheckPopulated( AIsPopulated );
  Declarations::Instances::TArduinoDigitalBinaryPacketElement4.CheckPopulated( AIsPopulated );
  Declarations::Instances::TArduinoDigitalBinaryPacketElement5.CheckPopulated( AIsPopulated );
}

void GetData1::Call( uint8_t *& ADataStart, uint32_t & ADataIndex, uint8_t & AOffset )
{
  Declarations::Instances::TArduinoDigitalBinaryPacketElement1.GetData( ADataStart, ADataIndex, AOffset );
  Declarations::Instances::TArduinoDigitalBinaryPacketElement2.GetData( ADataStart, ADataIndex, AOffset );
  Declarations::Instances::TArduinoDigitalBinaryPacketElement3.GetData( ADataStart, ADataIndex, AOffset );
  Declarations::Instances::TArduinoDigitalBinaryPacketElement4.GetData( ADataStart, ADataIndex, AOffset );
  Declarations::Instances::TArduinoDigitalBinaryPacketElement5.GetData( ADataStart, ADataIndex, AOffset );
}

void GetSize1::Call( int32_t AIndex, bool & AAlligned, int & AResult )
{
  switch( AIndex )
  {
    case 0: Declarations::Instances::TArduinoDigitalBinaryPacketElement1.GetSize( AAlligned, AResult ); break;
    case 1: Declarations::Instances::TArduinoDigitalBinaryPacketElement2.GetSize( AAlligned, AResult ); break;
    case 2: Declarations::Instances::TArduinoDigitalBinaryPacketElement3.GetSize( AAlligned, AResult ); break;
    case 3: Declarations::Instances::TArduinoDigitalBinaryPacketElement4.GetSize( AAlligned, AResult ); break;
    case 4: Declarations::Instances::TArduinoDigitalBinaryPacketElement5.GetSize( AAlligned, AResult ); break;
  }
}

void Expand1::Call( int32_t AIndex, uint8_t * const & AInBuffer, uint8_t * const & AOutBuffer, int & ASize, bool & AResult )
{
  switch( AIndex )
  {
    case 0: Declarations::Instances::TArduinoDigitalBinaryPacketElement1.Expand( AInBuffer, AOutBuffer, ASize, AResult ); break;
    case 1: Declarations::Instances::TArduinoDigitalBinaryPacketElement2.Expand( AInBuffer, AOutBuffer, ASize, AResult ); break;
    case 2: Declarations::Instances::TArduinoDigitalBinaryPacketElement3.Expand( AInBuffer, AOutBuffer, ASize, AResult ); break;
    case 3: Declarations::Instances::TArduinoDigitalBinaryPacketElement4.Expand( AInBuffer, AOutBuffer, ASize, AResult ); break;
    case 4: Declarations::Instances::TArduinoDigitalBinaryPacketElement5.Expand( AInBuffer, AOutBuffer, ASize, AResult ); break;
  }
}

void GetValue1::Call( int32_t AIndex, uint8_t & AValue )
{
}

void ApplyValues1::Call( uint8_t * AValue )
{
}

} // CallChains

// Pin Call Declarations

namespace PinCalls
{
void PinCallerConverterReceive1( void *_Data );
void PinCallerConverterReceive2( void *_Data );
} // PinCalls

// Pin Call Implementations

namespace PinCalls
{
void PinCallerReceive1::Notify( void *_Data )
{
  Declarations::Instances::TArduinoRemoteXYProtocolSerial1._DirectPinReceive( _Data );
}

void PinCallerReceive0::Notify( void *_Data )
{
  Declarations::Instances::TArduinoDigitalBinaryPacketElement5.InputPin_o_Receive( _Data );
}

void PinCallerReceive2::Notify( void *_Data )
{
  BoardDeclarations::Instances::SerialPort0_Input_IOWByteStream_1.InputPin_o_Receive( _Data );
}

void PinCallerReceive3::Notify( void *_Data )
{
  Declarations::Instances::TArduinoDigitalBinaryPacketElement1.InputPin_o_Receive( _Data );
  TypeConverters::Converter0.Convert( _Data, PinCallerConverterReceive1 );
  Declarations::Instances::Or1.InputPins_o_Receive( 0, _Data );
  Declarations::Instances::Or3.InputPins_o_Receive( 0, _Data );
}

void PinCallerConverterReceive1( void *_Data )
{
  Declarations::Instances::TILT.StepInputPin_o_Receive( _Data );
}
void PinCallerReceive4::Notify( void *_Data )
{
  Declarations::Instances::TArduinoDigitalBinaryPacketElement2.InputPin_o_Receive( _Data );
  Declarations::Instances::TILT.Reversed().InputPin_o_Receive( _Data );
  Declarations::Instances::Or1.InputPins_o_Receive( 1, _Data );
  Declarations::Instances::Or3.InputPins_o_Receive( 1, _Data );
}

void PinCallerReceive5::Notify( void *_Data )
{
  Declarations::Instances::PAN.Reversed().InputPin_o_Receive( _Data );
  Declarations::Instances::TArduinoDigitalBinaryPacketElement3.InputPin_o_Receive( _Data );
  Declarations::Instances::Or2.InputPins_o_Receive( 0, _Data );
  Declarations::Instances::Or3.InputPins_o_Receive( 2, _Data );
}

void PinCallerReceive6::Notify( void *_Data )
{
  TypeConverters::Converter1.Convert( _Data, PinCallerConverterReceive2 );
  Declarations::Instances::TArduinoDigitalBinaryPacketElement4.InputPin_o_Receive( _Data );
  Declarations::Instances::Or2.InputPins_o_Receive( 1, _Data );
  Declarations::Instances::Or3.InputPins_o_Receive( 3, _Data );
}

void PinCallerConverterReceive2( void *_Data )
{
  Declarations::Instances::PAN.StepInputPin_o_Receive( _Data );
}
void PinCallerReceive7::Notify( void *_Data )
{
  Declarations::Instances::TILT.Enabled().InputPin_o_Receive( _Data );
}

void PinCallerReceive8::Notify( void *_Data )
{
  Declarations::Instances::PAN.Enabled().InputPin_o_Receive( _Data );
}

void PinCallerReceive9::Notify( void *_Data )
{
  BoardDeclarations::Instances::ArduinoDigitalChannel_14.DigitalInputPin_o_Receive( _Data );
}

} // PinCalls

namespace ComponentsHardware
{
void SystemUpdateHardware()
{
}
} // ComponentsHardware

//The setup function is called once at startup of the sketch
void setup()
{
  BoardDeclarations::Instances::TArduinoESP32BluetoothLEModule1.SystemInit();
  BoardDeclarations::Instances::TArduinoESP32BluetoothLEServer1.SystemInit();
  BoardDeclarations::Instances::ArduinoDigitalChannel_14.SystemInit();
  Declarations::Instances::TArduinoBluetoothUartService1.SystemInit();
  BoardDeclarations::Instances::SerialPort0.SystemInit();
  BoardDeclarations::Instances::ArduinoAnalogInputChannel_AsDigital_14.SystemInit();
  BoardDeclarations::Instances::ArduinoDigitalChannel_14.SystemStart();
  BoardDeclarations::Instances::TArduinoESP32BluetoothLEModule1.SystemStart();
  BoardDeclarations::Instances::TArduinoESP32BluetoothLEServer1.SystemStart();
  Declarations::Instances::TArduinoBluetoothUartService1.SystemStart();
  BoardDeclarations::Instances::ArduinoAnalogInputChannel_AsDigital_14.SystemStart();
  Declarations::Instances::Packet1.SystemStart();
  Declarations::Instances::TArduinoRemoteXYButtonElement1.SystemStart();
  Declarations::Instances::TArduinoRemoteXYButtonElement2.SystemStart();
  Declarations::Instances::TArduinoRemoteXYButtonElement3.SystemStart();
  Declarations::Instances::TArduinoRemoteXYButtonElement4.SystemStart();
  Declarations::Instances::TArduinoRemoteXYProtocolSerial1.SystemStart();
  Declarations::Instances::Or1.SystemStart();
  Declarations::Instances::Or2.SystemStart();
  Declarations::Instances::Or3.SystemStart();
}

// The loop function is called in an endless loop
void loop()
{
  BoardDeclarations::Instances::ArduinoDigitalChannel_14.SystemLoopBegin();
  Declarations::Instances::TArduinoBluetoothUartService1.SystemLoopBegin();
  BoardDeclarations::Instances::SerialPort0.SystemLoopBegin();
  BoardDeclarations::Instances::ArduinoAnalogInputChannel_AsDigital_14.SystemLoopBegin();
  Declarations::Instances::TILT.SystemLoopBegin();
  Declarations::Instances::Packet1.SystemLoopBegin();
  Declarations::Instances::PAN.SystemLoopBegin();
  Declarations::Instances::TArduinoRemoteXYButtonElement1.SystemLoopBegin(::Declarations::RemoteXY_Declarations::_o_RemoteXY1::RemoteXY.switch_0);
  Declarations::Instances::TArduinoRemoteXYButtonElement2.SystemLoopBegin(::Declarations::RemoteXY_Declarations::_o_RemoteXY1::RemoteXY.switch_1);
  Declarations::Instances::TArduinoRemoteXYButtonElement3.SystemLoopBegin(::Declarations::RemoteXY_Declarations::_o_RemoteXY1::RemoteXY.switch_2);
  Declarations::Instances::TArduinoRemoteXYButtonElement4.SystemLoopBegin(::Declarations::RemoteXY_Declarations::_o_RemoteXY1::RemoteXY.switch_3);
  Declarations::Instances::TArduinoRemoteXYProtocolSerial1.SystemLoopBegin();
  Declarations::Instances::Or1.SystemLoopEnd();
  Declarations::Instances::Or2.SystemLoopEnd();
  Declarations::Instances::Or3.SystemLoopEnd();
}

3

Re: Read timeout error

Note to de-energize the stepper motors when not running, I use a relay to cut power to the Stepper drivers.