Klassieke Joystick naar USB-adapter (3 / 5 stap)

Stap 3: Software

De volgende Arduino Sketch bestand moet worden gecompileerd en geüpload naar de Arduino Leonardo of Arduino Micro: JoystickToKeyboard.ino

 // ColecoVision / ADAM Joystick to PC Keyboard Converter// for the Arduino Leonardo // 2014-08-24 //-----------------------------------------------------------------------------// Joystick Pins const byte gcFirePin = 2; const byte gcUpPin = 3; const byte gcDownPin = 4; const byte gcLeftPin = 5; const byte gcRightPin = 6; const byte gcModeAPin = 7; const byte gcModeBPin = 8; const byte gcFireMonitorPin = 13; const byte gcBit0Pin = 3; const byte gcBit2Pin = 4; const byte gcBit3Pin = 5; const byte gcBit1Pin = 6;// Keyboard Keys const char gcUpKey = KEY_UP_ARROW; const char gcDownKey = KEY_DOWN_ARROW; const char gcLeftKey = KEY_LEFT_ARROW; const char gcRightKey = KEY_RIGHT_ARROW; const char gcLeftFireKey = KEY_LEFT_ALT; const char gcRightFireKey = KEY_LEFT_CTRL; const char gcPurpleButtonKey = KEY_LEFT_SHIFT; const char gcBlueButtonKey = 'z'; const char gcAsteriskKey = '-'; const char gcPoundKey = '=';// Current Frame Joystick Status byte gLeftFireButton = 0; byte gRightFireButton = 0; byte gUp = 0; byte gDown = 0; byte gLeft = 0; byte gRight = 0; char gNumPadValue = ' '; byte gPurpleButton = 0; byte gBlueButton = 0; byte gBit0 = 0; byte gBit1 = 0; byte gBit2 = 0; byte gBit3 = 0;// Last Frame Joystick Status byte gLastLeftFireButton = 0; byte gLastRightFireButton = 0; byte gLastUp = 0; byte gLastDown = 0; byte gLastLeft = 0; byte gLastRight = 0; char gLastNumPadValue = ' '; byte gLastPurpleButton = 0; byte gLastBlueButton = 0;// Line Read Variables const unsigned int gcThreashold = 4; unsigned int gLeftFireCount = 0; unsigned int gRightFireCount = 0; unsigned int gUpCount = 0; unsigned int gDownCount = 0; unsigned int gLeftCount = 0; unsigned int gRightCount = 0; unsigned int gBit0Count = 0; unsigned int gBit1Count = 0; unsigned int gBit2Count = 0; unsigned int gBit3Count = 0;// Frame Variables const int gcFrameLength = 10; unsigned int gLoopsPerFrame = 0; unsigned long gLastFrameStart = 0;// Shows the status of the joystick. void ShowJoystickStatus() { // Debug Information // Serial.println(gLoopsPerFrame); digitalWrite(gcFireMonitorPin, gLeftFireButton | gRightFireButton); }void SendKeyboardStateToPc() { if ((gLastNumPadValue != ' ') && (gLastNumPadValue != gNumPadValue)) { Keyboard.release(gLastNumPadValue); } if ((gNumPadValue != ' ') && (gLastNumPadValue != gNumPadValue)) { Keyboard.press(gNumPadValue); } SendLineStateToPc(gLastLeftFireButton, gLeftFireButton, gcLeftFireKey); SendLineStateToPc(gLastRightFireButton, gRightFireButton, gcRightFireKey); SendLineStateToPc(gLastUp, gUp, gcUpKey); SendLineStateToPc(gLastDown, gDown, gcDownKey); SendLineStateToPc(gLastLeft, gLeft, gcLeftKey); SendLineStateToPc(gLastRight, gRight, gcRightKey); SendLineStateToPc(gLastPurpleButton, gPurpleButton, gcPurpleButtonKey); SendLineStateToPc(gLastBlueButton, gBlueButton, gcBlueButtonKey); }void SendLineStateToPc(byte lastState, byte currentState, char keyUsedForLine) { if ((lastState == 1) && (currentState == 0)) { Keyboard.release(keyUsedForLine); } if ((lastState == 0) && (currentState == 1)) { Keyboard.press(keyUsedForLine); } }unsigned int CheckJoystickLine(byte pin) { return (digitalRead(pin) == LOW); }void CheckJoystickLines() { const int cLineDelay = 50; // Put Joystick in Direction Mode digitalWrite(gcModeAPin, HIGH); digitalWrite(gcModeBPin, LOW); delayMicroseconds(cLineDelay); gLeftFireCount += CheckJoystickLine(gcFirePin); gUpCount += CheckJoystickLine(gcUpPin); gDownCount += CheckJoystickLine(gcDownPin); gLeftCount += CheckJoystickLine(gcLeftPin); gRightCount += CheckJoystickLine(gcRightPin); // Put Joystick in Keypad Mode digitalWrite(gcModeAPin, LOW); digitalWrite(gcModeBPin, HIGH); delayMicroseconds(cLineDelay); gRightFireCount += CheckJoystickLine(gcFirePin); gBit0Count += CheckJoystickLine(gcBit0Pin); gBit1Count += CheckJoystickLine(gcBit1Pin); gBit2Count += CheckJoystickLine(gcBit2Pin); gBit3Count += CheckJoystickLine(gcBit3Pin); }void ResetFrameVariables() { // Copy Current Frame to Last Frame gLastNumPadValue = gNumPadValue; gLastLeftFireButton = gLeftFireButton; gLastRightFireButton = gRightFireButton; gLastUp = gUp; gLastDown = gDown; gLastLeft = gLeft; gLastRight = gRight; gLastPurpleButton = gPurpleButton; gLastBlueButton = gBlueButton; // Reset Frame Loop Counter gLoopsPerFrame = 0; // Reset Joysick State gLeftFireCount = 0; gLeftFireButton = 0; gRightFireCount = 0; gRightFireButton = 0; gUpCount = 0; gUp = 0; gDownCount = 0; gDown = 0; gLeftCount = 0; gLeft = 0; gRightCount = 0; gRight = 0; gBit0Count = 0; gBit0 = 0; gBit1Count = 0; gBit1 = 0; gBit2Count = 0; gBit2 = 0; gBit3Count = 0; gBit3 = 0; gNumPadValue = ' '; gPurpleButton = 0; gBlueButton = 0; }byte DetermineJoystickLineValue(unsigned int pressCount) { return (pressCount >= gcThreashold); }void DetermineJoystickValues() { const char cKeypadValueLookup[16] = { ' ', '6', '1', '3', '9', '0', gcAsteriskKey, ' ', '2', gcPoundKey, '7', ' ', '5', '4', '8', ' '}; gLeftFireButton = DetermineJoystickLineValue(gLeftFireCount); gRightFireButton = DetermineJoystickLineValue(gRightFireCount); gUp = DetermineJoystickLineValue(gUpCount); gDown = DetermineJoystickLineValue(gDownCount); gLeft = DetermineJoystickLineValue(gLeftCount); gRight = DetermineJoystickLineValue(gRightCount); gBit0 = DetermineJoystickLineValue(gBit0Count); gBit1 = DetermineJoystickLineValue(gBit1Count); gBit2 = DetermineJoystickLineValue(gBit2Count); gBit3 = DetermineJoystickLineValue(gBit3Count); int keypadCode = (gBit3 << 3) + (gBit2 << 2) + (gBit1 << 1) + gBit0; gNumPadValue = cKeypadValueLookup[keypadCode]; // Check for SuperAction Controller Buttons. if (keypadCode == 7) { gPurpleButton = 1; } if (keypadCode == 11) { gBlueButton = 1; } }void setup() { // Setup Serial Monitor // Serial.begin(19200); // Setup Joystick Pins pinMode(gcFirePin, INPUT_PULLUP); pinMode(gcUpPin, INPUT_PULLUP); pinMode(gcDownPin, INPUT_PULLUP); pinMode(gcLeftPin, INPUT_PULLUP); pinMode(gcRightPin, INPUT_PULLUP); pinMode(gcModeAPin, OUTPUT); pinMode(gcModeBPin, OUTPUT); pinMode(gcFireMonitorPin, OUTPUT); }void loop() { unsigned long currentTime; currentTime = millis(); if (currentTime >= (gLastFrameStart + gcFrameLength)) { // Do Joystick Value Commit Logic DetermineJoystickValues(); // Send Values to Monitor ShowJoystickStatus(); // Send Keyboad State to the PC SendKeyboardStateToPc(); // Reset Frame Variables ResetFrameVariables(); // Time to start next frame gLastFrameStart = currentTime; } else { // Check the value of the input lines and make note of them. gLoopsPerFrame++; CheckJoystickLines(); } } 

