Pigeon-Kicker
Published © GPL3+

8-to-1 RC Receiver "MUX" or MultiPlex of Interrupt Pins 2, 3

This is part one of the RC receiver signal "MUX". It creates a PPM signal using a CD4051 Binary Encoded Switch as a base.

AdvancedShowcase (no instructions)1,052
8-to-1 RC Receiver "MUX" or MultiPlex of Interrupt Pins 2, 3

Things used in this project

Story

Read more

Schematics

Bread Board view

This is the Fritzing BB output.

Schematic for "MUX" binary switch

Schematic for "MUX" binary switch

"MUX" fritzing file

"MUX" fritzing file

Visuino file for the RC "MUX"

Visuino file for the RC "MUX" go to www.visuino.com to download it.

Code

Visuino file for the RC "MUX"

C/C++
This requires Visuino be installed
//----------------------------------------------
//
//        Sketch Generated by Visuino
//              www.visuino.com
//          Version  7.8.2.230
//
//------------------ Source --------------------
//
// Using RC channel MUX.owarduino
//
//----------------------------------------------

#define VISUINO_ARDUINO_NANO
#define _MITOV_SERIAL_SENDING_PIN_
#define _MITOV_REMEMBER_RECALL_PIN_

#include <OpenWire.h>
#include <Mitov.h>
#include <Mitov_FormattedSerial.h>
#include <Mitov_Timing.h>
#include <Mitov_RCServoMeter.h>
#include <Mitov_ValueArray.h>
#include <Mitov_Text.h>
#include <Mitov_PlayFrequencyTone.h>
#include <Mitov_Counter.h>
#ifndef VISUINO_ESP32
#include <Servo.h>
#endif // VISUINO_ESP32
#include <Mitov_Servo.h>
#include <Mitov_BinaryGenerators.h>
#include <Mitov_BinaryDecoder.h>
#include <Mitov_Switch.h>
#include <Mitov_Remember.h>
#include <Mitov_Math.h>

// Arduino Board Declarations

namespace BoardDeclarations
{
Mitov::TypedSerialPort<Mitov::SerialPort<SERIAL_TYPE, Serial>, SERIAL_TYPE, Serial> SerialPort0;
Mitov::ArduinoSerialStringInput<Mitov::TypedSerialPort<Mitov::SerialPort<SERIAL_TYPE, Serial>, SERIAL_TYPE, Serial>, SerialPort0> SerialPort0_String_1;
Mitov::ArduinoDigitalOutputChannel<2> ArduinoDigitalChannel_2( false, false );
Mitov::ArduinoDigitalInputChannel<3, false> ArduinoDigitalChannel_3( false );
Mitov::ArduinoDigitalInputChannel<6, false> ArduinoDigitalChannel_6( false );
Mitov::ArduinoDigitalInputChannel<7, false> ArduinoDigitalChannel_7( false );
Mitov::ArduinoDigitalInputChannel<8, false> ArduinoDigitalChannel_8( false );
} // BoardDeclarations

// Interrupts

namespace Interrupts
{
void Handler2();

OpenWire::PinChangeInterrupt Pin2( 2, Handler2 );

void Handler2()
{
    Pin2.InterruptHandler();
}

} // Interrupts

// Declarations

