Bilen kontrollerade med PS3-handkontrollen (4 / 5 steg)
Steg 4: Nu vi satt den registeransvarige att ge input!
Vi vill att den registeransvarige för att kunna ge input när som helst till arduino och så använder vi följande kod:#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};
/ * Ange PS3-handkontrollen att skicka rapporter * /
för (jag = 0; jag < 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);
om (rcode) {
Serial.Print ("Ange rapport:");
Serial.println (rcode, HEX);
While(1); Stanna
}
Om du känner dig som gör lite extra arbete bara för att vara cool, kan du ange den LED 1 på ps3-handkontrollen på. Detta ser ut mer pro sedan när du ansluter handkontrollen till en ps3, lampan tänds, men än estetik, detta göra inte mycket. (Obs: du kan också göra den registeransvarige rumble med arduino, ganska cool!) Här är koden för 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
};
/ * Ange PS3-handkontrollen LED 1 på * /
för (jag = 0; jag < 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);
om (rcode) {
Serial.Print ("Ange rapport:");
Serial.println (rcode, HEX);
While(1); Stanna
}
Viktigare, behöver arduino för att bearbeta signalerna från registeransvarige. Använd denna kod:
void PS3_poll (void)
{
byte rcode = 0; returkod
/ * poll PS3 * /
RCODE = Usb.inTransfer (PS3_ADDR, ep_record [INPUT_PIPE] .epAddr, PS3_01_REPORT_LEN, buf);
om (rcode! = 0) {
hemkomst.
}
process_report();
hemkomst.
}