Klassiska joysticken till USB adapter (3 / 5 steg)

Steg 3: programvara

Följande Arduino skiss filen bör upprättas och sänds in till Arduino Leonardo eller Arduino Micro: JoystickToKeyboard.ino

ColecoVision / ADAM Joystick till PC tangentbord omvandlare
för 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;
Tangentbordet för
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 = '=';
Aktuell bildruta 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;
Sista bildrutan 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;
Linje Läs variabler
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 variabler
CONST int gcFrameLength = 10;
unsigned int gLoopsPerFrame = 0;
osignerade långa gLastFrameStart = 0;
Visar status för styrspaken.
void ShowJoystickStatus()
{
Debug Information
Serial.println(gLoopsPerFrame);
digitalWrite (gcFireMonitorPin, gLeftFireButton | gRightFireButton);
}
void SendKeyboardStateToPc()
{
om ((gLastNumPadValue! = "") & & (gLastNumPadValue! = gNumPadValue))
{
Keyboard.release(gLastNumPadValue);
}
om ((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)
{
om ((lastState == 1) & & (currentState == 0))
{
Keyboard.release(keyUsedForLine);
}
om ((lastState == 0) & & (currentState == 1))
{
Keyboard.Press(keyUsedForLine);
}
}
unsigned int CheckJoystickLine(byte pin)
{
Return (digitalRead(pin) == låg);
}
void CheckJoystickLines()
{
CONST int cLineDelay = 50;

Lägga Joystick i riktning läge
digitalWrite (gcModeAPin, hög);
digitalWrite (gcModeBPin, låg);
delayMicroseconds(cLineDelay);
gLeftFireCount += CheckJoystickLine(gcFirePin);
gUpCount += CheckJoystickLine(gcUpPin);
gDownCount += CheckJoystickLine(gcDownPin);
gLeftCount += CheckJoystickLine(gcLeftPin);
gRightCount += CheckJoystickLine(gcRightPin);
Lägga Joystick i knappsatsen läge
digitalWrite (gcModeAPin, låg);
digitalWrite (gcModeBPin, hög);
delayMicroseconds(cLineDelay);
gRightFireCount += CheckJoystickLine(gcFirePin);
gBit0Count += CheckJoystickLine(gcBit0Pin);
gBit1Count += CheckJoystickLine(gcBit1Pin);
gBit2Count += CheckJoystickLine(gcBit2Pin);
gBit3Count += CheckJoystickLine(gcBit3Pin);
}
void ResetFrameVariables()
{
Kopiera aktuell bildruta för att hålla ram
gLastNumPadValue = gNumPadValue;
gLastLeftFireButton = gLeftFireButton;
gLastRightFireButton = gRightFireButton;
gLastUp = gUp;
gLastDown = gDown;
gLastLeft = gLeft;
gLastRight = gRight;
gLastPurpleButton = gPurpleButton;
gLastBlueButton = gBlueButton;

Återställa bildräkneverket Loop
gLoopsPerFrame = 0;

Återställ Joysick staten
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];

Kontrollera om SuperAction Controller knappar.
om (keypadCode == 7)
{
gPurpleButton = 1;
}
om (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, produktionen);
pinMode (gcModeBPin, produktionen);
pinMode (gcFireMonitorPin, produktionen);
}
void loop()
{
osignerade långa currentTime;

currentTime = millis();
om (currentTime > = (gLastFrameStart + gcFrameLength))
{
Commit Joystick värde logik
DetermineJoystickValues();

Skicka värden till Monitor
ShowJoystickStatus();

Skicka Keyboad staten till PC
SendKeyboardStateToPc();

Återställ bildruta variabler
ResetFrameVariables();

Dags att börja nästa bildruta
gLastFrameStart = currentTime;
}
annat
{
Kontrollera värdet på de ingående linjerna och anteckna dem.
gLoopsPerFrame ++;
CheckJoystickLines();
}
}

Se Steg
Relaterade Ämnen

Ultimata klassiska spelkonsol Joystick till USB-Adapter

Denna artikel beskriver hur du använder en Arduino Leonardo eller Arduino Micro göra upp till tre klassiska konsolen joysticks (e.g. Atari 2600, ColecoVision och möjligen andra) tillgänglig till en modern dator (e.g. Fönstren PC, Mac eller Linux). De...

12V till USB-adapter \ 12v till 5v transformator (bra för bilar)

Detta kommer att visa dig hur man gör en 12v till USB (5v) adapter. Detta är mest uppenbara för 12v bil adaptrar, men överallt där du har 12v kan du använda den! Om du behöver 5v för något annat än USB, helt enkelt hoppa över steg om att lägga till U...

SATA till USB-adapter med Xbox dataöverföring kabel

detta instructable visar dig hur man förvandlar en vanlig Xbox dataöverföring kabel till en full SATA till USB-kabel.Extra bonus: det fungerar fortfarande som en Xbox dataöverföring kabel efter vi är igenom!Steg 1: Reservdelslista Behöver du:1. en 12...

Android G1 följetong till USB-kabel

lära sig hur man gör en Android G1 2.8V följetong till USB-seriell enhetsadapter (med en 3.3V ttl till USB-seriell adapter). Detta kan användas för kernel-felsökning/etc med datorn. Detta projekt bör inte kosta dig mer än 40 spänn om du redan har gru...

En USB till seriell Adapter för TTL (CP2102) mod till program ESP8266

Denna USB till seriell TTL styrelsen baserat på CP2102-chip, det inte ingen tillräckligt aktuell (400mA +) drivna ESP8266. Så jag kommer att fixa problemet.CP2102 Datablad: https://www.sparkfun.com/datasheets/IC/cp2102.pdfUppdatering: Jag gjorde en n...

USB OTG med en hona till hona adapter

allt tack går till::för denna intructable.Steg 1: USB-kabel Jag använde en USB-kabel som jag hade som kortslutning och inte en ny för detta instructable.verktyg som behövs:saxvass knivlöda järnelektriska krympa tubeOm du har en hona till hona adapter...

Lägga till USB(charging) till iPad VGA adapter

det är min första instructable, och jag ville dela med världen vilken port jag gjort denna gång. Då och då jag spelar med många saker uppgraderar sin funktionalitet. Men med den här jag vill dela. Förresten, ledsen om mitt språk är dåligt, men där, i...

Göra en ThinkPad tangentbord USB adapter med Arduino

Bland business klass bärbara datorer har ThinkPad de bästa tangentbord. Även med ändringen till ön stil tangentbord, skulle jag säga att ThinkPad tangentbord fortfarande slå alla konkurrenterna laptop fällt i departementet tangentbord. Till skillnad...

Extern slim IDE-enhet till USB power mod

God afton mina damer och herrar, idag kommer jag att täcka processen jag genomgick för att anpassa en inre 50pin IDE optisk enhet som ska användas som extern via USB, med hjälp av en gemensam, Billigt, kinesiska adapter och en 50pin-44pin mini IDE ad...

Ursprungliga Xbox Controller till USB Joystick

detta är min första! Instructable! Ja!!!nu vet jag att det har lite daterat... men jag fortfarande använda det eftersom... ja det fungerar och det är ganska lättoch som alla bra instructables det ger liv åt något som inte längre används!Detta är hur...

Kör mini PCI-e 3G-kort med USB - mini PCI-e till USB - enklaste sättet

här jag kommer att dela min experiment (kväll) för att konvertera MINI PCIe-kort för att kunna köra med USB-portSÅ LÅT OSS BÖRJAVad du behöver:Mini-PCI-e-kort - (alternativet GMT380 med GPS-funktion) är jag inte prova en annan typ / varumärke kort än...

LiPo till MicroUSB adapter

i väntan på min Raspberry Pi anländer jag har skapat en LiPo (litium Polymer) till Micro USB adapter. Denna adapter omvandlar kraften från en 2s – 4s LiPo till en regelbunden 5v. Detta är sedan utdata via en Micro USB att anslutas till en Raspberry P...

FTDI USB Adapter baserade DMX sändare med isolering

Upptäckte av en slump, när jag hade en FTDI USB till seriell adapter ansluten när du använder ett program för DMX och märkte att det sågs som en Enttec DMX USB-sändare enhet. Efter en del forskning i ämnet, jag började med en enkel SN75176 med en kvi...

Fedtro Vacuum Tube testare till USB-konvertering

Tja, jag i princip tog testare och bort batteriet distanserna ut som var föråldratPå grund av batteriet som var något mindre av en 5: e av den. Sedan tog jag en gammal telefon usb och usb adapter laddare och klippt mikro-USB-anslutningen ut utsätta i...

RC sändare till USB-spelkontroll med Arduino

Varför ska jag göra detta?När det gäller att flyga RC flygplan med hjälp av en simulator kan vara ett bra sätt att finslipa dina färdigheter under lågsäsongen eller ens förbereda för din första flygning. Den stora nackdelen att med hjälp av simulator...

DIY Bluetooth MicroPCI Express från Billigt £1 USB-adapter.

Detta är min första instructable, det kan vara användbara för andra medlemmar som vill göra sina egna billiga Bluetooth-lösning för sin laptop.Vissa människor kanske tänker, varför inte bara använda dongeln i USB-uttaget istället för att gå till allt...

Att lägga till USB-laddning port till 2009 Volkswagen Jetta 2009

jag ville lägga till USB-laddning funktionalitet till min bil så att batteriet inte skulle rinna när används navigering funktion på det och jag ville också frigöra min 12v power port/cigarett lättare.Jag bestämde mig den snyggaste lösningen var att e...

Konvertera Nintendo Joystick till USB-nav

jag hittade gamla nintendo joystick på mitt garage och jag väljer att konvertera till USB-hubb.Se till att du prenumerera på min YOUTUBE-kanal för mer awesome videor från macobt projekt!Prenumerera på min youtube-kanal:http://www.youtube.com/subscrip...

Att lägga till USB till kretsar med öppen källkod

Att lägga till USB kontroll/monitor/interagera med kretsar från en dator via USB är lätt.Följ bara dessa steg - det använder öppen hårdvara (bara ett enda chip - en mikrokontroller), eller alternativt kan du använda en färdiga StartUSB ombord från Mi...