namespace Declarations
{
Mitov::Start Start1;
Mitov::RCServoMeter_Interrupt RCServoMeter1;
Mitov::ValueArray_Const<uint8_t, bool> OneBit;
Mitov::ValueArray_Const<uint8_t, bool> TwoBit;
Mitov::ValueArray_Const<uint8_t, bool> FourBit;
Mitov::FormattedText_Fixed FormattedText1;
Mitov::FormattedTextElementUnsigned TArduinoFormattedTextElementUnsigned1( Declarations::FormattedText1 );
Mitov::FormattedTextElementAnalog TArduinoFormattedTextElementAnalog1( Declarations::FormattedText1 );
Mitov::FormattedTextElementAnalog TArduinoFormattedTextElementAnalog2( Declarations::FormattedText1 );
Mitov::FormattedTextElementAnalog TArduinoFormattedTextElementAnalog3( Declarations::FormattedText1 );
Mitov::FormattedTextElementAnalog TArduinoFormattedTextElementAnalog4( Declarations::FormattedText1 );
Mitov::FormattedTextElementAnalog TArduinoFormattedTextElementAnalog5( Declarations::FormattedText1 );
Mitov::FormattedTextElementAnalog TArduinoFormattedTextElementAnalog6( Declarations::FormattedText1 );
Mitov::PlayFrequencyToneDuration PlayFrequency1 = Mitov::PlayFrequencyToneDuration( 4 );
Mitov::PlayFrequencyToneSetValueElement<Mitov::PlayFrequencyToneDuration, Declarations::PlayFrequency1> TArduinoPlayFrequencyToneSetValueElement1;
Mitov::Counter Counter1;
Mitov::MitovServo<5, 544, 2400> Servo1;
Mitov::PulseGeneratorSimple PulseGenerator1;
Mitov::BinaryDecoder<6> BinaryDecoder1;
Mitov::CommonSwitch<float, float> AnalogSwitch1 = Mitov::CommonSwitch<float, float>( 0.0f );
Mitov::CommonSwitch<float, float> AnalogSwitch2 = Mitov::CommonSwitch<float, float>( 0.0f );
Mitov::CommonSwitch<float, float> AnalogSwitch3 = Mitov::CommonSwitch<float, float>( 0.0f );
Mitov::CommonSwitch<float, float> AnalogSwitch4 = Mitov::CommonSwitch<float, float>( 0.0f );
Mitov::CommonSwitch<float, float> AnalogSwitch6 = Mitov::CommonSwitch<float, float>( 0.0f );
Mitov::CommonSwitch<float, float> AnalogSwitch5 = Mitov::CommonSwitch<float, float>( 0.0f );
Mitov::Remember<float, float> RememberAnalog1 = Mitov::Remember<float, float>( 0.0f );
Mitov::Remember<float, float> RememberAnalog2 = Mitov::Remember<float, float>( 0.0f );
Mitov::Remember<float, float> RememberAnalog3 = Mitov::Remember<float, float>( 0.0f );
Mitov::Remember<float, float> RememberAnalog4 = Mitov::Remember<float, float>( 0.0f );
Mitov::Remember<float, float> RememberAnalog5 = Mitov::Remember<float, float>( 0.0f );
Mitov::Remember<float, float> RememberAnalog6 = Mitov::Remember<float, float>( 0.0f );
Mitov::AnalogDeadZoneScaled DeadZoneScaled1;
} // Declarations

// Type Converters

namespace TypeConverters
{
Mitov::Convert_BinaryToClock Converter0;
Mitov::Convert_BinaryToClock Converter1;
Mitov::Convert_BinaryToClock Converter2;
Mitov::Convert_BinaryToClock Converter3;
Mitov::Convert_BinaryToClock Converter4;
Mitov::Convert_BinaryToClock Converter5;
Mitov::Convert_BinaryToClock Converter6;
} // TypeConverters

// Pin Call Declarations

namespace PinCalls
{
void PinCallerReceive1( void *_Data );
void PinCallerReceive2( void *_Data );
void PinCallerReceive3( void *_Data );
void PinCallerReceive4( void *_Data );
void PinCallerReceive5( void *_Data );
void PinCallerReceive6( void *_Data );
void PinCallerReceive7( void *_Data );
void PinCallerReceive8( void *_Data );
void PinCallerReceive9( void *_Data );
void PinCallerReceive10( void *_Data );
void PinCallerReceive11( void *_Data );
void PinCallerReceive12( void *_Data );
void PinCallerReceive13( void *_Data );
void PinCallerReceive14( void *_Data );
void PinCallerReceive15( void *_Data );
void PinCallerReceive16( void *_Data );
void PinCallerReceive17( void *_Data );
void PinCallerReceive18( void *_Data );
void PinCallerReceive19( void *_Data );
void PinCallerReceive20( void *_Data );
void PinCallerReceive21( void *_Data );
void PinCallerReceive22( void *_Data );
void PinCallerReceive23( void *_Data );
void PinCallerReceive24( void *_Data );
void PinCallerReceive25( void *_Data );
void PinCallerReceive26( void *_Data );
void PinCallerReceive27( void *_Data );
void PinCallerReceive28( void *_Data );
void PinCallerReceive29( void *_Data );
void PinCallerReceive30( void *_Data );
void PinCallerReceive31( void *_Data );
void PinCallerReceive32( void *_Data );
void PinCallerReceive33( void *_Data );
void PinCallerReceive34( void *_Data );
void PinCallerReceive35( void *_Data );
} // PinCalls

