Stap 4: Nu we stel de controller om input te geven!
Wij willen de controller te kunnen te allen tijde aan de arduino zijn inbreng en dus we de volgende code gebruiken:#define PS3_F4_REPORT_LEN 4
#define HID_REPORT_FEATURE 3
#define PS3_F4_REPORT_ID 0xF4
prog_char feature_F4_report [PROGMEM] = {0x42, 0x0c, 0x00, 0x00};
/ * Stel de PS3-controller voor het verzenden van rapporten * /
voor (ik = 0; ik < ps3_F4_REPORT_LEN; i ++) buf [i] = pgm_read_byte_near (feature_F4_report + i);
RCODE = Usb.setReport (PS3_ADDR, ep_record [CONTROL_PIPE] .epAddr, PS3_F4_REPORT_LEN, PS3_IF, HID_REPORT_FEATURE, PS3_F4_REPORT_ID, buf);
Als (rcode) {}
Serial.Print ("verslag fout instellen:");
Serial.println (rcode, HEX);
while(1); Stop
}
Als je voelt je als het doen van een beetje extra werk gewoon om af te koelen, kunt u ook de LED 1 op de ps3 controller instellen op. Dit ziet er meer pro sinds wanneer u de controller op een ps3 aansluit, de LED wordt ingeschakeld, maar dan esthetiek, dit niet veel te doen. (Opmerking: ook kunt u de controller rumble met de arduino, vrij koel!) Hier is de code voor de LED:
#define PS3_01_REPORT_LEN 48
#define HID_REPORT_OUTPUT 2
#define PS3_01_REPORT_ID 0x01
prog_char output_01_report [PROGMEM] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x02, 0xff, 0x27, 0x10, 0x00, 0x32, 0xff,
0x27, 0x10, 0x00, 0x32, 0xff, 0x27, 0x10, 0x00,
0x32, 0xff, 0x27, 0x10, 0x00, 0x32, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
/ * Stel de PS3 controller LED 1 op * /
voor (ik = 0; ik < ps3_01_REPORT_LEN; i ++) buf [i] = pgm_read_byte_near (output_01_report + i);
RCODE = Usb.setReport (PS3_ADDR, ep_record [CONTROL_PIPE] .epAddr, PS3_01_REPORT_LEN, PS3_IF, HID_REPORT_OUTPUT, PS3_01_REPORT_ID, buf);
Als (rcode) {}
Serial.Print ("verslag fout instellen:");
Serial.println (rcode, HEX);
while(1); Stop
}
Wat nog belangrijker is, moet de arduino verwerken de signalen van de controller. Gebruik deze code:
VOID PS3_poll (void)
{
byte rcode = 0; retourcode
/ * poll PS3 * /
RCODE = Usb.inTransfer (PS3_ADDR, ep_record [INPUT_PIPE] .epAddr, PS3_01_REPORT_LEN, buf);
Als (rcode! = 0) {}
terugkeer;
}
process_report();
terugkeer;
}