Все оказалось так просто - даже нечего описывать.... Монтажная плата: Скетч: Код (C++): #define DATA 7 #define LATCH 2 #define CLOCK 4 #define CLKUS 1 #define X A1 #define Y A2 #define R A3 #include <Joystick.h> byte dataButton; void setup() { pinMode(DATA,INPUT); pinMode(LATCH,OUTPUT); pinMode(CLOCK,OUTPUT); Joystick.begin(); } void loop() { int x, y, r; dataButton = 0; // считываем текущее значение джойстика и руля x = analogRead(X); y = analogRead(Y); r = analogRead(R); // читаем состояние кнопок на сдвиговом регистре digitalWrite(LATCH,HIGH); // Parallel mode for (int i=7; i>=0; i--) { digitalWrite(CLOCK,HIGH); delayMicroseconds(CLKUS); dataButton |= (digitalRead(DATA) ? (1<<i) : 0); digitalWrite(CLOCK,LOW); delayMicroseconds(CLKUS); if (i==7) digitalWrite(LATCH,LOW); // Serial Mode } //присваиваем кнопкам игрового контроллера значения прочитанные из регистра Joystick.setButton(0, bitRead(dataButton,4)); //Green Joystick.setButton(1, bitRead(dataButton,5)); //Red Joystick.setButton(2, bitRead(dataButton,6)); //White Joystick.setButton(3, bitRead(dataButton,0)); //Blue Joystick.setButton(4, bitRead(dataButton,1)); //Red Joystick.setButton(5, bitRead(dataButton,2)); //Yellow Joystick.setButton(6, bitRead(dataButton,3)); //Red Joystick.setButton(7, bitRead(dataButton,7)); //Joy y = map(y, 0, 1023, 127, -127); //Ось Y /газ - тормоз Joystick.setYAxis(y); r = map(r, 0, 1023, 127, -127); Joystick.setXAxis(r); //Ось Х /руль delay(50); }