Gerelateerde Artikelen

Ultieme klassieke Game Console Joystick naar-USB-Adapter

Ultieme klassieke Game Console Joystick naar-USB-Adapter

In dit artikel wordt beschreven hoe u met een Arduino Leonardo of Arduino Micro maximaal drie klassieke console joysticks (bijvoorbeeld Atari 2600, ColecoVision, en eventueel anderen) ter beschikking stellen van een moderne computer (bijvoorbeeld Win
12V naar USB adapter \ 12v naar 5v transformator (ideaal voor auto's)

12V naar USB adapter \ 12v naar 5v transformator (ideaal voor auto's)

Dit zal u tonen hoe maak je een 12v naar USB (5v) adapter. Het duidelijkste gebruik hiervan is voor 12v auto adapters, maar overal heb je 12v kunt u! Als u voor iets anders dan de USB 5v nodig, simpelweg wip naar de stoep over het toevoegen van de US
SATA naar USB adapter met behulp van de kabel van de overdracht van de gegevens van Xbox

SATA naar USB adapter met behulp van de kabel van de overdracht van de gegevens van Xbox

dit instructable zal u tonen hoe te transformeren van een gewone Xbox gegevens overdracht kabel in een volledige SATA naar USB-kabel.Extra bonus: het werkt nog steeds als een Xbox-kabel voor de gegevensoverdracht van gegevens als we zijn door!Stap 1:
Android G1 seriële naar USB-kabel

Android G1 seriële naar USB-kabel

leren hoe te maken van een Android G1 2.8v seriële naar USB seriële adapter van het apparaat (met behulp van een 3.3V ttl naar usb seriële adapter). Dit kan worden gebruikt voor kernel debugging/etc met uw computer. Dit project moet niet kosten u mee
Originele Xbox Controller naar USB Joystick

Originele Xbox Controller naar USB Joystick

dit is mijn eerste! instructable! Ja!!!nu ik weet het heeft een beetje gedateerd... maar ik nog steeds gebruiken omdat... goed het werkt en het is vrij gemakkelijken zoals alle goede instructables brengt het leven aan iets dat niet langer wordt gebru
Maak een ThinkPad toetsenbord USB-adapter met Arduino

Maak een ThinkPad toetsenbord USB-adapter met Arduino

Onder de business klasse laptops hebben ThinkPads de beste toetsenborden. Zelfs met de wijziging eiland stijl toetsenborden, zou ik zeggen dat ThinkPad toetsenborden nog verslaan alle haar laptop concurrenten handen naar beneden in de afdeling van he
FTDI USB Adapter gebaseerd DMX zender met isolatie

FTDI USB Adapter gebaseerd DMX zender met isolatie

Bij toeval, ontdekt toen ik had een FTDI USB naar seriële adapter aangesloten tijdens het gebruik van een DMX-programma en merkte dat het werd gezien als een Enttec DMX USB zender apparaat. Na wat onderzoek over het onderwerp, ik begon met een eenvou
100% werken van de USB-adapter voor creatieve ZEN V plus MP3 spelers opladen

100% werken van de USB-adapter voor creatieve ZEN V plus MP3 spelers opladen

hier zal ik beschrijven wat je echt nodig om de kosten van uw ZEN V plus met elke 5VDC-macht leveren!1. je moet de volgende onderdelen:-een Mini-USB-aansluiting met 5 solderen pinnen binnen van een standaard USB-A naar Mini-USB-kabel (zie afbeelding
LiPo naar MicroUSB adapter

LiPo naar MicroUSB adapter

In afwachting van mijn Raspberry Pi aankomen die ik heb gemaakt een LiPo (Lithium polymeer) naar Micro USB adapter. Deze adapter converteert de kracht van een 2s-4s LiPo naar een regelmatige 5v. Dit is vervolgens output via een Micro-USB worden aange
Fedtro Vacuum Tube tester naar USB-conversie

Fedtro Vacuum Tube tester naar USB-conversie

Nou, ik in feite nam de tester en verwijderd van de batterij spacers dat waren verouderdVanwege de grootte van de batterij die iets kleiner door een 5e hiervan was. Ik nam een oude telefoon usb en usb adapter oplader en de micro USB-aansluiting af bl
DIY telefoon naar statief-Adapter

DIY telefoon naar statief-Adapter

Telefoons nergens in de buurt van de kwaliteit van de foto's die professionele camera's, maar dat is naast het punt. Ze zijn bedoeld om onverwachte leven momenten, die men op basis van dag tot dag tegenkomen kan. Telefoons zijn zo nuttig, aangezien v
RCA naar JACK adapter

RCA naar JACK adapter

How to make de eenvoudigste RCA naar Jack adapter voor minder dan $14!Stap 1: Materiaal dat nodig is:1: Circuit bord (geschuurd)2: RCA-pin-stekker1: standaard Penaansluiting4: draad (2 rode en 2 zwarte)1: soldererStap 2: Voeg de component op printpla
USB-Adapter voor XBox beter

USB-Adapter voor XBox beter

in de loop van maken en onderhouden van een modded (of voorraad) XBox, het is vaak handig om bestanden van PC naar XBox te kunnen. U kunt een actie Replay en XBox-geheugenkaart; echter, de kaarten hebben beperkte opslagruimte, en de actie replay is p
Mini PCI-e-3G-kaart met USB - mini PCI-e naar USB - gemakkelijkste manier

Mini PCI-e-3G-kaart met USB - mini PCI-e naar USB - gemakkelijkste manier

hier zal ik het delen van mijn experiment (gisteravond) als u wilt converteren van de MINI-PCIe-kaart te kunnen draaien met de USB-poortLATEN WE BEGINNENWat u zult moeten:Mini PCI-e kaarten - (optie GMT380 met GPS-functie) ik ben niet proberen een an