#include "Wire.h" #include "wiimote.h" #define CLOCK 1 // NES 4 #define LATCH 3 // NES 3 #define DATA 4 // NES 2 // Classic Controller Buttons int bdl = 0; // D-Pad Left state int bdr = 0; // D-Pad Right state int bdu = 0; // D-Pad Up state int bdd = 0; // D-Pad Down state int ba = 0; // A button state int bb = 0; // B button state int bx = 0; // X button state int by = 0; // Y button state int bl = 0; // L button state int br = 0; // R button state int bm = 0; // MINUS button state int bp = 0; // PLUS button state int bhome = 0; // HOME button state int bzl = 0; // ZL button state int bzr = 0; // ZR button state byte lx = 31; byte ly = 31; byte rx = 16; byte ry = 16; byte padStatus, nstat; byte padOldStatus; // Wiimote button data stream byte *stream_callback(byte *buffer) { wiimote_write_buffer(buffer, bdl, bdr, bdu, bdd, ba, bb, bx, by, bl, br, bm, bp, bhome, lx, ly, rx, ry, bzl, bzr); return buffer; } void setup() { pinMode(LATCH, OUTPUT); pinMode(CLOCK, OUTPUT); pinMode(DATA, INPUT); // Prepare wiimote communications wiimote_stream = stream_callback; wiimote_init(); padOldStatus = 0xff; padStatus = 0; } void loop() { padStatus = readData(); if(padStatus != padOldStatus) { nstat = ~padStatus; ba = nstat & 1; //A bb = (nstat >> 1) & 1; //B bm = (nstat >> 2) & 1; //Select bp = (nstat >> 3) & 1; //Start // 十字キー bdu = (nstat >> 4) & 1; //上 bdd = (nstat >> 5) & 1; //下 bdl = (nstat >> 6) & 1; //左 bdr = (nstat >> 7) & 1; //右 /* // アナログスティック if(nstat & 0x10) //上 ly = 0; else if(nstat & 0x20) //下 ly = 63; else ly = 31; if(nstat & 0x40) //左 lx = 0; else if(nstat & 0x80) //右 lx = 63; else lx = 31; */ padOldStatus = padStatus; } delay(50); } byte readData() { byte data; digitalWrite(LATCH, LOW); digitalWrite(CLOCK, LOW); digitalWrite(LATCH, HIGH); delayMicroseconds(12); digitalWrite(LATCH, LOW); for(int i=0; i<8; i++) { bitWrite(data, i, digitalRead(DATA)); digitalWrite(CLOCK, HIGH); delayMicroseconds(12); digitalWrite(CLOCK, LOW); delayMicroseconds(12); } return data; }