3
« : 03 Март 2025, 12:55:13 »
В тиньку85 лезет 8 кБ... По крайней мере сейчас реализация HID вмещается и еще вагон места остается. Прикол в том, что все типа работает, но работает абсолютно неиграбельно, уже неделю гуглю, понять чужие исходники к сожалению очень сложно, нейросети выдают дичь, а я стараюсь разобраться )
Добавлено позже:
Все, разобрался. Вот код кому надо, джой подключать напрямую к плате дигиспарк. Для денди наверное проще некуда и никакого геморроя со сборкой громадных плат. 5 проводов всего.
#include <DigiJoystick.h>
#define DATA_PIN 0 // Выход 4021 (Q7)
#define LATCH_PIN 1 // Strobe (Latch) (PIN 12 на 4021)
#define CLOCK_PIN 2 // Clock (PIN 10 на 4021)
void setup() {
pinMode(LATCH_PIN, OUTPUT);
pinMode(CLOCK_PIN, OUTPUT);
pinMode(DATA_PIN, INPUT);
digitalWrite(LATCH_PIN, HIGH);
digitalWrite(CLOCK_PIN, HIGH);
//Serial.begin(9600); // Включаем отладку
}
void loop() {
uint8_t buttons = readNESController();
// Выводим состояние кнопок в Serial Monitor
//Serial.print("Buttons: ");
// Serial.println(buttons, BIN); // Вывод состояния кнопок в двоичном формате
DigiJoystick.setButtons(buttons, 0);
DigiJoystick.update();
delay(5);
}
uint8_t readNESController() {
uint8_t state = 0;
digitalWrite(LATCH_PIN, HIGH);
delayMicroseconds(5);
digitalWrite(LATCH_PIN, LOW);
delayMicroseconds(5);
for (uint8_t i = 0; i < 8; i++) {
digitalWrite(CLOCK_PIN, LOW); // Начинаем такт
delayMicroseconds(5);
if (digitalRead(DATA_PIN)) {
state |= (1 << i); // Считываем бит
}
digitalWrite(CLOCK_PIN, HIGH); // Поднимаем такт
delayMicroseconds(5);
}
return ~state; // НЕ инвертируем, чтобы проверить, что приходит
}
Дата, латх и клок к соответствующим пинам дигиспарка, легко видно из кода. Инпут лаг на глаз не видно, ну и сойдет мне ))