// Pin Call Implementations

namespace PinCalls
{
void PinCallerReceive1( void *_Data )
{
  BoardDeclarations::ArduinoDigitalChannel_3.DigitalInputPin_o_Receive( _Data );
}

void PinCallerReceive2( void *_Data )
{
  Declarations::Counter1.ResetInputPin_o_Receive( _Data );
}

void PinCallerReceive3( void *_Data )
{
  Declarations::DeadZoneScaled1.InputPin_o_Receive( _Data );
}

void PinCallerReceive4( void *_Data )
{
  BoardDeclarations::ArduinoDigitalChannel_6.DigitalInputPin_o_Receive( _Data );
}

void PinCallerReceive5( void *_Data )
{
  BoardDeclarations::ArduinoDigitalChannel_7.DigitalInputPin_o_Receive( _Data );
}

void PinCallerReceive6( void *_Data )
{
  BoardDeclarations::ArduinoDigitalChannel_8.DigitalInputPin_o_Receive( _Data );
}

void PinCallerReceive7( void *_Data )
{
  BoardDeclarations::SerialPort0_String_1.InputPin_o_Receive( _Data );
}

void PinCallerReceive8( void *_Data )
{
  Declarations::TArduinoFormattedTextElementUnsigned1.InputPin_o_Receive( _Data );
  Declarations::FourBit.IndexInputPin_o_Receive( _Data );
  Declarations::TwoBit.IndexInputPin_o_Receive( _Data );
  Declarations::OneBit.IndexInputPin_o_Receive( _Data );
  Declarations::BinaryDecoder1.InputPin_o_Receive( _Data );
}

void PinCallerReceive10( void *_Data )
{
  TypeConverters::Converter0.Convert( _Data, PinCallerReceive9 );
}

void PinCallerReceive9( void *_Data )
{
  Declarations::Counter1.InputPin_o_Receive( _Data );
  Declarations::TArduinoPlayFrequencyToneSetValueElement1.InputPin_o_Receive( _Data );
  Declarations::FormattedText1.ClockInputPin_o_Receive( _Data );
  Declarations::FourBit.ClockInputPin_o_Receive( _Data );
  Declarations::TwoBit.ClockInputPin_o_Receive( _Data );
  Declarations::OneBit.ClockInputPin_o_Receive( _Data );
  Declarations::RememberAnalog1.RecallInputPin_o_Receive( _Data );
  Declarations::RememberAnalog2.RecallInputPin_o_Receive( _Data );
  Declarations::RememberAnalog3.RecallInputPin_o_Receive( _Data );
  Declarations::RememberAnalog4.RecallInputPin_o_Receive( _Data );
  Declarations::RememberAnalog5.RecallInputPin_o_Receive( _Data );
  Declarations::RememberAnalog6.RecallInputPin_o_Receive( _Data );
}
void PinCallerReceive11( void *_Data )
{
  Declarations::AnalogSwitch1.EnableInputPin_o_Receive( _Data );
  TypeConverters::Converter1.Convert( _Data, PinCallerReceive12 );
}

void PinCallerReceive12( void *_Data )
{
  Declarations::RememberAnalog1.RememberInputPin_o_Receive( _Data );
}
void PinCallerReceive13( void *_Data )
{
  Declarations::AnalogSwitch2.EnableInputPin_o_Receive( _Data );
  TypeConverters::Converter2.Convert( _Data, PinCallerReceive14 );
}

void PinCallerReceive14( void *_Data )
{
  Declarations::RememberAnalog2.RememberInputPin_o_Receive( _Data );
}
void PinCallerReceive15( void *_Data )
{
  Declarations::AnalogSwitch3.EnableInputPin_o_Receive( _Data );
  TypeConverters::Converter3.Convert( _Data, PinCallerReceive16 );
}

void PinCallerReceive16( void *_Data )
{
  Declarations::RememberAnalog3.RememberInputPin_o_Receive( _Data );
}
void PinCallerReceive17( void *_Data )
{
  Declarations::AnalogSwitch4.EnableInputPin_o_Receive( _Data );
  TypeConverters::Converter4.Convert( _Data, PinCallerReceive18 );
}

void PinCallerReceive18( void *_Data )
{
  Declarations::RememberAnalog4.RememberInputPin_o_Receive( _Data );
}
void PinCallerReceive19( void *_Data )
{
  Declarations::AnalogSwitch5.EnableInputPin_o_Receive( _Data );
  TypeConverters::Converter5.Convert( _Data, PinCallerReceive20 );
}

void PinCallerReceive20( void *_Data )
{
  Declarations::RememberAnalog5.RememberInputPin_o_Receive( _Data );
}
void PinCallerReceive21( void *_Data )
{
  Declarations::AnalogSwitch6.EnableInputPin_o_Receive( _Data );
  TypeConverters::Converter6.Convert( _Data, PinCallerReceive22 );
}

void PinCallerReceive22( void *_Data )
{
  Declarations::RememberAnalog6.RememberInputPin_o_Receive( _Data );
}
void PinCallerReceive23( void *_Data )
{
  Declarations::RememberAnalog1.InputPin_o_Receive( _Data );
}

void PinCallerReceive24( void *_Data )
{
  Declarations::RememberAnalog2.InputPin_o_Receive( _Data );
}

void PinCallerReceive25( void *_Data )
{
  Declarations::RememberAnalog3.InputPin_o_Receive( _Data );
}

void PinCallerReceive26( void *_Data )
{
  Declarations::RememberAnalog4.InputPin_o_Receive( _Data );
}

void PinCallerReceive27( void *_Data )
{
  Declarations::RememberAnalog6.InputPin_o_Receive( _Data );
}

void PinCallerReceive28( void *_Data )
{
  Declarations::RememberAnalog5.InputPin_o_Receive( _Data );
}

void PinCallerReceive29( void *_Data )
{
  Declarations::TArduinoFormattedTextElementAnalog1.InputPin_o_Receive( _Data );
}

void PinCallerReceive30( void *_Data )
{
  Declarations::TArduinoFormattedTextElementAnalog2.InputPin_o_Receive( _Data );
}

void PinCallerReceive31( void *_Data )
{
  Declarations::TArduinoFormattedTextElementAnalog3.InputPin_o_Receive( _Data );
}

void PinCallerReceive32( void *_Data )
{
  Declarations::TArduinoFormattedTextElementAnalog4.InputPin_o_Receive( _Data );
}

void PinCallerReceive33( void *_Data )
{
  Declarations::TArduinoFormattedTextElementAnalog5.InputPin_o_Receive( _Data );
}

void PinCallerReceive34( void *_Data )
{
  Declarations::TArduinoFormattedTextElementAnalog6.InputPin_o_Receive( _Data );
}

void PinCallerReceive35( void *_Data )
{
  Declarations::AnalogSwitch5.InputPin_o_Receive( _Data );
  Declarations::AnalogSwitch6.InputPin_o_Receive( _Data );
  Declarations::AnalogSwitch4.InputPin_o_Receive( _Data );
  Declarations::AnalogSwitch3.InputPin_o_Receive( _Data );
  Declarations::AnalogSwitch2.InputPin_o_Receive( _Data );
  Declarations::AnalogSwitch1.InputPin_o_Receive( _Data );
  Declarations::Servo1.InputPin_o_Receive( _Data );
}

} // PinCalls

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

