uDraw arbela ordenagailuko sagu

Wii kontsolaren uDraw GameTableta sagu bihurtu Arduinorekin

Etxean aspaldian bazterturik dugun uDraw arbela armairuan ikusteaz asperturik, erabilera berri bat ematea otu zait, zergatik ez ordenagailuko sagu bihurtu? uDraw GameTablet-a Nintendo Wii kontsolaren hari gabeko agintearen hedapen bat da, bideo-jokoetarako arbel grafikoa. Arkatz moduko baten bidez arbelean idatzi eta marraztuz erabiltzen denez, saguaren erakuslea pantailan mugitzeko balio dezakeela pentsatu dut.

Muntaketa

Hauek dira ariketa honetan beharko ditudanak:

uDraw arbelak eta Arduino txartelak I2C protokoloa erabiliko dute informazioa elkar trukatzeko. Protokolo honek bi hari soilik behar ditu komunikaziorako, CLK eta SDA, hau da, ordulari seinalea eta datu transmisioa.

uDraw arbela eta Arduino txartela elkarrekin konektatzeko Nunchuk egokitzailea erabiltzea izango da erosoena, nolanahi ere, besterik ezean arbelaren konektorea ireki eta bere hariak Arduino plakaren sarrera/irteera interfazean konektatu ahal izango dira zuzenean. Kableatzea ondorengoa izango da:

uDrawNunchuk egokitzaileaArduino
Urdina-GND
Marroia+5Vcc
Berdead2/SDA
Horiac3/SCL
Oharra: Arduino txartelaren araberan, SDA eta SCL pinak beste batzuk izan ohi dira, gehienetan A4 eta A5.

muntaketa-irudia

Programaketa

Ondorengo urratsak Arduino txartela programatzea eskatzen du. Kodea Nintendo Extension Controller eta Mouse liburutegietan oinarrituko da eta Arduino IDE-aren laguntzaz txertatuko da.

#include 
uDrawTablet tablet;
#include

int responseDelay = 2; // Response delay of the mouse, in ms
int memX; // x coordinate memo
int memY; // y coordinate memo

void setup() {
    Serial.begin(115200);
    tablet.begin();

    while (!tablet.connect()) {
        Serial.println(“uDraw Tablet not detected!”);
        delay(1000);
    };

    // Initialize the Mouse library
    Mouse.begin();
}

void loop() {
    Serial.println(“—– uDraw Tablet as mouse —–”);
    
    boolean success = tablet.update(); // Get new data from the tablet

    if (!success) {
        Serial.println(“Controller disconnected!”);
        delay(1000);
        tablet.connect();
    }
    else {
        // Is the pen near the drawing surface?
        boolean detected = tablet.penDetected();

        if (detected == true) {
            Serial.print(“The pen is detected! It’s currently at “);
            Serial.println();

            // Read the X/Y coordinates (0-4095)
            int xCoordinate = tablet.penX();
            int yCoordinate = tablet.penY();

            // pen offset
            int distX = xCoordinate - memX;
            int distY = memY - yCoordinate;
 
            // Move the mouse
            Mouse.move(distX, distY, 0);
            delay(responseDelay);

            // Scroll Y
            if ((xCoordinate > 1900)&&(yCoordinate < 150)&&(tablet.penPressure()>90)){
                Mouse.move(0,0,-100); // bottom
            }
            if ((xCoordinate > 1900)&&(yCoordinate > 1400)&&(tablet.penPressure()>90)){
                Mouse.move(0,0,100); // top
            }
      
            // memorize coordinates
            memX = xCoordinate;
            memY = yCoordinate;
        }
        else if (detected == false) {
            Serial.println(“The pen is too far away!”);
        }

        // Read the Pressure (0-511)
        int pressure = tablet.penPressure();

        if (pressure > 600){
            Mouse.click(MOUSE_MIDDLE);
        }
    
        // Read a button (Lower, Upper)
        boolean buttonLower = tablet.buttonLower();
        boolean buttonUpper = tablet.buttonUpper();

        // Lower button
        Serial.print(“The lower button is “);
        if (buttonLower == true) {
            Serial.println(“pressed”);
            Mouse.click();
        }
        else if (buttonLower == false) {
            Serial.println(“released”);
        }

        // Upper button
        Serial.print(“The upper button is “);
        if (buttonUpper == true) {
            Serial.println(“pressed”);
            Mouse.click(MOUSE_RIGHT);
        }
        else if (buttonUpper == false) {
            Serial.println(“released”);
        }

        // Print all the values!
        tablet.printDebug();
        delay(100);  
    }
}

Ondo bidean, uDraw arbela ordenagailuko sagu moduan arituko da!