diff --git a/platformio.ini b/platformio.ini index e4c2d7f..4237be9 100644 --- a/platformio.ini +++ b/platformio.ini @@ -8,6 +8,9 @@ ; Please visit documentation for the other options and examples ; https://docs.platformio.org/page/projectconf.html +[env] +lib_deps = HID-Project + [env:sparkfun_promicro16] platform = atmelavr board = sparkfun_promicro16 diff --git a/res/ProMicro16MHzv2.pdf b/res/ProMicro16MHzv2.pdf new file mode 100644 index 0000000..bab4180 Binary files /dev/null and b/res/ProMicro16MHzv2.pdf differ diff --git a/src/main.cpp b/src/main.cpp index 58b344c..74e9838 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,9 +1,44 @@ #include +#include + +#define NUM_KEYS 12 + +uint8_t const pin_lr{2}; +uint8_t const pin_rr{A3}; +uint8_t const pin_left{5}; +uint8_t const pin_up{3}; +uint8_t const pin_down{7}; +uint8_t const pin_right{6}; +uint8_t const pin_y{A2}; +uint8_t const pin_x{15}; +uint8_t const pin_b{A0}; +uint8_t const pin_a{14}; +uint8_t const pin_select{9}; +uint8_t const pin_start{10}; + +uint8_t const pin_array[] = {pin_lr, pin_rr, pin_left , pin_up , pin_right , pin_down , pin_y, pin_x, pin_b, pin_a, pin_select, pin_start}; +int const key_array[] = {'r' , 'l' , GAMEPAD_DPAD_LEFT, GAMEPAD_DPAD_UP, GAMEPAD_DPAD_RIGHT, GAMEPAD_DPAD_DOWN, 'y' , 'x' , 'b' , 'a' , KEY_RETURN, ' ' }; +bool states [] = {LOW , LOW , LOW , LOW , LOW , LOW , LOW , LOW , LOW , LOW , LOW , LOW }; void setup() { - // put your setup code here, to run once: + Gamepad.begin(); + for (size_t i = 0; i < NUM_KEYS; ++i) { + pinMode(pin_array[i], INPUT_PULLUP); + states[i] = digitalRead(pin_array[i]); + } } void loop() { - // put your main code here, to run repeatedly: + bool current_state; + for (size_t i = 0; i < NUM_KEYS; ++i) { + current_state = digitalRead(pin_array[i]); + if (current_state != states[i]) { + if (current_state == LOW) { + Gamepad.press(key_array[i]); + } else { + Gamepad.release(key_array[i]); + } + states[i] = current_state; + } + } } \ No newline at end of file