//The setup function is called once at startup of the sketch
void setup()
{
  {
    static const uint8_t _Values[] PROGMEM = { 170 };
    Declarations::OneBit._Values = _Values;
    Declarations::OneBit._MaxIndex = 7;
  }
  {
    static const uint8_t _Values[] PROGMEM = { 204 };
    Declarations::TwoBit._Values = _Values;
    Declarations::TwoBit._MaxIndex = 7;
  }
  {
    static const uint8_t _Values[] PROGMEM = { 240 };
    Declarations::FourBit._Values = _Values;
    Declarations::FourBit._MaxIndex = 7;
  }

  Interrupts::Pin2.SubscribeChange( (OpenWire::Object *)&Declarations::RCServoMeter1, (OpenWire::TOnInterrupt)( void (OpenWire::Object::*) ( bool ) )&Mitov::RCServoMeter_Interrupt::InterruptHandler );
  Declarations::OneBit.ClockInputPin_o_IsConnected = true;
  Declarations::TwoBit.ClockInputPin_o_IsConnected = true;
  Declarations::FourBit.ClockInputPin_o_IsConnected = true;
  Declarations::FormattedText1.ClockInputPin_o_IsConnected = true;
  Declarations::RememberAnalog1.RecallInputPin_o_IsConnected = true;
  Declarations::RememberAnalog2.RecallInputPin_o_IsConnected = true;
  Declarations::RememberAnalog3.RecallInputPin_o_IsConnected = true;
  Declarations::RememberAnalog4.RecallInputPin_o_IsConnected = true;
  Declarations::RememberAnalog5.RecallInputPin_o_IsConnected = true;
  Declarations::RememberAnalog6.RecallInputPin_o_IsConnected = true;
  BoardDeclarations::SerialPort0.SendingOutputPin.SetCallback( PinCalls::PinCallerReceive1 );
  Declarations::Start1.OutputPin.SetCallback( PinCalls::PinCallerReceive2 );
  Declarations::RCServoMeter1.OutputPin.SetCallback( PinCalls::PinCallerReceive3 );
  Declarations::OneBit.OutputPin.SetCallback( PinCalls::PinCallerReceive4 );
  Declarations::TwoBit.OutputPin.SetCallback( PinCalls::PinCallerReceive5 );
  Declarations::FourBit.OutputPin.SetCallback( PinCalls::PinCallerReceive6 );
  Declarations::FormattedText1.OutputPin.SetCallback( PinCalls::PinCallerReceive7 );
  Declarations::FormattedText1.AddReadyElement( (char *)"Updating Channel - ", 0 );
  Declarations::FormattedText1.AddReadyElement( (char *)"\r\nRC ch0 - ", 2 );
  Declarations::FormattedText1.AddReadyElement( (char *)"\r\nRC ch1 - ", 3 );
  Declarations::FormattedText1.AddReadyElement( (char *)"\r\nRC ch2 - ", 4 );
  Declarations::FormattedText1.AddReadyElement( (char *)"\r\nRC ch3 - ", 5 );
  Declarations::FormattedText1.AddReadyElement( (char *)"\r\nRC ch4 - ", 6 );
  Declarations::FormattedText1.AddReadyElement( (char *)"\r\nRC ch5 - ", 1 );
  Declarations::FormattedText1.AddNullElement( "\r\n\r\n" );
  Declarations::TArduinoPlayFrequencyToneSetValueElement1.Frequency = 250;
  Declarations::TArduinoPlayFrequencyToneSetValueElement1.Duration = 50;
  Declarations::Counter1.Min.Value = 0;
  Declarations::Counter1.Max.Value = 5;
  Declarations::Counter1.OutputPin.SetCallback( PinCalls::PinCallerReceive8 );
  Declarations::PulseGenerator1.Frequency = 2;
  Declarations::PulseGenerator1.OutputPin.SetCallback( PinCalls::PinCallerReceive10 );
  Declarations::BinaryDecoder1.OutputPins[ 0 ].SetCallback( PinCalls::PinCallerReceive11 );
  Declarations::BinaryDecoder1.OutputPins[ 1 ].SetCallback( PinCalls::PinCallerReceive13 );
  Declarations::BinaryDecoder1.OutputPins[ 2 ].SetCallback( PinCalls::PinCallerReceive15 );
  Declarations::BinaryDecoder1.OutputPins[ 3 ].SetCallback( PinCalls::PinCallerReceive17 );
  Declarations::BinaryDecoder1.OutputPins[ 4 ].SetCallback( PinCalls::PinCallerReceive19 );
  Declarations::BinaryDecoder1.OutputPins[ 5 ].SetCallback( PinCalls::PinCallerReceive21 );
  Declarations::AnalogSwitch1.OutputPin.SetCallback( PinCalls::PinCallerReceive23 );
  Declarations::AnalogSwitch2.OutputPin.SetCallback( PinCalls::PinCallerReceive24 );
  Declarations::AnalogSwitch3.OutputPin.SetCallback( PinCalls::PinCallerReceive25 );
  Declarations::AnalogSwitch4.OutputPin.SetCallback( PinCalls::PinCallerReceive26 );
  Declarations::AnalogSwitch6.OutputPin.SetCallback( PinCalls::PinCallerReceive27 );
  Declarations::AnalogSwitch5.OutputPin.SetCallback( PinCalls::PinCallerReceive28 );
  Declarations::RememberAnalog1.OutputPin.SetCallback( PinCalls::PinCallerReceive29 );
  Declarations::RememberAnalog2.OutputPin.SetCallback( PinCalls::PinCallerReceive30 );
  Declarations::RememberAnalog3.OutputPin.SetCallback( PinCalls::PinCallerReceive31 );
  Declarations::RememberAnalog4.OutputPin.SetCallback( PinCalls::PinCallerReceive32 );
  Declarations::RememberAnalog5.OutputPin.SetCallback( PinCalls::PinCallerReceive33 );
  Declarations::RememberAnalog6.OutputPin.SetCallback( PinCalls::PinCallerReceive34 );
  Declarations::DeadZoneScaled1.OutputPin.SetCallback( PinCalls::PinCallerReceive35 );

  BoardDeclarations::SerialPort0.SystemInit();
  BoardDeclarations::ArduinoDigitalChannel_2.SystemInit();
  Declarations::Counter1.SystemInit();
  Declarations::PulseGenerator1.SystemInit();
  Declarations::BinaryDecoder1.SystemInit();

  BoardDeclarations::ArduinoDigitalChannel_2.SystemStart();
  Declarations::Start1.SystemStart();
  Declarations::OneBit.SystemStart();
  Declarations::TwoBit.SystemStart();
  Declarations::FourBit.SystemStart();
  Declarations::FormattedText1.SystemStart();
  Declarations::TArduinoFormattedTextElementUnsigned1.SystemStart();
  Declarations::TArduinoFormattedTextElementAnalog1.SystemStart();
  Declarations::TArduinoFormattedTextElementAnalog2.SystemStart();
  Declarations::TArduinoFormattedTextElementAnalog3.SystemStart();
  Declarations::TArduinoFormattedTextElementAnalog4.SystemStart();
  Declarations::TArduinoFormattedTextElementAnalog5.SystemStart();
  Declarations::TArduinoFormattedTextElementAnalog6.SystemStart();
  Declarations::PlayFrequency1.SystemStart();
  Declarations::Counter1.SystemStart();
  Declarations::Servo1.SystemStart();
  Declarations::PulseGenerator1.SystemStart();
  Declarations::DeadZoneScaled1.SystemStart();
}

// The loop function is called in an endless loop
void loop()
{
  unsigned long A_Current_Microseconds = micros();

  BoardDeclarations::SerialPort0.SystemLoopBegin( A_Current_Microseconds );
  BoardDeclarations::ArduinoDigitalChannel_2.SystemLoopBegin( A_Current_Microseconds );
  Declarations::RCServoMeter1.SystemLoopBegin( A_Current_Microseconds );
  Declarations::PulseGenerator1.SystemLoopBegin( A_Current_Microseconds );

  Declarations::FormattedText1.SystemLoopEnd( A_Current_Microseconds );
}

Credits

Pigeon-Kicker

Pigeon-Kicker

19 projects • 31 followers
Computer guru from the 80's, currently disabled veteran. Building this stuffs for my son to learn robotics.

Comments