Compare commits

...

6 Commits

21 changed files with 846 additions and 128 deletions

View File

@ -5,68 +5,36 @@
using namespace admux; using namespace admux;
Button::Button(uint8_t vbutton) { Button::Button(uint8_t vbutton, Reader* reader) {
this->vbutton = vbutton; this->vbutton = vbutton;
this->reader = reader;
} }
void Button::ReleaseButtons(Joystick* js) { void Button::ReleaseButtons(Joystick* js) {
js->ReleaseButton(vbutton); js->ReleaseButton(vbutton);
} }
// TODO: make analog_only work... how to handle that with debouncer? PassthruButton::PassthruButton(uint8_t vbutton, Reader* reader) : Button(vbutton, reader) {
SwitchButton::SwitchButton(uint8_t pin, uint8_t vbutton, bool pullup, Mux* mux, bool analog_only) : Button(vbutton) {
this->mux = mux;
uint8_t mode = INPUT;
if (pullup) {
this->inverted = true;
mode = INPUT_PULLUP;
}
if (mux == NULL) this->bouncer.attach(pin, mode);
else {
this->bouncer.attach(mux->signalPin().pin, mode);
this->channel_id = pin;
}
}
bool SwitchButton::BouncerUpdate() {
if (mux != NULL) {
mux->channel(channel_id);
delayMicroseconds(500);
}
return bouncer.update();
}
bool SwitchButton::On() {
bool state = bouncer.rose();
if (inverted) state = bouncer.fell();
return state;
}
PassthruButton::PassthruButton(uint8_t pin, uint8_t vbutton, bool pullup, Mux* mux, bool analog_only) : SwitchButton(pin, vbutton, pullup, mux, analog_only) {
this->type = BUTTON_PASSTHRU; this->type = BUTTON_PASSTHRU;
} }
bool PassthruButton::Update(Joystick* js) { bool PassthruButton::Update(Joystick* js) {
if (!BouncerUpdate()) return false; if (!reader->Update()) return false;
if (On()) js->PressButton(vbutton); if (reader->On()) js->PressButton(vbutton);
else js->ReleaseButton(vbutton); else js->ReleaseButton(vbutton);
return true; return true;
} }
LatchedButton::LatchedButton(uint8_t pin, uint8_t vbutton, bool pullup, Mux* mux, bool analog_only) : SwitchButton(pin, vbutton, pullup, mux, analog_only) { LatchedButton::LatchedButton(uint8_t vbutton, Reader* reader) : Button(vbutton, reader) {
this->type = BUTTON_LATCHED_MOMENTARY; this->type = BUTTON_LATCHED_MOMENTARY;
this->pressed = false; this->pressed = false;
} }
bool LatchedButton::Update(Joystick* js) { bool LatchedButton::Update(Joystick* js) {
if (!BouncerUpdate()) return false; if (!reader->Update()) return false;
if (On()) { if (reader->On()) {
if (!pressed) { if (!pressed) {
js->PressButton(vbutton); js->PressButton(vbutton);
pressed = true; pressed = true;
@ -80,7 +48,7 @@ bool LatchedButton::Update(Joystick* js) {
} }
PulsedButton::PulsedButton(uint8_t pin, uint8_t vbutton, bool double_action, bool split, bool pullup, Mux* mux, bool analog_only) : SwitchButton(pin, vbutton, pullup, mux, analog_only) { PulsedButton::PulsedButton(uint8_t vbutton, Reader* reader, bool double_action, bool split) : Button(vbutton, reader) {
this->release_time1 = 0; this->release_time1 = 0;
this->release_time2 = 0; this->release_time2 = 0;
if (double_action) { if (double_action) {
@ -106,18 +74,18 @@ bool PulsedButton::Update(Joystick* js) {
release_time2 = 0; release_time2 = 0;
} }
if (!BouncerUpdate()) return false; if (!reader->Update()) return false;
switch(type) { switch(type) {
case BUTTON_PULSED: case BUTTON_PULSED:
if (On()) js->PressButton(vbutton); if (reader->On()) js->PressButton(vbutton);
break; break;
case BUTTON_PULSED_DOUBLE_ACTION: case BUTTON_PULSED_DOUBLE_ACTION:
js->PressButton(vbutton); js->PressButton(vbutton);
release_time1 = millis() + 250; release_time1 = millis() + 250;
break; break;
case BUTTON_PULSED_DOUBLE_ACTION_SPLIT: case BUTTON_PULSED_DOUBLE_ACTION_SPLIT:
if (On()) { if (reader->On()) {
js->PressButton(vbutton); js->PressButton(vbutton);
release_time1 = millis() + 250; release_time1 = millis() + 250;
} }
@ -131,14 +99,8 @@ bool PulsedButton::Update(Joystick* js) {
return true; return true;
} }
void PulsedButton::ReleaseButtons(Joystick* js) {
Button::ReleaseButtons(js);
if (type == BUTTON_PULSED_DOUBLE_ACTION_SPLIT) js->ReleaseButton(vbutton2);
}
EncoderButton::EncoderButton(uint8_t pin1, uint8_t pin2, uint8_t vbutton) : Button(vbutton, NULL) {
EncoderButton::EncoderButton(uint8_t pin1, uint8_t pin2, uint8_t vbutton) : Button(vbutton) {
this->type = ENCODER_PULSED_SPLIT; this->type = ENCODER_PULSED_SPLIT;
this->vbutton2 = vbutton + 1; this->vbutton2 = vbutton + 1;
this->encoder = new Encoder(pin1, pin2); this->encoder = new Encoder(pin1, pin2);
@ -173,8 +135,3 @@ bool EncoderButton::Update(Joystick* js) {
last_value = new_value; last_value = new_value;
return changed; return changed;
} }
void EncoderButton::ReleaseButtons(Joystick* js) {
Button::ReleaseButtons(js);
js->ReleaseButton(vbutton2);
}

View File

@ -2,8 +2,7 @@
#define _BUTTON_H_ #define _BUTTON_H_
#include <Encoder.h> #include <Encoder.h>
#include <Mux.h> #include "Reader.h"
#include <Bounce2.h>
using namespace admux; using namespace admux;
@ -24,53 +23,35 @@ enum ButtonType {
// * an update method. // * an update method.
class Button { class Button {
public: public:
Button(uint8_t vbutton); Button(uint8_t vbutton, Reader* reader);
virtual bool Update(Joystick* js) = 0; virtual bool Update(Joystick* js) = 0;
virtual void ReleaseButtons(Joystick* js); virtual void ReleaseButtons(Joystick* js);
ButtonType type; ButtonType type;
protected: protected:
uint8_t vbutton; uint8_t vbutton;
Reader *reader;
}; };
// An abstract class for a momentary/pushbutton or toggle switch. Special properties: class PassthruButton : public Button {
// * needs to be explicitly debounced
// * may use the microcontroller's built-in pullup resistor mode to eliminate noise
// * may be attached to a multiplexer. In this case, the `pin` value will be treated as a multiplexer channel,
// and the multiplexer logic will be automatically invoked by Update()
class SwitchButton : public Button {
public: public:
SwitchButton(uint8_t pin, uint8_t vbutton, bool pullup, Mux* mux, bool analog_only); PassthruButton(uint8_t vbutton, Reader* reader);
bool BouncerUpdate(); // returns true if the pin's status has changed
bool On();
protected:
Bounce bouncer;
bool inverted;
Mux *mux;
uint8_t channel_id;
};
class PassthruButton : public SwitchButton {
public:
PassthruButton(uint8_t pin, uint8_t vbutton, bool pullup = true, Mux* mux = NULL, bool analog_only = false);
bool Update(Joystick* js); bool Update(Joystick* js);
}; };
class LatchedButton : public SwitchButton { class LatchedButton : public Button {
public: public:
LatchedButton(uint8_t pin, uint8_t vbutton, bool pullup = true, Mux* mux = NULL, bool analog_only = false); LatchedButton(uint8_t vbutton, Reader* reader);
bool Update(Joystick* js); bool Update(Joystick* js);
protected: protected:
bool pressed; bool pressed;
}; };
class PulsedButton : public SwitchButton { class PulsedButton : public Button {
public: public:
PulsedButton(uint8_t pin, uint8_t vbutton, bool double_action = false, bool split = false, bool pullup = true, Mux* mux = NULL, bool analog_only = false); PulsedButton(uint8_t vbutton, Reader* reader, bool double_action = false, bool split = false);
bool Update(Joystick* js); bool Update(Joystick* js);
void ReleaseButtons(Joystick* js);
protected: protected:
bool double_action; bool double_action;
@ -84,7 +65,6 @@ class EncoderButton : public Button {
public: public:
EncoderButton(uint8_t pin1, uint8_t pin2, uint8_t vbutton); EncoderButton(uint8_t pin1, uint8_t pin2, uint8_t vbutton);
bool Update(Joystick* js); bool Update(Joystick* js);
void ReleaseButtons(Joystick* js);
protected: protected:
Encoder* encoder; Encoder* encoder;

View File

@ -1,5 +1,6 @@
#include "Joystick.h" #include "Joystick.h"
#include "Button.h" #include "Button.h"
#include "Reader.h"
#include <Mux.h> #include <Mux.h>
#include <Arduino.h> #include <Arduino.h>
#include <stdio.h> #include <stdio.h>
@ -37,38 +38,19 @@ Joystick::Joystick(bool debug) {
void Joystick::Init() { void Joystick::Init() {
Serial.begin(115200); Serial.begin(115200);
delay(100); delay(100);
if (_debug) Serial.println("Joystick serial communication initialized.");
} }
void Joystick::AddButton(uint8_t pin, ButtonType type, bool pullup, Mux* mux, bool analog_only) { void Joystick::AddButton(uint8_t pin, ButtonType type, bool pullup) {
Button *button; _addButton(type, new DirectReader(pin, pullup));
switch (type) { }
case BUTTON_PASSTHRU:
button = new PassthruButton(pin, _virtual_buttons, pullup, mux, analog_only);
_virtual_buttons++;
break;
case BUTTON_PULSED:
button = new PulsedButton(pin, _virtual_buttons, false, false, pullup, mux, analog_only);
_virtual_buttons++;
break;
case BUTTON_PULSED_DOUBLE_ACTION:
button = new PulsedButton(pin, _virtual_buttons, true, false, pullup, mux, analog_only);
_virtual_buttons++;
break;
case BUTTON_PULSED_DOUBLE_ACTION_SPLIT:
button = new PulsedButton(pin, _virtual_buttons, true, true, pullup, mux, analog_only);
_virtual_buttons += 2;
break;
default:
return;
}
_buttons[_num_buttons] = button; void Joystick::AddMuxButton(uint8_t channel, Mux* mux, ButtonType type, bool pullup) {
_num_buttons++; _addButton(type, new MuxReader(channel, mux, pullup));
if (_debug) { }
char buffer[100];
sprintf(buffer, "Added button %d of type %d", _num_buttons - 1, button->type); void Joystick::AddMatrixButton(uint8_t row, uint8_t col, Matrix* matrix, ButtonType type, bool pullup) {
Serial.println(buffer); _addButton(type, new MatrixReader(row, col, matrix, pullup));
}
} }
void Joystick::AddEncoder(uint8_t pin1, uint8_t pin2, ButtonType type) { void Joystick::AddEncoder(uint8_t pin1, uint8_t pin2, ButtonType type) {
@ -87,6 +69,8 @@ void Joystick::AddEncoder(uint8_t pin1, uint8_t pin2, ButtonType type) {
Serial.println(type); Serial.println(type);
} }
} }
if (_debug) Serial.println("Added an encoder.");
} }
void Joystick::AddAxis(uint8_t pin) { void Joystick::AddAxis(uint8_t pin) {
@ -164,3 +148,39 @@ void Joystick::Write() {
void Joystick::_UpdateAxis(uint8_t index) { void Joystick::_UpdateAxis(uint8_t index) {
if (_debug) Serial.println("STUB: Joystick::_UpdateAxis"); if (_debug) Serial.println("STUB: Joystick::_UpdateAxis");
} }
void Joystick::_addButton(ButtonType type, Reader* reader) {
Button* button;
switch (type) {
case BUTTON_PASSTHRU:
button = new PassthruButton(_virtual_buttons, reader);
_virtual_buttons++;
break;
case BUTTON_PULSED:
button = new PulsedButton(_virtual_buttons, reader, false, false);
_virtual_buttons++;
break;
case BUTTON_PULSED_DOUBLE_ACTION:
button = new PulsedButton(_virtual_buttons, reader, true, false);
_virtual_buttons++;
break;
case BUTTON_PULSED_DOUBLE_ACTION_SPLIT:
button = new PulsedButton(_virtual_buttons, reader, true, true);
_virtual_buttons += 2;
break;
case BUTTON_LATCHED_MOMENTARY:
button = new LatchedButton(_virtual_buttons, reader);
_virtual_buttons++;
break;
default:
return;
}
_buttons[_num_buttons] = button;
_num_buttons++;
if (_debug) {
char buffer[100];
sprintf(buffer, "Added button %d of type %d", _num_buttons - 1, button->type);
Serial.println(buffer);
}
}

View File

@ -2,8 +2,8 @@
#define _JOYSTICK_H_ #define _JOYSTICK_H_
#include "Button.h" #include "Button.h"
#include "Matrix.h"
#include <Arduino.h> #include <Arduino.h>
#include <Bounce2.h>
#include <Mux.h> #include <Mux.h>
using namespace admux; using namespace admux;
@ -33,13 +33,20 @@ class Joystick {
void Init(); void Init();
void Update(); void Update();
// Add a button to the joystick. // Use these functions to add a button to the joystick.
// Button types are documented in the ButtonType enum. // Button types are documented in the ButtonType enum. See Button.h for details.
// If `pullup` is true, your button should connect the pin to ground. (also be sure that your board supports INPUT_PULLUP on that pin) // If 'pullup' is true, your button should connect the pin to ground. (also be sure that your board supports INPUT_PULLUP on that pin)
// If `pullup` is false, your button should connect the pin to VCC. // If 'pullup' is false, your button should connect the pin to VCC.
// Setting `analogOnly` to true indicates your button *must* be read with analog code, such as the A6 and A7 pins
// on the Arduino Nano. // Add a button connected directly to a pin on the microcontroller.
void AddButton(uint8_t pin, ButtonType type, bool pullup=true, Mux* mux=NULL, bool analog_only=false); void AddButton(uint8_t pin, ButtonType type, bool pullup=true);
// Add a button connected to a channel on a Multiplexer.
// FIXME: This doesn't currently work!
void AddMuxButton(uint8_t channel, Mux* mux, ButtonType type, bool pullup=true);
// Add a button connected to a scan matrix.
void AddMatrixButton(uint8_t row, uint8_t col, Matrix* matrix, ButtonType type, bool pullup=true);
// Add a rotary encoder. ENCODER button types allow you to treat an encoder as a momentary button or an axis (TODO) // Add a rotary encoder. ENCODER button types allow you to treat an encoder as a momentary button or an axis (TODO)
void AddEncoder(uint8_t pin1, uint8_t pin2, ButtonType type); void AddEncoder(uint8_t pin1, uint8_t pin2, ButtonType type);
@ -59,6 +66,8 @@ class Joystick {
void _UpdateAxis(uint8_t index); void _UpdateAxis(uint8_t index);
void _addButton(ButtonType type, Reader* reader);
Button* _buttons[JOYSTICK_NUM_BUTTONS]; Button* _buttons[JOYSTICK_NUM_BUTTONS];
uint8_t _num_buttons; uint8_t _num_buttons;
uint8_t _virtual_buttons; // a single user-defined button can have multiple virtual buttons. uint8_t _virtual_buttons; // a single user-defined button can have multiple virtual buttons.

33
Matrix.cpp Normal file
View File

@ -0,0 +1,33 @@
#include "Matrix.h"
Matrix::Matrix(uint8_t* columns, uint8_t num_columns, bool inverted) {
this->active_pin = 255; // sentinel value, highest possible 8-bit number
this->inverted = inverted;
for (uint8_t i = 0; i < num_columns; i++) {
pinMode(columns[i], OUTPUT);
_disable(columns[i]);
}
}
void Matrix::Activate(uint8_t pin) {
if (pin == active_pin) return;
if (active_pin != 255) {
_disable(active_pin);
}
_enable(pin);
active_pin = pin;
delayMicroseconds(10); // allow ample time for signal to propagate
}
void Matrix::_enable(uint8_t pin) {
if (inverted) digitalWrite(pin, LOW);
else digitalWrite(pin, HIGH);
}
void Matrix::_disable(uint8_t pin) {
if (inverted) digitalWrite(pin, HIGH);
else digitalWrite(pin, LOW);
}

22
Matrix.h Normal file
View File

@ -0,0 +1,22 @@
// A state-keeping class used with MatrixReader. Keeps track of which column is active,
// switches between them.
#ifndef _MATRIX_H_
#define _MATRIX_H_
#include <Arduino.h>
class Matrix {
public:
Matrix(uint8_t *columns, uint8_t num_columns, bool inverted=true);
void Activate(uint8_t column);
private:
void _enable(uint8_t pin);
void _disable(uint8_t pin);
uint8_t active_pin;
bool inverted;
};
#endif

54
Reader.cpp Normal file
View File

@ -0,0 +1,54 @@
#include "Reader.h"
Reader::Reader(bool inverted) {
this->inverted = inverted;
}
bool Reader::On() {
bool state = bouncer.rose();
if (inverted) state = bouncer.fell();
return state;
}
uint8_t Reader::getMode(bool pullup) {
if (pullup) return INPUT_PULLUP;
return INPUT;
}
DirectReader::DirectReader(uint8_t pin, bool inverted) : Reader(inverted) {
uint8_t mode = getMode(inverted);
this->bouncer.attach(pin, mode);
}
bool DirectReader::Update() {
return bouncer.update();
}
MuxReader::MuxReader(uint8_t channel, Mux* mux, bool inverted) : Reader(inverted) {
uint8_t mode = getMode(inverted);
this->bouncer.attach(mux->signalPin().pin, mode);
this->channel = channel;
}
bool MuxReader::Update() {
mux->channel(channel);
return bouncer.update();
}
MatrixReader::MatrixReader(uint8_t row, uint8_t col, Matrix* matrix, bool inverted) : Reader(inverted) {
uint8_t mode = getMode(inverted);
this->bouncer.attach(row, mode);
this->col = col;
this->matrix = matrix;
}
bool MatrixReader::Update() {
matrix->Activate(col);
bool changed = bouncer.update();
return changed;
}

65
Reader.h Normal file
View File

@ -0,0 +1,65 @@
// "Readers" represent different methods for reading the state of a pin.
// They also include debouncing logic using the Bounce2 library, when appropriate.
#ifndef _READER_H_
#define _READER_H_
#include "Matrix.h"
#include <Arduino.h>
#include <Bounce2.h>
#include <Mux.h>
using namespace admux;
// The abstract base class - a very simple interface
class Reader {
public:
Reader(bool inverted);
virtual bool Update() = 0; // should return true if the state of the pin has changed
bool On();
protected:
uint8_t getMode(bool pullup);
Bounce bouncer;
bool inverted;
};
// A standard reader; the button is connected directly to a switch
class DirectReader : public Reader {
public:
DirectReader(uint8_t pin, bool inverted = true);
bool Update();
bool On();
};
// The button is connected to a Multiplexer channel
class MuxReader : public Reader {
public:
MuxReader(uint8_t channel, Mux* mux, bool inverted = true);
bool Update();
bool On();
protected:
uint8_t channel;
Mux * mux;
};
// The button is connected via a scan matrix
// "row" should always be the input, with "col" the selecter.
class MatrixReader : public Reader {
public:
MatrixReader(uint8_t row, uint8_t col, Matrix* matrix, bool inverted = true);
bool Update();
bool On();
protected:
uint8_t col;
Matrix* matrix;
};
#endif

View File

@ -12,18 +12,22 @@ This is a library that builds and sends USB HID Joystick reports, making it easy
arduino-cli lib install "Analog-Digital Multiplexers" arduino-cli lib install "Analog-Digital Multiplexers"
2. Put the arduino-joystick directory into your Arduino libraries directory. 2. Put the arduino-joystick directory into your Arduino libraries directory.
## Compiling and running the example code via SimulIDE
1. Run `make` from the `example` directory.
2. Load `example.simu` in SimulIDE.
3. Right-click on the Arduino component, and click "load firmware". Select the `.hex` file created in the `example/` directory.
4. Click the red `Power Circuit` icon at the top of the SimulIDE window.
## Usage ## Usage
1. In your arduino sketch, add the includes: 1. In your arduino sketch, add the include:
#include <Joystick.h> #include <Joystick.h>
2. Create a Joystick object: 2. Create a Joystick object:
Joystick joystick(true); Joystick joystick(true);
3. Add buttons and axes in setup() with Joystick::AddButton(), and call Joystick::Update() in loop(). 3. Add buttons and axes in `setup()` with the `Add*` functions from `Joystick.h`. Call `joystick.Update()` in your `loop()` function. Also call `joystick.Init()` during `setup()`.
4. Upload the sketch, connect to the serial monitor (at 115200 baud) and test the buttons. 4. Upload the sketch, connect to the serial monitor (at 115200 baud) and test the buttons.
5. Set the joystick's `debug` parameter to `false` and re-upload the sketch. The arduino will NOT work in joystick mode with debug set to `true`! 5. Set the joystick's `debug` parameter to `false` and re-upload the sketch. The arduino will NOT work in joystick mode with debug set to `true`!
6. Flash the `arduino-big-joystick` firmware onto the USB Controller. 6. Flash the `arduino-big-joystick` firmware onto the USB Controller.
### Advanced usage: multiplexers ### Advanced usage: multiplexers, matrices
If you need more buttons than your board has pins, multiplexers (such as [this one](https://www.sparkfun.com/products/13906) and [this one](https://www.sparkfun.com/products/9056)) are a popular solution. This library supports multiplexers! To use them, you need to do some extra work. If you need more buttons than your board has pins, this library supports keyboard-style scan matrices as well as multiplexers. **(FIXME: multiplexers aren't working yet)** See the example sketch in the `example/` directory for usage details. Note that, for matrices, the *rows* are the inputs that will be read, and the *columns* are the outputs that will sink the current. Current should flow (via diodes) from the rows to the columns. See the `example.simu` SimulIDE file for an example circuit.
Call the `AddMux()` method and pass it the pins the multiplexer is connected to. You'll need to `#include <Mux.h>` to access `admux::Pinset`. `AddMux()` will return a `mux_id` for subsequently passing to `AddButton()`. The `pin` parameter for all multiplexed buttons should be the same as the multiplexer's `signal_pin`.

107
example/example.ino Normal file
View File

@ -0,0 +1,107 @@
// An example sketch using the joystick library, demonstrating recommended usage
// of all features.
// This code loads the sketch in debug mode. Connect to the Arduino's serial port at 115200 baud to read the output.
#include <Joystick.h>
#include <Matrix.h>
#include <Mux.h>
using namespace admux;
// Always use defines to match your pins to their logical wiring
// pins 2 and 3 are attached to a rotary encoder
#define ENCODER 2,3
// these buttons are attached directly to Arduino input pins
#define BTN1 4
#define BTN2 5
#define BTN3 6
#define BTN4 7
#define BTN5 A0
// pins 8-13 are attached to a 3x3 scanning input matrix. Pins 8-10 are the row pins, 11-13 are the column pins.
#define MATRIX1 8,11
#define MATRIX2 9,11
#define MATRIX3 10,11
#define MATRIX4 8,12
#define MATRIX5 9,12
#define MATRIX6 10,12
#define MATRIX7 8,13
#define MATRIX8 9,13
#define MATRIX9 10,13
// A multiplexer is attached to pins A1-A5
#define MUX_SIG A1 // the multiplexer's signal pin is on Analog 1
#define MUX_ADDR A2,A3,A4,A5 // the multiplexer's address pins are A2-A5, in that order
// These are 3 buttons attached to the multiplexer channels
#define MUX_BTN1 0
#define MUX_BTN2 1
#define MUX_BTN3 2
bool debug = true;
Joystick js(debug);
void setup() {
js.Init();
Serial.println("Adding encoder.");
js.AddEncoder(ENCODER, ENCODER_PULSED_SPLIT);
// Different types of button programming are available. BUTTON_PASSTHRU simply passes on the button's
// real state, and will be the most common, but you can also change how the button works in software like so...
Serial.println("Adding directly connected buttons.");
// With BUTTON_PULSED, no matter how long the button stays held down, it will only send a button press for 250ms
// then deactivate until pressed again.
js.AddButton(BTN1, BUTTON_PULSED);
// BUTTON_PULSED_DOUBLE_ACTION does the same thing, but sends a *second* 250ms press when the button is deactivated
// This is great for an on-off toggle switch that should send an "event" in both directions.
js.AddButton(BTN2, BUTTON_PULSED_DOUBLE_ACTION);
// BUTTON_PULSED_DOUBLE_ACTION_SPLIT is just like the above, but it sends *different* button presses for the "on"
// and "off" states.
js.AddButton(BTN3, BUTTON_PULSED_DOUBLE_ACTION_SPLIT);
// BUTTON_LATCHED_MOMENTARY lets you turn a momentary pushbutton into a toggle switch.
// One press will "press and hold" the button. The next press releases the button.
js.AddButton(BTN4, BUTTON_LATCHED_MOMENTARY);
// This is a standard PASSTHRU button. It simply mirrors the actual state of the physical button.
js.AddButton(BTN5, BUTTON_PASSTHRU);
// One way to get more room for inputs is to use a scan matrix.
// See http://blog.komar.be/how-to-make-a-keyboard-the-matrix/ for a very detailed discussion of how these work.
// This is a 3x3 example, so we can get 9 buttons out of 6 inputs.
// For faster read results, always add buttons so that buttons with the same *column* are grouped together.
Serial.println("Adding matrix.");
uint8_t cols[] = {11, 12, 13};
Matrix* matrix = new Matrix(cols, 3);
js.AddMatrixButton(MATRIX1, matrix, BUTTON_PASSTHRU);
js.AddMatrixButton(MATRIX2, matrix, BUTTON_PASSTHRU);
js.AddMatrixButton(MATRIX3, matrix, BUTTON_PASSTHRU);
js.AddMatrixButton(MATRIX4, matrix, BUTTON_PASSTHRU);
js.AddMatrixButton(MATRIX5, matrix, BUTTON_PASSTHRU);
js.AddMatrixButton(MATRIX6, matrix, BUTTON_PASSTHRU);
js.AddMatrixButton(MATRIX7, matrix, BUTTON_PASSTHRU);
js.AddMatrixButton(MATRIX8, matrix, BUTTON_PASSTHRU);
js.AddMatrixButton(MATRIX9, matrix, BUTTON_PASSTHRU);
// another way to get more room for our inputs, this code adds a 16-channel multiplexer.
// It only attaches 3 buttons, but could attach up to channel 15.
Serial.println("Adding multiplexer.");
Mux* mux = new Mux(Pin(MUX_SIG, INPUT_PULLUP, PinType::Digital), Pinset(MUX_ADDR));
js.AddMuxButton(MUX_BTN1, mux, BUTTON_PASSTHRU);
js.AddMuxButton(MUX_BTN2, mux, BUTTON_PASSTHRU);
js.AddMuxButton(MUX_BTN3, mux, BUTTON_PASSTHRU);
Serial.println("Example joystick fully configured.");
}
void loop() {
// check all the button states and send any changes
js.Update();
}

459
example/example.simu Executable file
View File

@ -0,0 +1,459 @@
<circuit reactStep="50" Simu_Step_nS="1000" animate="1" type="simulide_0.4" Speed_per="100" noLinAcc="5" Speed_sps="1000000">
Unique Id: Ground-812:
Circuit Id: Ground-812
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-16" valLabely="0" circRot="-5.4861292803319049e+303" labelrot="0" id="Ground-812" labelx="-16" boardRot="-1000000" objectName="Ground-812" rotation="0" y="-76" boardPos="-1e+06,-1e+06" labely="8" itemtype="Ground" vflip="1" mainComp="false"/>
Unique Id: Push-809:
Circuit Id: Push-809
<item valLabRot="0" hflip="1" Key="" circPos="0,0" Show_id="false" valLabelx="0" x="-56" Poles="1" valLabely="0" circRot="0" labelrot="0" id="Push-809" labelx="-16" boardRot="-1000000" objectName="Push-809" rotation="0" Norm_Close="false" y="-116" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Push" vflip="1" mainComp="false"/>
Unique Id: Node-803:
Circuit Id: Node-803
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-380" valLabely="0" circRot="nan" labelrot="0" id="Node-803" labelx="-16" boardRot="-1000000" objectName="Node-803" rotation="0" y="24" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Node" vflip="1" mainComp="false"/>
Unique Id: Node-593:
Circuit Id: Node-593
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-432" valLabely="0" circRot="nan" labelrot="0" id="Node-593" labelx="-16" boardRot="-1000000" objectName="Node-593" rotation="0" y="16" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Node" vflip="1" mainComp="false"/>
Unique Id: Node-590:
Circuit Id: Node-590
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-488" valLabely="0" circRot="1.0236025586772652e-306" labelrot="0" id="Node-590" labelx="-16" boardRot="-1000000" objectName="Node-590" rotation="0" y="16" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Node" vflip="1" mainComp="false"/>
Unique Id: Node-576:
Circuit Id: Node-576
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-380" valLabely="0" circRot="nan" labelrot="0" id="Node-576" labelx="-16" boardRot="-1000000" objectName="Node-576" rotation="0" y="-88" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Node" vflip="1" mainComp="false"/>
Unique Id: Node-570:
Circuit Id: Node-570
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-432" valLabely="0" circRot="3.6758708583790915e+228" labelrot="0" id="Node-570" labelx="-16" boardRot="-1000000" objectName="Node-570" rotation="0" y="-88" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Node" vflip="1" mainComp="false"/>
Unique Id: Node-564:
Circuit Id: Node-564
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-488" valLabely="0" circRot="0" labelrot="0" id="Node-564" labelx="-16" boardRot="-1000000" objectName="Node-564" rotation="0" y="-84" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Node" vflip="1" mainComp="false"/>
Unique Id: Node-192:
Circuit Id: Node-192
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-472" valLabely="0" circRot="nan" labelrot="0" id="Node-192" labelx="-16" boardRot="-1000000" objectName="Node-192" rotation="0" y="-348" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Node" vflip="1" mainComp="false"/>
Unique Id: Node-189:
Circuit Id: Node-189
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-472" valLabely="0" circRot="-2.9681990884966918e-197" labelrot="0" id="Node-189" labelx="-16" boardRot="-1000000" objectName="Node-189" rotation="0" y="-368" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Node" vflip="1" mainComp="false"/>
Unique Id: Node-186:
Circuit Id: Node-186
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-472" valLabely="0" circRot="1.0236025586772652e-306" labelrot="0" id="Node-186" labelx="-16" boardRot="-1000000" objectName="Node-186" rotation="0" y="-328" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Node" vflip="1" mainComp="false"/>
Unique Id: Ground-180:
Circuit Id: Ground-180
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-508" valLabely="0" circRot="nan" labelrot="0" id="Ground-180" labelx="-16" boardRot="-1000000" objectName="Ground-180" rotation="0" y="-288" boardPos="-1e+06,-1e+06" labely="8" itemtype="Ground" vflip="1" mainComp="false"/>
Unique Id: Push-174:
Circuit Id: Push-174
<item valLabRot="0" hflip="1" Key="" circPos="0,0" Show_id="false" valLabelx="0" x="-420" Poles="1" valLabely="0" circRot="-5.4861292803319049e+303" labelrot="0" id="Push-174" labelx="-16" boardRot="-1000000" objectName="Push-174" rotation="0" Norm_Close="false" y="-292" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Push" vflip="1" mainComp="false"/>
Unique Id: Push-173:
Circuit Id: Push-173
<item valLabRot="0" hflip="1" Key="" circPos="0,0" Show_id="false" valLabelx="0" x="-420" Poles="1" valLabely="0" circRot="-5.4861292803319049e+303" labelrot="0" id="Push-173" labelx="-16" boardRot="-1000000" objectName="Push-173" rotation="0" Norm_Close="false" y="-404" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Push" vflip="1" mainComp="false"/>
Unique Id: Push-172:
Circuit Id: Push-172
<item valLabRot="0" hflip="1" Key="" circPos="0,0" Show_id="false" valLabelx="0" x="-420" Poles="1" valLabely="0" circRot="-2.9681990884966918e-197" labelrot="0" id="Push-172" labelx="-16" boardRot="-1000000" objectName="Push-172" rotation="0" Norm_Close="false" y="-368" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Push" vflip="1" mainComp="false"/>
Unique Id: Push-171:
Circuit Id: Push-171
<item valLabRot="0" hflip="1" Key="" circPos="0,0" Show_id="false" valLabelx="0" x="-420" Poles="1" valLabely="0" circRot="-5.4861292803319049e+303" labelrot="0" id="Push-171" labelx="-16" boardRot="-1000000" objectName="Push-171" rotation="0" Norm_Close="false" y="-328" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Push" vflip="1" mainComp="false"/>
Unique Id: Node-168:
Circuit Id: Node-168
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-424" valLabely="0" circRot="nan" labelrot="0" id="Node-168" labelx="-16" boardRot="-1000000" objectName="Node-168" rotation="0" y="-164" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Node" vflip="1" mainComp="false"/>
Unique Id: Node-165:
Circuit Id: Node-165
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-480" valLabely="0" circRot="-5.4861292803319049e+303" labelrot="0" id="Node-165" labelx="-16" boardRot="-1000000" objectName="Node-165" rotation="0" y="-164" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Node" vflip="1" mainComp="false"/>
Unique Id: Diode-124:
Circuit Id: Diode-108
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" Threshold="0.69999999999999996" x="-444" valLabely="0" circRot="-2.9681990884966918e-197" Zener_Volt="0" labelrot="0" id="Diode-108" labelx="-16" boardRot="-1000000" objectName="Diode-124" rotation="90" y="-212" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Diode" vflip="1" mainComp="false"/>
Unique Id: Diode-121:
Circuit Id: Diode-108
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" Threshold="0.69999999999999996" x="-388" valLabely="0" circRot="-2.9681990884966918e-197" Zener_Volt="0" labelrot="0" id="Diode-108" labelx="-16" boardRot="-1000000" objectName="Diode-121" rotation="90" y="-212" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Diode" vflip="1" mainComp="false"/>
Unique Id: Diode-120:
Circuit Id: Diode-108
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" Threshold="0.69999999999999996" x="-500" valLabely="0" circRot="-2.9681990884966918e-197" Zener_Volt="0" labelrot="0" id="Diode-108" labelx="-16" boardRot="-1000000" objectName="Diode-120" rotation="90" y="-104" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Diode" vflip="1" mainComp="false"/>
Unique Id: Diode-117:
Circuit Id: Diode-108
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" Threshold="0.69999999999999996" x="-448" valLabely="0" circRot="-2.9681990884966918e-197" Zener_Volt="0" labelrot="0" id="Diode-108" labelx="-16" boardRot="-1000000" objectName="Diode-117" rotation="90" y="-104" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Diode" vflip="1" mainComp="false"/>
Unique Id: Diode-116:
Circuit Id: Diode-108
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" Threshold="0.69999999999999996" x="-388" valLabely="0" circRot="-2.9681990884966918e-197" Zener_Volt="0" labelrot="0" id="Diode-108" labelx="-16" boardRot="-1000000" objectName="Diode-116" rotation="90" y="-104" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Diode" vflip="1" mainComp="false"/>
Unique Id: Diode-113:
Circuit Id: Diode-108
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" Threshold="0.69999999999999996" x="-500" valLabely="0" circRot="-2.9681990884966918e-197" Zener_Volt="0" labelrot="0" id="Diode-108" labelx="-16" boardRot="-1000000" objectName="Diode-113" rotation="90" y="-12" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Diode" vflip="1" mainComp="false"/>
Unique Id: Diode-112:
Circuit Id: Diode-108
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" Threshold="0.69999999999999996" x="-448" valLabely="0" circRot="-2.9681990884966918e-197" Zener_Volt="0" labelrot="0" id="Diode-108" labelx="-16" boardRot="-1000000" objectName="Diode-112" rotation="90" y="-8" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Diode" vflip="1" mainComp="false"/>
Unique Id: Diode-109:
Circuit Id: Diode-108
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" Threshold="0.69999999999999996" x="-392" valLabely="0" circRot="-2.9681990884966918e-197" Zener_Volt="0" labelrot="0" id="Diode-108" labelx="-16" boardRot="-1000000" objectName="Diode-109" rotation="90" y="-8" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Diode" vflip="1" mainComp="false"/>
Unique Id: Diode-108:
Circuit Id: Diode-108
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" Threshold="0.69999999999999996" x="-500" valLabely="0" circRot="-2.9681990884966918e-197" Zener_Volt="0" labelrot="0" id="Diode-108" labelx="-16" boardRot="-1000000" objectName="Diode-108" rotation="90" y="-208" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Diode" vflip="1" mainComp="false"/>
Unique Id: Node-105:
Circuit Id: Node-105
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-424" valLabely="0" circRot="0" labelrot="0" id="Node-105" labelx="-16" boardRot="-1000000" objectName="Node-105" rotation="0" y="-60" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Node" vflip="1" mainComp="false"/>
Unique Id: Node-102:
Circuit Id: Node-102
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-480" valLabely="0" circRot="0" labelrot="0" id="Node-102" labelx="-16" boardRot="-1000000" objectName="Node-102" rotation="0" y="-60" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Node" vflip="1" mainComp="false"/>
Unique Id: Node-94:
Circuit Id: Node-94
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-424" valLabely="0" circRot="nan" labelrot="0" id="Node-94" labelx="-16" boardRot="-1000000" objectName="Node-94" rotation="0" y="-268" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Node" vflip="1" mainComp="false"/>
Unique Id: Node-88:
Circuit Id: Node-88
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-480" valLabely="0" circRot="0" labelrot="0" id="Node-88" labelx="-16" boardRot="-1000000" objectName="Node-88" rotation="0" y="-268" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Node" vflip="1" mainComp="false"/>
Unique Id: Push-80:
Circuit Id: Push-63
<item valLabRot="0" hflip="1" Key="" circPos="0,0" Show_id="false" valLabelx="0" x="-516" Poles="1" valLabely="0" circRot="0" labelrot="0" id="Push-63" labelx="-16" boardRot="-1000000" objectName="Push-80" rotation="0" Norm_Close="false" y="-44" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Push" vflip="1" mainComp="false"/>
Unique Id: Push-79:
Circuit Id: Push-65
<item valLabRot="0" hflip="1" Key="" circPos="0,0" Show_id="false" valLabelx="0" x="-408" Poles="1" valLabely="0" circRot="0" labelrot="0" id="Push-65" labelx="-16" boardRot="-1000000" objectName="Push-79" rotation="0" Norm_Close="false" y="-44" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Push" vflip="1" mainComp="false"/>
Unique Id: Push-78:
Circuit Id: Push-64
<item valLabRot="0" hflip="1" Key="" circPos="0,0" Show_id="false" valLabelx="0" x="-464" Poles="1" valLabely="0" circRot="-5.4861292972962881e+303" labelrot="0" id="Push-64" labelx="-16" boardRot="-1000000" objectName="Push-78" rotation="0" Norm_Close="false" y="-44" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Push" vflip="1" mainComp="false"/>
Unique Id: Push-68:
Circuit Id: Push-65
<item valLabRot="0" hflip="1" Key="" circPos="0,0" Show_id="false" valLabelx="0" x="-408" Poles="1" valLabely="0" circRot="0" labelrot="0" id="Push-65" labelx="-16" boardRot="-1000000" objectName="Push-68" rotation="0" Norm_Close="false" y="-140" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Push" vflip="1" mainComp="false"/>
Unique Id: Push-67:
Circuit Id: Push-64
<item valLabRot="0" hflip="1" Key="" circPos="0,0" Show_id="false" valLabelx="0" x="-464" Poles="1" valLabely="0" circRot="-5.4861292972962881e+303" labelrot="0" id="Push-64" labelx="-16" boardRot="-1000000" objectName="Push-67" rotation="0" Norm_Close="false" y="-140" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Push" vflip="1" mainComp="false"/>
Unique Id: Push-66:
Circuit Id: Push-63
<item valLabRot="0" hflip="1" Key="" circPos="0,0" Show_id="false" valLabelx="0" x="-516" Poles="1" valLabely="0" circRot="0" labelrot="0" id="Push-63" labelx="-16" boardRot="-1000000" objectName="Push-66" rotation="0" Norm_Close="false" y="-140" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Push" vflip="1" mainComp="false"/>
Unique Id: Push-65:
Circuit Id: Push-65
<item valLabRot="0" hflip="1" Key="" circPos="0,0" Show_id="false" valLabelx="0" x="-408" Poles="1" valLabely="0" circRot="0" labelrot="0" id="Push-65" labelx="-16" boardRot="-1000000" objectName="Push-65" rotation="0" Norm_Close="false" y="-240" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Push" vflip="1" mainComp="false"/>
Unique Id: Push-64:
Circuit Id: Push-64
<item valLabRot="0" hflip="1" Key="" circPos="0,0" Show_id="false" valLabelx="0" x="-464" Poles="1" valLabely="0" circRot="-5.4861292972962881e+303" labelrot="0" id="Push-64" labelx="-16" boardRot="-1000000" objectName="Push-64" rotation="0" Norm_Close="false" y="-240" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Push" vflip="1" mainComp="false"/>
Unique Id: Push-63:
Circuit Id: Push-63
<item valLabRot="0" hflip="1" Key="" circPos="0,0" Show_id="false" valLabelx="0" x="-516" Poles="1" valLabely="0" circRot="0" labelrot="0" id="Push-63" labelx="-16" boardRot="-1000000" objectName="Push-63" rotation="0" Norm_Close="false" y="-240" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Push" vflip="1" mainComp="false"/>
Unique Id: Arduino Uno-1:
Circuit Id: Arduino Uno-1
<item valLabRot="0" hflip="1" Name="arduinoUno" Program="example.arduino.avr.uno.hex" circPos="0,0" Show_id="true" Init_gdb="false" valLabelx="0" Auto_Load="false" x="-304" valLabely="0" circRot="3.2799144730471328e-316" labelrot="0" varList="ACSR,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,," Mhz="16" id="Arduino Uno-1" labelx="100" boardRot="-1000000" Logic_Symbol="false" objectName="Arduino Uno-1" rotation="0" y="-300" boardPos="-1e+06,-1e+06" eeprom="255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255" labely="-21" itemtype="Arduino" vflip="1" mainComp="false"/>
Unique Id: 74HC4067-612:
Circuit Id: 74HC4067-612
<item valLabRot="-90" hflip="1" Name="74HC4067" circPos="0,0" Show_id="true" valLabelx="13" x="-72" valLabely="52" circRot="4.7750804361479468e-316" labelrot="0" id="74HC4067-612" labelx="0" boardRot="-1000000" Logic_Symbol="true" BoardId="" objectName="74HC4067-612" rotation="0" y="-288" boardPos="-1e+06,-1e+06" labely="-20" itemtype="Subcircuit" vflip="1" mainComp="false"/>
Unique Id: Push-687:
Circuit Id: Push-687
<item valLabRot="0" hflip="1" Key="" circPos="0,0" Show_id="false" valLabelx="0" x="36" Poles="1" valLabely="0" circRot="6.470495591940174e+170" labelrot="0" id="Push-687" labelx="-16" boardRot="-1000000" objectName="Push-687" rotation="0" Norm_Close="false" y="-280" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Push" vflip="1" mainComp="false"/>
Unique Id: Push-688:
Circuit Id: Push-688
<item valLabRot="0" hflip="1" Key="" circPos="0,0" Show_id="false" valLabelx="0" x="36" Poles="1" valLabely="0" circRot="-5.4861292803319049e+303" labelrot="0" id="Push-688" labelx="-16" boardRot="-1000000" objectName="Push-688" rotation="0" Norm_Close="false" y="-232" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Push" vflip="1" mainComp="false"/>
Unique Id: Push-689:
Circuit Id: Push-689
<item valLabRot="0" hflip="1" Key="" circPos="0,0" Show_id="false" valLabelx="0" x="36" Poles="1" valLabely="0" circRot="6.870167592054736e+228" labelrot="0" id="Push-689" labelx="-16" boardRot="-1000000" objectName="Push-689" rotation="0" Norm_Close="false" y="-184" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Push" vflip="1" mainComp="false"/>
Unique Id: Ground-690:
Circuit Id: Ground-690
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="92" valLabely="0" circRot="-1.6841244377622154e-310" labelrot="0" id="Ground-690" labelx="-16" boardRot="-1000000" objectName="Ground-690" rotation="0" y="-140" boardPos="-1e+06,-1e+06" labely="8" itemtype="Ground" vflip="1" mainComp="false"/>
Unique Id: Node-696:
Circuit Id: Node-696
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="92" valLabely="0" circRot="-5.4861292803319049e+303" labelrot="0" id="Node-696" labelx="-16" boardRot="-1000000" objectName="Node-696" rotation="0" y="-232" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Node" vflip="1" mainComp="false"/>
Unique Id: Node-699:
Circuit Id: Node-699
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="92" valLabely="0" circRot="-2.1730297897437183e-310" labelrot="0" id="Node-699" labelx="-16" boardRot="-1000000" objectName="Node-699" rotation="0" y="-184" boardPos="-1e+06,-1e+06" labely="-24" itemtype="Node" vflip="1" mainComp="false"/>
Unique Id: SerialTerm-161:
Circuit Id: SerialTerm-161
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" Mcu_Uart="1" sizey="896" valLabelx="0" x="-304" posy="77" posx="1187" valLabely="0" circRot="0" labelrot="0" Mcu_Id="Arduino Uno-1" id="SerialTerm-161" labelx="-16" boardRot="-1000000" objectName="SerialTerm-161" rotation="0" y="-300" boardPos="-1e+06,-1e+06" labely="-24" itemtype="SerialTerm" sizex="715" vflip="1" mainComp="false"/>
Unique Id: Connector-89:
Circuit Id: Connector-89
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-480" startpinid="Node-88-2" enodeid="Circ_eNode-769" valLabely="0" circRot="0" labelrot="0" id="Connector-89" labelx="-16" boardRot="-1000000" objectName="Connector-89" rotation="0" y="-268" boardPos="-1e+06,-1e+06" endpinid="Push-63-pinP0" labely="-24" itemtype="Connector" pointList="-480,-268,-532,-268,-532,-240" vflip="1" mainComp="false"/>
Unique Id: Connector-90:
Circuit Id: Connector-90
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-480" startpinid="Node-88-1" enodeid="Circ_eNode-769" valLabely="0" circRot="0" labelrot="0" id="Connector-90" labelx="-16" boardRot="-1000000" objectName="Connector-90" rotation="0" y="-268" boardPos="-1e+06,-1e+06" endpinid="Push-64-pinP0" labely="-24" itemtype="Connector" pointList="-480,-268,-480,-240" vflip="1" mainComp="false"/>
Unique Id: Connector-95:
Circuit Id: Connector-95
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-424" startpinid="Node-94-2" enodeid="Circ_eNode-769" valLabely="0" circRot="0" labelrot="0" id="Connector-95" labelx="-16" boardRot="-1000000" objectName="Connector-95" rotation="0" y="-268" boardPos="-1e+06,-1e+06" endpinid="Node-88-0" labely="-24" itemtype="Connector" pointList="-424,-268,-480,-268" vflip="1" mainComp="false"/>
Unique Id: Connector-96:
Circuit Id: Connector-96
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-424" startpinid="Node-94-1" enodeid="Circ_eNode-769" valLabely="0" circRot="0" labelrot="0" id="Connector-96" labelx="-16" boardRot="-1000000" objectName="Connector-96" rotation="0" y="-268" boardPos="-1e+06,-1e+06" endpinid="Push-65-pinP0" labely="-24" itemtype="Connector" pointList="-424,-268,-424,-240" vflip="1" mainComp="false"/>
Unique Id: Connector-103:
Circuit Id: Connector-103
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-480" startpinid="Node-102-2" enodeid="Circ_eNode-770" valLabely="0" circRot="nan" labelrot="0" id="Connector-103" labelx="-16" boardRot="-1000000" objectName="Connector-103" rotation="0" y="-60" boardPos="-1e+06,-1e+06" endpinid="Push-80-pinP0" labely="-24" itemtype="Connector" pointList="-480,-60,-532,-60,-532,-44" vflip="1" mainComp="false"/>
Unique Id: Connector-104:
Circuit Id: Connector-104
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-480" startpinid="Node-102-1" enodeid="Circ_eNode-770" valLabely="0" circRot="0" labelrot="0" id="Connector-104" labelx="-16" boardRot="-1000000" objectName="Connector-104" rotation="0" y="-60" boardPos="-1e+06,-1e+06" endpinid="Push-78-pinP0" labely="-24" itemtype="Connector" pointList="-480,-60,-480,-44" vflip="1" mainComp="false"/>
Unique Id: Connector-106:
Circuit Id: Connector-106
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-424" startpinid="Node-105-2" enodeid="Circ_eNode-770" valLabely="0" circRot="0" labelrot="0" id="Connector-106" labelx="-16" boardRot="-1000000" objectName="Connector-106" rotation="0" y="-60" boardPos="-1e+06,-1e+06" endpinid="Node-102-0" labely="-24" itemtype="Connector" pointList="-424,-60,-480,-60" vflip="1" mainComp="false"/>
Unique Id: Connector-107:
Circuit Id: Connector-107
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-424" startpinid="Node-105-1" enodeid="Circ_eNode-770" valLabely="0" circRot="0" labelrot="0" id="Connector-107" labelx="-16" boardRot="-1000000" objectName="Connector-107" rotation="0" y="-60" boardPos="-1e+06,-1e+06" endpinid="Push-79-pinP0" labely="-24" itemtype="Connector" pointList="-424,-60,-424,-44" vflip="1" mainComp="false"/>
Unique Id: Connector-166:
Circuit Id: Connector-166
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-480" startpinid="Node-165-2" enodeid="Circ_eNode-771" valLabely="0" circRot="0" labelrot="0" id="Connector-166" labelx="-16" boardRot="-1000000" objectName="Connector-166" rotation="0" y="-164" boardPos="-1e+06,-1e+06" endpinid="Push-66-pinP0" labely="-24" itemtype="Connector" pointList="-480,-164,-532,-164,-532,-140" vflip="1" mainComp="false"/>
Unique Id: Connector-167:
Circuit Id: Connector-167
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-480" startpinid="Node-165-1" enodeid="Circ_eNode-771" valLabely="0" circRot="0" labelrot="0" id="Connector-167" labelx="-16" boardRot="-1000000" objectName="Connector-167" rotation="0" y="-164" boardPos="-1e+06,-1e+06" endpinid="Push-67-pinP0" labely="-24" itemtype="Connector" pointList="-480,-164,-480,-140" vflip="1" mainComp="false"/>
Unique Id: Connector-169:
Circuit Id: Connector-169
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-424" startpinid="Node-168-2" enodeid="Circ_eNode-771" valLabely="0" circRot="0" labelrot="0" id="Connector-169" labelx="-16" boardRot="-1000000" objectName="Connector-169" rotation="0" y="-164" boardPos="-1e+06,-1e+06" endpinid="Node-165-0" labely="-24" itemtype="Connector" pointList="-424,-164,-480,-164" vflip="1" mainComp="false"/>
Unique Id: Connector-170:
Circuit Id: Connector-170
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-424" startpinid="Node-168-1" enodeid="Circ_eNode-771" valLabely="0" circRot="0" labelrot="0" id="Connector-170" labelx="-16" boardRot="-1000000" objectName="Connector-170" rotation="0" y="-164" boardPos="-1e+06,-1e+06" endpinid="Push-68-pinP0" labely="-24" itemtype="Connector" pointList="-424,-164,-424,-140" vflip="1" mainComp="false"/>
Unique Id: Connector-177:
Circuit Id: Connector-177
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-296" startpinid="Arduino Uno-1-PD6" enodeid="Circ_eNode-773" valLabely="0" circRot="0" labelrot="0" id="Connector-177" labelx="-16" boardRot="-1000000" objectName="Connector-177" rotation="0" y="-236" boardPos="-1e+06,-1e+06" endpinid="Push-171-switch0pinN" labely="-24" itemtype="Connector" pointList="-296,-236,-336,-236,-336,-328,-404,-328" vflip="1" mainComp="false"/>
Unique Id: Connector-178:
Circuit Id: Connector-178
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-296" startpinid="Arduino Uno-1-PD5" enodeid="Circ_eNode-774" valLabely="0" circRot="0" labelrot="0" id="Connector-178" labelx="-16" boardRot="-1000000" objectName="Connector-178" rotation="0" y="-244" boardPos="-1e+06,-1e+06" endpinid="Push-172-switch0pinN" labely="-24" itemtype="Connector" pointList="-296,-244,-332,-244,-332,-368,-404,-368" vflip="1" mainComp="false"/>
Unique Id: Connector-179:
Circuit Id: Connector-179
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-296" startpinid="Arduino Uno-1-PD4" enodeid="Circ_eNode-775" valLabely="0" circRot="0" labelrot="0" id="Connector-179" labelx="-16" boardRot="-1000000" objectName="Connector-179" rotation="0" y="-252" boardPos="-1e+06,-1e+06" endpinid="Push-173-switch0pinN" labely="-24" itemtype="Connector" pointList="-296,-252,-328,-252,-328,-404,-404,-404" vflip="1" mainComp="false"/>
Unique Id: Connector-182:
Circuit Id: Connector-182
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-436" startpinid="Push-171-pinP0" enodeid="Circ_eNode-776" valLabely="0" circRot="0" labelrot="0" id="Connector-182" labelx="-16" boardRot="-1000000" objectName="Connector-182" rotation="0" y="-328" boardPos="-1e+06,-1e+06" endpinid="Node-186-0" labely="-24" itemtype="Connector" pointList="-436,-328,-472,-328" vflip="1" mainComp="false"/>
Unique Id: Connector-185:
Circuit Id: Connector-185
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-436" startpinid="Push-172-pinP0" enodeid="Circ_eNode-776" valLabely="0" circRot="0" labelrot="0" id="Connector-185" labelx="-16" boardRot="-1000000" objectName="Connector-185" rotation="0" y="-368" boardPos="-1e+06,-1e+06" endpinid="Node-189-0" labely="-24" itemtype="Connector" pointList="-436,-368,-472,-368" vflip="1" mainComp="false"/>
Unique Id: Connector-188:
Circuit Id: Connector-188
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-436" startpinid="Push-173-pinP0" enodeid="Circ_eNode-776" valLabely="0" circRot="0" labelrot="0" id="Connector-188" labelx="-16" boardRot="-1000000" objectName="Connector-188" rotation="0" y="-404" boardPos="-1e+06,-1e+06" endpinid="Node-189-1" labely="-24" itemtype="Connector" pointList="-436,-404,-472,-404,-472,-368" vflip="1" mainComp="false"/>
Unique Id: Connector-190:
Circuit Id: Connector-190
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-472" startpinid="Node-189-2" enodeid="Circ_eNode-776" valLabely="0" circRot="0" labelrot="0" id="Connector-190" labelx="-16" boardRot="-1000000" objectName="Connector-190" rotation="0" y="-368" boardPos="-1e+06,-1e+06" endpinid="Node-192-0" labely="-24" itemtype="Connector" pointList="-472,-368,-472,-348" vflip="1" mainComp="false"/>
Unique Id: Connector-181:
Circuit Id: Connector-181
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-436" startpinid="Push-174-pinP0" enodeid="Circ_eNode-776" valLabely="0" circRot="0" labelrot="0" id="Connector-181" labelx="-16" boardRot="-1000000" objectName="Connector-181" rotation="0" y="-292" boardPos="-1e+06,-1e+06" endpinid="Node-186-2" labely="-24" itemtype="Connector" pointList="-436,-292,-472,-292,-472,-328" vflip="1" mainComp="false"/>
Unique Id: Connector-191:
Circuit Id: Connector-191
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-508" startpinid="Ground-180-Gnd" enodeid="Circ_eNode-776" valLabely="0" circRot="0" labelrot="0" id="Connector-191" labelx="-16" boardRot="-1000000" objectName="Connector-191" rotation="0" y="-304" boardPos="-1e+06,-1e+06" endpinid="Node-192-1" labely="-24" itemtype="Connector" pointList="-508,-304,-508,-348,-472,-348" vflip="1" mainComp="false"/>
Unique Id: Connector-193:
Circuit Id: Connector-193
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-472" startpinid="Node-192-2" enodeid="Circ_eNode-776" valLabely="0" circRot="0" labelrot="0" id="Connector-193" labelx="-16" boardRot="-1000000" objectName="Connector-193" rotation="0" y="-348" boardPos="-1e+06,-1e+06" endpinid="Node-186-1" labely="-24" itemtype="Connector" pointList="-472,-348,-472,-328" vflip="1" mainComp="false"/>
Unique Id: Connector-553:
Circuit Id: Connector-553
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-500" startpinid="Diode-113-lPin" enodeid="Circ_eNode-777" valLabely="0" circRot="0" labelrot="0" id="Connector-553" labelx="-16" boardRot="-1000000" objectName="Connector-553" rotation="0" y="-28" boardPos="-1e+06,-1e+06" endpinid="Push-80-switch0pinN" labely="-24" itemtype="Connector" pointList="-500,-28,-500,-44" vflip="1" mainComp="false"/>
Unique Id: Connector-554:
Circuit Id: Connector-554
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-500" startpinid="Diode-120-lPin" enodeid="Circ_eNode-778" valLabely="0" circRot="0" labelrot="0" id="Connector-554" labelx="-16" boardRot="-1000000" objectName="Connector-554" rotation="0" y="-120" boardPos="-1e+06,-1e+06" endpinid="Push-66-switch0pinN" labely="-24" itemtype="Connector" pointList="-500,-120,-500,-140" vflip="1" mainComp="false"/>
Unique Id: Connector-555:
Circuit Id: Connector-555
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-448" startpinid="Diode-117-lPin" enodeid="Circ_eNode-779" valLabely="0" circRot="0" labelrot="0" id="Connector-555" labelx="-16" boardRot="-1000000" objectName="Connector-555" rotation="0" y="-120" boardPos="-1e+06,-1e+06" endpinid="Push-67-switch0pinN" labely="-24" itemtype="Connector" pointList="-448,-120,-448,-140" vflip="1" mainComp="false"/>
Unique Id: Connector-556:
Circuit Id: Connector-556
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-388" startpinid="Diode-116-lPin" enodeid="Circ_eNode-780" valLabely="0" circRot="0" labelrot="0" id="Connector-556" labelx="-16" boardRot="-1000000" objectName="Connector-556" rotation="0" y="-120" boardPos="-1e+06,-1e+06" endpinid="Push-68-switch0pinN" labely="-24" itemtype="Connector" pointList="-388,-120,-388,-140,-392,-140" vflip="1" mainComp="false"/>
Unique Id: Connector-557:
Circuit Id: Connector-557
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-388" startpinid="Diode-121-lPin" enodeid="Circ_eNode-781" valLabely="0" circRot="0" labelrot="0" id="Connector-557" labelx="-16" boardRot="-1000000" objectName="Connector-557" rotation="0" y="-228" boardPos="-1e+06,-1e+06" endpinid="Push-65-switch0pinN" labely="-24" itemtype="Connector" pointList="-388,-228,-388,-240,-392,-240" vflip="1" mainComp="false"/>
Unique Id: Connector-558:
Circuit Id: Connector-558
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-444" startpinid="Diode-124-lPin" enodeid="Circ_eNode-782" valLabely="0" circRot="0" labelrot="0" id="Connector-558" labelx="-16" boardRot="-1000000" objectName="Connector-558" rotation="0" y="-228" boardPos="-1e+06,-1e+06" endpinid="Push-64-switch0pinN" labely="-24" itemtype="Connector" pointList="-444,-228,-444,-240,-448,-240" vflip="1" mainComp="false"/>
Unique Id: Connector-559:
Circuit Id: Connector-559
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-500" startpinid="Diode-108-lPin" enodeid="Circ_eNode-783" valLabely="0" circRot="0" labelrot="0" id="Connector-559" labelx="-16" boardRot="-1000000" objectName="Connector-559" rotation="0" y="-224" boardPos="-1e+06,-1e+06" endpinid="Push-63-switch0pinN" labely="-24" itemtype="Connector" pointList="-500,-224,-500,-240" vflip="1" mainComp="false"/>
Unique Id: Connector-563:
Circuit Id: Connector-563
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-500" startpinid="Diode-120-rPin" enodeid="Circ_eNode-784" valLabely="0" circRot="-1.1951277993834117e-310" labelrot="0" id="Connector-563" labelx="-16" boardRot="-1000000" objectName="Connector-563" rotation="0" y="-88" boardPos="-1e+06,-1e+06" endpinid="Node-564-1" labely="-24" itemtype="Connector" pointList="-500,-88,-488,-88,-488,-84" vflip="1" mainComp="false"/>
Unique Id: Connector-565:
Circuit Id: Connector-565
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-488" startpinid="Node-564-2" enodeid="Circ_eNode-784" valLabely="0" circRot="0" labelrot="0" id="Connector-565" labelx="-16" boardRot="-1000000" objectName="Connector-565" rotation="0" y="-84" boardPos="-1e+06,-1e+06" endpinid="Diode-108-rPin" labely="-24" itemtype="Connector" pointList="-488,-84,-488,-192,-500,-192" vflip="1" mainComp="false"/>
Unique Id: Connector-569:
Circuit Id: Connector-569
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-448" startpinid="Diode-117-rPin" enodeid="Circ_eNode-785" valLabely="0" circRot="0" labelrot="0" id="Connector-569" labelx="-16" boardRot="-1000000" objectName="Connector-569" rotation="0" y="-88" boardPos="-1e+06,-1e+06" endpinid="Node-570-1" labely="-24" itemtype="Connector" pointList="-448,-88,-432,-88" vflip="1" mainComp="false"/>
Unique Id: Connector-571:
Circuit Id: Connector-571
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-432" startpinid="Node-570-2" enodeid="Circ_eNode-785" valLabely="0" circRot="0" labelrot="0" id="Connector-571" labelx="-16" boardRot="-1000000" objectName="Connector-571" rotation="0" y="-88" boardPos="-1e+06,-1e+06" endpinid="Diode-124-rPin" labely="-24" itemtype="Connector" pointList="-432,-88,-432,-196,-444,-196" vflip="1" mainComp="false"/>
Unique Id: Connector-575:
Circuit Id: Connector-575
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-388" startpinid="Diode-116-rPin" enodeid="enode-807" valLabely="0" circRot="0" labelrot="0" id="Connector-575" labelx="-16" boardRot="-1000000" objectName="Connector-575" rotation="0" y="-88" boardPos="-1e+06,-1e+06" endpinid="Node-576-1" labely="-24" itemtype="Connector" pointList="-388,-88,-380,-88" vflip="1" mainComp="false"/>
Unique Id: Connector-577:
Circuit Id: Connector-577
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-380" startpinid="Node-576-2" enodeid="enode-807" valLabely="0" circRot="0" labelrot="0" id="Connector-577" labelx="-16" boardRot="-1000000" objectName="Connector-577" rotation="0" y="-88" boardPos="-1e+06,-1e+06" endpinid="Diode-121-rPin" labely="-24" itemtype="Connector" pointList="-380,-88,-380,-196,-388,-196" vflip="1" mainComp="false"/>
Unique Id: Connector-97:
Circuit Id: Connector-97
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-296" startpinid="Arduino Uno-1-PB1" enodeid="Circ_eNode-771" valLabely="0" circRot="0" labelrot="0" id="Connector-97" labelx="-16" boardRot="-1000000" objectName="Connector-97" rotation="0" y="-204" boardPos="-1e+06,-1e+06" endpinid="Node-168-0" labely="-24" itemtype="Connector" pointList="-296,-204,-360,-204,-360,-164,-424,-164" vflip="1" mainComp="false"/>
Unique Id: Connector-98:
Circuit Id: Connector-98
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-296" startpinid="Arduino Uno-1-PB2" enodeid="Circ_eNode-770" valLabely="0" circRot="0" labelrot="0" id="Connector-98" labelx="-16" boardRot="-1000000" objectName="Connector-98" rotation="0" y="-196" boardPos="-1e+06,-1e+06" endpinid="Node-105-0" labely="-24" itemtype="Connector" pointList="-296,-196,-352,-196,-352,-60,-424,-60" vflip="1" mainComp="false"/>
Unique Id: Connector-551:
Circuit Id: Connector-551
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-296" startpinid="Arduino Uno-1-PB4" enodeid="Circ_eNode-785" valLabely="0" circRot="0" labelrot="0" id="Connector-551" labelx="-16" boardRot="-1000000" objectName="Connector-551" rotation="0" y="-180" boardPos="-1e+06,-1e+06" endpinid="Node-593-0" labely="-24" itemtype="Connector" pointList="-296,-180,-340,-180,-340,48,-432,48,-432,16" vflip="1" mainComp="false"/>
Unique Id: Connector-550:
Circuit Id: Connector-550
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-296" startpinid="Arduino Uno-1-PB3" enodeid="Circ_eNode-784" valLabely="0" circRot="0" labelrot="0" id="Connector-550" labelx="-16" boardRot="-1000000" objectName="Connector-550" rotation="0" y="-188" boardPos="-1e+06,-1e+06" endpinid="Node-590-0" labely="-24" itemtype="Connector" pointList="-296,-188,-344,-188,-344,36,-488,36,-488,16" vflip="1" mainComp="false"/>
Unique Id: Connector-589:
Circuit Id: Connector-589
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-500" startpinid="Diode-113-rPin" enodeid="Circ_eNode-784" valLabely="0" circRot="0" labelrot="0" id="Connector-589" labelx="-16" boardRot="-1000000" objectName="Connector-589" rotation="0" y="4" boardPos="-1e+06,-1e+06" endpinid="Node-590-1" labely="-24" itemtype="Connector" pointList="-500,4,-500,16,-488,16" vflip="1" mainComp="false"/>
Unique Id: Connector-591:
Circuit Id: Connector-591
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-488" startpinid="Node-590-2" enodeid="Circ_eNode-784" valLabely="0" circRot="0" labelrot="0" id="Connector-591" labelx="-16" boardRot="-1000000" objectName="Connector-591" rotation="0" y="16" boardPos="-1e+06,-1e+06" endpinid="Node-564-0" labely="-24" itemtype="Connector" pointList="-488,16,-488,-84" vflip="1" mainComp="false"/>
Unique Id: Connector-592:
Circuit Id: Connector-592
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-448" startpinid="Diode-112-rPin" enodeid="Circ_eNode-785" valLabely="0" circRot="0" labelrot="0" id="Connector-592" labelx="-16" boardRot="-1000000" objectName="Connector-592" rotation="0" y="8" boardPos="-1e+06,-1e+06" endpinid="Node-593-1" labely="-24" itemtype="Connector" pointList="-448,8,-448,16,-432,16" vflip="1" mainComp="false"/>
Unique Id: Connector-594:
Circuit Id: Connector-594
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-432" startpinid="Node-593-2" enodeid="Circ_eNode-785" valLabely="0" circRot="0" labelrot="0" id="Connector-594" labelx="-16" boardRot="-1000000" objectName="Connector-594" rotation="0" y="16" boardPos="-1e+06,-1e+06" endpinid="Node-570-0" labely="-24" itemtype="Connector" pointList="-432,16,-432,-88" vflip="1" mainComp="false"/>
Unique Id: Connector-87:
Circuit Id: Connector-87
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-296" startpinid="Arduino Uno-1-PB0" enodeid="Circ_eNode-769" valLabely="0" circRot="0" labelrot="0" id="Connector-87" labelx="-16" boardRot="-1000000" objectName="Connector-87" rotation="0" y="-212" boardPos="-1e+06,-1e+06" endpinid="Node-94-0" labely="-24" itemtype="Connector" pointList="-296,-212,-348,-212,-348,-268,-424,-268" vflip="1" mainComp="false"/>
Unique Id: Connector-682:
Circuit Id: Connector-682
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-152" startpinid="Arduino Uno-1-PC1" enodeid="Circ_eNode-787" valLabely="0" circRot="0" labelrot="0" id="Connector-682" labelx="-16" boardRot="-1000000" objectName="Connector-682" rotation="0" y="-252" boardPos="-1e+06,-1e+06" endpinid="74HC4067-612-Z" labely="-24" itemtype="Connector" pointList="-152,-252,-140,-252,-140,-280,-80,-280" vflip="1" mainComp="false"/>
Unique Id: Connector-683:
Circuit Id: Connector-683
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-152" startpinid="Arduino Uno-1-PC2" enodeid="Circ_eNode-788" valLabely="0" circRot="0" labelrot="0" id="Connector-683" labelx="-16" boardRot="-1000000" objectName="Connector-683" rotation="0" y="-260" boardPos="-1e+06,-1e+06" endpinid="74HC4067-612-S0" labely="-24" itemtype="Connector" pointList="-152,-260,-100,-260,-100,-264,-80,-264" vflip="1" mainComp="false"/>
Unique Id: Connector-684:
Circuit Id: Connector-684
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-152" startpinid="Arduino Uno-1-PC3" enodeid="Circ_eNode-789" valLabely="0" circRot="0" labelrot="0" id="Connector-684" labelx="-16" boardRot="-1000000" objectName="Connector-684" rotation="0" y="-268" boardPos="-1e+06,-1e+06" endpinid="74HC4067-612-S1" labely="-24" itemtype="Connector" pointList="-152,-268,-104,-268,-104,-256,-80,-256" vflip="1" mainComp="false"/>
Unique Id: Connector-685:
Circuit Id: Connector-685
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-152" startpinid="Arduino Uno-1-PC4" enodeid="Circ_eNode-790" valLabely="0" circRot="0" labelrot="0" id="Connector-685" labelx="-16" boardRot="-1000000" objectName="Connector-685" rotation="0" y="-276" boardPos="-1e+06,-1e+06" endpinid="74HC4067-612-S2" labely="-24" itemtype="Connector" pointList="-152,-276,-108,-276,-108,-248,-80,-248" vflip="1" mainComp="false"/>
Unique Id: Connector-686:
Circuit Id: Connector-686
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-152" startpinid="Arduino Uno-1-PC5" enodeid="Circ_eNode-791" valLabely="0" circRot="0" labelrot="0" id="Connector-686" labelx="-16" boardRot="-1000000" objectName="Connector-686" rotation="0" y="-284" boardPos="-1e+06,-1e+06" endpinid="74HC4067-612-S3" labely="-24" itemtype="Connector" pointList="-152,-284,-112,-284,-112,-240,-80,-240" vflip="1" mainComp="false"/>
Unique Id: Connector-691:
Circuit Id: Connector-691
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-32" startpinid="74HC4067-612-Y0" enodeid="Circ_eNode-792" valLabely="0" circRot="0" labelrot="0" id="Connector-691" labelx="-16" boardRot="-1000000" objectName="Connector-691" rotation="0" y="-280" boardPos="-1e+06,-1e+06" endpinid="Push-687-pinP0" labely="-24" itemtype="Connector" pointList="-32,-280,20,-280" vflip="1" mainComp="false"/>
Unique Id: Connector-692:
Circuit Id: Connector-692
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-32" startpinid="74HC4067-612-Y1" enodeid="Circ_eNode-793" valLabely="0" circRot="0" labelrot="0" id="Connector-692" labelx="-16" boardRot="-1000000" objectName="Connector-692" rotation="0" y="-272" boardPos="-1e+06,-1e+06" endpinid="Push-688-pinP0" labely="-24" itemtype="Connector" pointList="-32,-272,12,-272,12,-232,20,-232" vflip="1" mainComp="false"/>
Unique Id: Connector-693:
Circuit Id: Connector-693
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-32" startpinid="74HC4067-612-Y2" enodeid="Circ_eNode-794" valLabely="0" circRot="0" labelrot="0" id="Connector-693" labelx="-16" boardRot="-1000000" objectName="Connector-693" rotation="0" y="-264" boardPos="-1e+06,-1e+06" endpinid="Push-689-pinP0" labely="-24" itemtype="Connector" pointList="-32,-264,4,-264,4,-184,20,-184" vflip="1" mainComp="false"/>
Unique Id: Connector-694:
Circuit Id: Connector-694
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="52" startpinid="Push-687-switch0pinN" enodeid="Circ_eNode-795" valLabely="0" circRot="0" labelrot="0" id="Connector-694" labelx="-16" boardRot="-1000000" objectName="Connector-694" rotation="0" y="-280" boardPos="-1e+06,-1e+06" endpinid="Node-696-0" labely="-24" itemtype="Connector" pointList="52,-280,92,-280,92,-232" vflip="1" mainComp="false"/>
Unique Id: Connector-695:
Circuit Id: Connector-695
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="52" startpinid="Push-688-switch0pinN" enodeid="Circ_eNode-795" valLabely="0" circRot="0" labelrot="0" id="Connector-695" labelx="-16" boardRot="-1000000" objectName="Connector-695" rotation="0" y="-232" boardPos="-1e+06,-1e+06" endpinid="Node-696-1" labely="-24" itemtype="Connector" pointList="52,-232,92,-232" vflip="1" mainComp="false"/>
Unique Id: Connector-697:
Circuit Id: Connector-697
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="92" startpinid="Node-696-2" enodeid="Circ_eNode-795" valLabely="0" circRot="0" labelrot="0" id="Connector-697" labelx="-16" boardRot="-1000000" objectName="Connector-697" rotation="0" y="-232" boardPos="-1e+06,-1e+06" endpinid="Node-699-0" labely="-24" itemtype="Connector" pointList="92,-232,92,-184" vflip="1" mainComp="false"/>
Unique Id: Connector-698:
Circuit Id: Connector-698
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="52" startpinid="Push-689-switch0pinN" enodeid="Circ_eNode-795" valLabely="0" circRot="0" labelrot="0" id="Connector-698" labelx="-16" boardRot="-1000000" objectName="Connector-698" rotation="0" y="-184" boardPos="-1e+06,-1e+06" endpinid="Node-699-1" labely="-24" itemtype="Connector" pointList="52,-184,92,-184" vflip="1" mainComp="false"/>
Unique Id: Connector-700:
Circuit Id: Connector-700
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="92" startpinid="Node-699-2" enodeid="Circ_eNode-795" valLabely="0" circRot="0" labelrot="0" id="Connector-700" labelx="-16" boardRot="-1000000" objectName="Connector-700" rotation="0" y="-184" boardPos="-1e+06,-1e+06" endpinid="Ground-690-Gnd" labely="-24" itemtype="Connector" pointList="92,-184,92,-156" vflip="1" mainComp="false"/>
Unique Id: Connector-701:
Circuit Id: Connector-701
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-448" startpinid="Push-78-switch0pinN" enodeid="Circ_eNode-796" valLabely="0" circRot="0" labelrot="0" id="Connector-701" labelx="-16" boardRot="-1000000" objectName="Connector-701" rotation="0" y="-44" boardPos="-1e+06,-1e+06" endpinid="Diode-112-lPin" labely="-24" itemtype="Connector" pointList="-448,-44,-448,-24" vflip="1" mainComp="false"/>
Unique Id: Connector-702:
Circuit Id: Connector-702
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-392" startpinid="Push-79-switch0pinN" enodeid="Circ_eNode-797" valLabely="0" circRot="0" labelrot="0" id="Connector-702" labelx="-16" boardRot="-1000000" objectName="Connector-702" rotation="0" y="-44" boardPos="-1e+06,-1e+06" endpinid="Diode-109-lPin" labely="-24" itemtype="Connector" pointList="-392,-44,-392,-24" vflip="1" mainComp="false"/>
Unique Id: Connector-586:
Circuit Id: Connector-586
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-392" startpinid="Diode-109-rPin" enodeid="enode-807" valLabely="0" circRot="0" labelrot="0" id="Connector-586" labelx="-16" boardRot="-1000000" objectName="Connector-586" rotation="0" y="8" boardPos="-1e+06,-1e+06" endpinid="Node-803-0" labely="-24" itemtype="Connector" pointList="-392,8,-392,24,-380,24" vflip="1" mainComp="false"/>
Unique Id: Connector-804:
Circuit Id: Connector-804
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-380" startpinid="Node-803-2" enodeid="enode-807" valLabely="0" circRot="0" labelrot="0" id="Connector-804" labelx="-16" boardRot="-1000000" objectName="Connector-804" rotation="0" y="24" boardPos="-1e+06,-1e+06" endpinid="Node-576-0" labely="-24" itemtype="Connector" pointList="-380,24,-380,-88" vflip="1" mainComp="false"/>
Unique Id: Connector-807:
Circuit Id: Connector-807
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-296" startpinid="Arduino Uno-1-PB5" enodeid="enode-807" valLabely="0" circRot="0" labelrot="0" id="Connector-807" labelx="-16" boardRot="-1000000" objectName="Connector-807" rotation="0" y="-172" boardPos="-1e+06,-1e+06" endpinid="Node-803-1" labely="-24" itemtype="Connector" pointList="-296,-172,-332,-172,-332,80,-380,80,-380,24" vflip="1" mainComp="false"/>
Unique Id: Connector-808:
Circuit Id: Connector-808
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-296" startpinid="Arduino Uno-1-PD7" enodeid="enode-808" valLabely="0" circRot="0" labelrot="0" id="Connector-808" labelx="-16" boardRot="-1000000" objectName="Connector-808" rotation="0" y="-228" boardPos="-1e+06,-1e+06" endpinid="Push-174-switch0pinN" labely="-24" itemtype="Connector" pointList="-296,-228,-340,-228,-340,-292,-404,-292" vflip="1" mainComp="false"/>
Unique Id: Connector-811:
Circuit Id: Connector-811
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-152" startpinid="Arduino Uno-1-PC0" enodeid="enode-811" valLabely="0" circRot="0" labelrot="0" id="Connector-811" labelx="-16" boardRot="-1000000" objectName="Connector-811" rotation="0" y="-244" boardPos="-1e+06,-1e+06" endpinid="Push-809-pinP0" labely="-24" itemtype="Connector" pointList="-152,-244,-128,-244,-128,-116,-72,-116" vflip="1" mainComp="false"/>
Unique Id: Connector-813:
Circuit Id: Connector-813
<item valLabRot="0" hflip="1" circPos="0,0" Show_id="false" valLabelx="0" x="-40" startpinid="Push-809-switch0pinN" enodeid="enode-813" valLabely="0" circRot="0" labelrot="0" id="Connector-813" labelx="-16" boardRot="-1000000" objectName="Connector-813" rotation="0" y="-116" boardPos="-1e+06,-1e+06" endpinid="Ground-812-Gnd" labely="-24" itemtype="Connector" pointList="-40,-116,-16,-116,-16,-92" vflip="1" mainComp="false"/>
</circuit>

View File

@ -0,0 +1,8 @@
TARGET_BOARD=arduino:avr:uno
COM_PORT=/dev/ttyACM0
build:
arduino-cli compile -b ${TARGET_BOARD}
upload:
arduino-cli upload -b ${TARGET_BOARD} -p ${COM_PORT}