137 lines
3 KiB
Text
137 lines
3 KiB
Text
|
|
#undef DEBUG
|
|
|
|
#define NUM_BUTTONS 40 // you don't need to change this value
|
|
#define NUM_AXES 8 // 6 axes to UNO, and 8 to MEGA. If you are using UNO, don't need to change this value.
|
|
|
|
typedef struct joyReport_t {
|
|
int16_t axis[NUM_AXES];
|
|
uint8_t button[(NUM_BUTTONS + 7) / 8]; // 8 buttons per byte
|
|
} joyReport_t;
|
|
|
|
joyReport_t joyReport;
|
|
|
|
uint8_t btn[12];
|
|
int fulloff = 0;
|
|
void setup(void);
|
|
void loop(void);
|
|
void setButton(joyReport_t *joy, uint8_t button);
|
|
void clearButton(joyReport_t *joy, uint8_t button);
|
|
void sendJoyReport(joyReport_t *report);
|
|
|
|
|
|
void setup()
|
|
{
|
|
//set pin to input Button
|
|
for ( int portId = 02; portId < 13; portId ++ )
|
|
{
|
|
pinMode( portId, INPUT_PULLUP);
|
|
}
|
|
Serial.begin(115200);
|
|
delay(200);
|
|
|
|
|
|
for (uint8_t ind = 0; ind < 8; ind++) {
|
|
joyReport.axis[ind] = ind * 1000;
|
|
}
|
|
for (uint8_t ind = 0; ind < sizeof(joyReport.button); ind++) {
|
|
joyReport.button[ind] = 0;
|
|
}
|
|
}
|
|
|
|
// Send an HID report to the USB interface
|
|
void sendJoyReport(struct joyReport_t *report)
|
|
{
|
|
#ifndef DEBUG
|
|
Serial.write((uint8_t *)report, sizeof(joyReport_t));
|
|
#else
|
|
// dump human readable output for debugging
|
|
for (uint8_t ind = 0; ind < NUM_AXES; ind++) {
|
|
Serial.print("axis[");
|
|
Serial.print(ind);
|
|
Serial.print("]= ");
|
|
Serial.print(report->axis[ind]);
|
|
Serial.print(" ");
|
|
}
|
|
Serial.println();
|
|
for (uint8_t ind = 0; ind < NUM_BUTTONS / 8; ind++) {
|
|
Serial.print("button[");
|
|
Serial.print(ind);
|
|
Serial.print("]= ");
|
|
Serial.print(report->button[ind], HEX);
|
|
Serial.print(" ");
|
|
}
|
|
Serial.println();
|
|
#endif
|
|
}
|
|
|
|
// turn a button on
|
|
void setButton(joyReport_t *joy, uint8_t button)
|
|
{
|
|
uint8_t index = button / 8;
|
|
uint8_t bit = button - 8 * index;
|
|
|
|
joy->button[index] |= 1 << bit;
|
|
}
|
|
|
|
// turn a button off
|
|
void clearButton(joyReport_t *joy, uint8_t button)
|
|
{
|
|
uint8_t index = button / 8;
|
|
uint8_t bit = button - 8 * index;
|
|
|
|
joy->button[index] &= ~(1 << bit);
|
|
}
|
|
|
|
/*
|
|
Read Digital port for Button
|
|
Read Analog port for axis
|
|
*/
|
|
void loop()
|
|
{
|
|
|
|
for (int bt = 1; bt < 13; bt ++)
|
|
{
|
|
// btn[bt] = digitalRead(bt + 1);
|
|
btn[bt] = LOW;
|
|
}
|
|
|
|
for (int on = 01; on < 13; on++)
|
|
{
|
|
if (btn[on] == LOW)
|
|
{
|
|
setButton(&joyReport, on + 16);
|
|
|
|
delay(1);
|
|
}
|
|
for (int on = 01; on < 13; on++)
|
|
{
|
|
if (btn[on] == HIGH)
|
|
{
|
|
clearButton(&joyReport, on + 16);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
//for (uint8_t axis = 0; axis < 1; axis++) {
|
|
// joyReport.axis[axis] = map(analogRead(axis), 0, 1023, -32768, 32767 );
|
|
//}
|
|
|
|
joyReport.axis[0] = 0;
|
|
joyReport.axis[1] = 0;
|
|
joyReport.axis[2] = map(analogRead(2), 0, 1023, -32768, 32767 );
|
|
joyReport.axis[3] = map(analogRead(3), 0, 1023, -32768, 32767 );
|
|
joyReport.axis[4] = map(analogRead(4), 0, 1023, -32768, 32767 );
|
|
joyReport.axis[5] = 0;
|
|
joyReport.axis[6] = 0;
|
|
joyReport.axis[7] = 0;
|
|
joyReport.axis[8] = 0;
|
|
|
|
//Send Data to HID
|
|
sendJoyReport(&joyReport);
|
|
|
|
delay(35);
|
|
fulloff = 0;
|
|
}
|