#include #include #define RapidFireTableSize 40 int loopCount = 0; int state = 0; int rapidFireTable[RapidFireTableSize]; int index = 0; int val = 1; int prevVal = 1; struct arrow { int pinNumber; int state; }; struct ButtonInfo { int pinNumber; bool prev; bool current; Button buttonSymbol; }; struct arrow arrowTable[4]; #define ButtonInfoTableSize 9 struct ButtonInfo buttonInfoTable[ButtonInfoTableSize]; void perms() { if(val == 0){ if (rapidFireTable[index] == 1){ SwitchControlLibrary().PressButtonA(); } if (rapidFireTable[index] == 2){ SwitchControlLibrary().ReleaseButtonA(); } } index = (index + 1) % RapidFireTableSize; } void setupButton(ButtonInfo *but, int pinNumber, Button buttonSymbol) { but->pinNumber = pinNumber; but->buttonSymbol = buttonSymbol; pinMode(pinNumber, INPUT_PULLUP); but->prev = 1; but->current = 1; } void setup() { rapidFireTable[0] = 1; rapidFireTable[RapidFireTableSize/2] = 2; SwitchControlLibrary(); MsTimer2::set(1, perms); MsTimer2::start(); setupButton(&(buttonInfoTable[0]), 3, Button::B); setupButton(&(buttonInfoTable[1]), 4, Button::X); setupButton(&(buttonInfoTable[2]), 5, Button::Y); setupButton(&(buttonInfoTable[3]), 16, Button::L); setupButton(&(buttonInfoTable[4]), 10, Button::R); setupButton(&(buttonInfoTable[5]), 15, Button::PLUS); setupButton(&(buttonInfoTable[6]), 18, Button::HOME); setupButton(&(buttonInfoTable[7]), 19, Button::CAPTURE); setupButton(&(buttonInfoTable[8]), 14, Button::MINUS); pinMode(2, INPUT_PULLUP); arrowTable[0].pinNumber = 6; arrowTable[1].pinNumber = 7; arrowTable[2].pinNumber = 8; arrowTable[3].pinNumber = 9; for (int i=0; i<4; i++){ pinMode(arrowTable[i].pinNumber, INPUT_PULLUP); arrowTable[i].state = 1; } } void handleButtonInput(ButtonInfo *but){ but->current = digitalRead(but->pinNumber); if(but->prev == 1 && but->current ==0 ){ SwitchControlLibrary().PressButton(but->buttonSymbol); } else if(but->prev == 0 && but->current ==1 ) { SwitchControlLibrary().ReleaseButton(but->buttonSymbol); } but->prev = but->current; } void loop() { val = digitalRead(2); if(prevVal == 1 && val == 0){ SwitchControlLibrary().PressButtonA(); index = 1; } else if(prevVal == 0 && val == 1){ SwitchControlLibrary().ReleaseButtonA(); } prevVal = val; for(int i=0; i(Hat::TOP)); } else if(arrowTable[2].state == 0){ SwitchControlLibrary().MoveHat(static_cast(Hat::BOTTOM)); } else if(arrowTable[1].state == 0){ SwitchControlLibrary().MoveHat(static_cast(Hat::LEFT)); } else if(arrowTable[3].state == 0){ SwitchControlLibrary().MoveHat(static_cast(Hat::RIGHT)); } else{ SwitchControlLibrary().MoveHat(static_cast(Hat::CENTER)); } }