Hardware components | ||||||
| × | 1 | ||||
Software apps and online services | ||||||
| ||||||
|
CUTSIE WHUN development, The "MUX" BCD switch:
The chip operates on a digital On or Off function, It uses 3 digital pins. A "Truth Table is attached below.
In the above "Truth Table" a value of 010 activates channel 2, and a value of 101 activates channel 5. The fart right binary position is the one bit, the second or middle bit is for the two bit position, and the far left is the four bit position.
- 000 = 0 (or ch1)
- 001 = 1
- 010 = 2
- 011 = 3
- 100 = 4
- 101 = 5
- 110 = 6
- 111 = 7 (or ch8)
Below is a pin layout, remember input zero is RCch1. Also remember that the A, B, and C inputs are the binary on/off switches. Be sure to use a pull down resistor on the inputs for the switches, I used a 220 Ohm on all related resistor needs LEDs included.
Here is the usage video...
//----------------------------------------------
//
// 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 );
}
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