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 arbela
- Arduino Pro Micro txartela
- Nunchuk I2C egokigailua
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:
uDraw | Nunchuk egokitzailea | Arduino |
---|---|---|
Urdina | - | GND |
Marroia | + | 5Vcc |
Berdea | d | 2/SDA |
Horia | c | 3/SCL |
Oharra: Arduino txartelaren araberan, SDA eta SCL pinak beste batzuk izan ohi dira, gehienetan A4 eta A5.
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!
Comments
No comments yet. Be the first to react!