This website is still under construction.


Because we have too many inputs from fursuit and fursuiter to be processed by Communication Unit, we need to use one Arduino Micro only for processing them (total 20 pins, 12 of them analog inputs).
For all the inputs, look into Fursuit Specifications in Communication.
#define PIN_BUTTON_FINGER_1 2 #define PIN_BUTTON_FINGER_2 3 #define PIN_BUTTON_FINGER_3 4 #define PIN_BUTTON_FINGER_4 5 #define PIN_BUTTON_FINGER_5 6 #define PIN_BUTTON_YAW_CLOSED 7 #define PIN_AXIS_EAR_LEFT A0 #define PIN_AXIS_EAR_RIGHT A1 #define PIN_AXIS_YAW A2
void setup() { pinMode(PIN_BUTTON_FINGER_1, INPUT_PULLUP); pinMode(PIN_BUTTON_FINGER_2, INPUT_PULLUP); pinMode(PIN_BUTTON_FINGER_3, INPUT_PULLUP); pinMode(PIN_BUTTON_FINGER_4, INPUT_PULLUP); pinMode(PIN_BUTTON_FINGER_5, INPUT_PULLUP); pinMode(PIN_BUTTON_YAW_CLOSED, INPUT_PULLUP); pinMode(PIN_AXIS_EAR_LEFT, INPUT); pinMode(PIN_AXIS_EAR_RIGHT, INPUT); pinMode(PIN_AXIS_YAW, INPUT); }
It tells us that we will need 6 buttons (digital pullup inputs) and 3 axis (analog inputs).
#if defined(__AVR_ATmega32U4__) #define Communication Serial1 #define CommunicationEvent serialEvent1 #else #define Communication Serial #define CommunicationEvent serialEvent #endif
void setup() { Communication.begin(115200); }
To communicate, we will aso need to use Serial.
void sendData() { Communication.write(digitalRead(PIN_BUTTON_FINGER_1) == LOW ? '1' : '0'); Communication.write(digitalRead(PIN_BUTTON_FINGER_2) == LOW ? '1' : '0'); Communication.write(digitalRead(PIN_BUTTON_FINGER_3) == LOW ? '1' : '0'); Communication.write(digitalRead(PIN_BUTTON_FINGER_4) == LOW ? '1' : '0'); Communication.write(digitalRead(PIN_BUTTON_FINGER_5) == LOW ? '1' : '0'); Communication.write(digitalRead(PIN_BUTTON_YAW_CLOSED) == LOW ? '1' : '0'); Communication.write(analogRead(PIN_AXIS_EAR_LEFT) / 4); Communication.write(analogRead(PIN_AXIS_EAR_RIGHT) / 4); Communication.write(analogRead(PIN_AXIS_YAW) / 4); }
One input pin is one output byte. We could pack finger buttons (or all buttons) into one byte but there is no problem with sending them as a byte each.
We also use == LOW because of INPUT_PULLUP. void loop() { sendData(); delay(500); }
We will read and send inputs every half of second (should be enough for catching finger inputs) but there is no problem changing it anytime (after testing).

Whole code:
#if defined(__AVR_ATmega32U4__) #define Communication Serial1 #define CommunicationEvent serialEvent1 #else #define Communication Serial #define CommunicationEvent serialEvent #endif // Finger (save-slot) buttons #define PIN_BUTTON_FINGER_1 2 #define PIN_BUTTON_FINGER_2 3 #define PIN_BUTTON_FINGER_3 4 #define PIN_BUTTON_FINGER_4 5 #define PIN_BUTTON_FINGER_5 6 #define PIN_BUTTON_YAW_CLOSED 7 #define PIN_AXIS_EAR_LEFT A0 #define PIN_AXIS_EAR_RIGHT A1 #define PIN_AXIS_YAW A2 void setup() { pinMode(PIN_BUTTON_FINGER_1, INPUT_PULLUP); pinMode(PIN_BUTTON_FINGER_2, INPUT_PULLUP); pinMode(PIN_BUTTON_FINGER_3, INPUT_PULLUP); pinMode(PIN_BUTTON_FINGER_4, INPUT_PULLUP); pinMode(PIN_BUTTON_FINGER_5, INPUT_PULLUP); pinMode(PIN_BUTTON_YAW_CLOSED, INPUT_PULLUP); Communication.begin(115200); } void sendData() { // Buttons { Communication.write(digitalRead(PIN_BUTTON_FINGER_1) == LOW ? '1' : '0'); Communication.write(digitalRead(PIN_BUTTON_FINGER_2) == LOW ? '1' : '0'); Communication.write(digitalRead(PIN_BUTTON_FINGER_3) == LOW ? '1' : '0'); Communication.write(digitalRead(PIN_BUTTON_FINGER_4) == LOW ? '1' : '0'); Communication.write(digitalRead(PIN_BUTTON_FINGER_5) == LOW ? '1' : '0'); Communication.write(digitalRead(PIN_BUTTON_YAW_CLOSED) == LOW ? '1' : '0'); } // Axis { Communication.write(analogRead(PIN_AXIS_EAR_LEFT) / 4); Communication.write(analogRead(PIN_AXIS_EAR_RIGHT) / 4); Communication.write(analogRead(PIN_AXIS_YAW) / 4); } } void loop() { sendData(); delay(500); }

Finger Buttons

I decided on using Hall Effect Sensor (Hall Diode) in fingers.
At first I wanted to place magnets into all fingers on the other hand (or only one). Other places to hide the magnet are staff, top of hand or somewhere on snout.