Με την χρήση της βιβλιοθήκης του ποντικιού, σας δίνεται η δυνατότητα να ελέγχετε τον κέρσορα της οθόνης του υπολογιστή σας. Αυτό μπορεί να γίνει μέσω μιας πλακέτας του Arduino Leonardo, Micro, ή Due. Το συγκεκριμένο παράδειγμα, χρησιμοποιεί 5 μπουτόν για την υλοποίηση αυτής της κίνησης. Συγκεκριμένα, τα τέσσερα από αυτά λειτουργούν ως κουμπιά κατεύθυνσης. Δηλαδή, επάνω, κάτω, αριστερά και δεξιά. Ενώ, το πέμπτο μπουτόν χρησιμεύει για το αριστερό κλικ του ποντικιού.

Η κίνηση του δρομέα μέσα από το Arduino είναι πάντα σχετική. Αυτό σημαίνει ότι, με την κάθε ανάγνωση της εισόδου, η θέση του δρομέα θα ενημερώνεται σε σχέση με την τρέχουσα θέση του.

Επομένως, κάθε φορά που θα πατήσουμε ένα από τα πλήκτρα κατεύθυνσης, τότε το Arduino θα μετακινήσει το ποντίκι προς την αντίστοιχη κατεύθυνση.

Όπως αναφέραμε, το πέμπτο μπουτόν χρησιμεύει για τον έλεγχο του αριστερού κλικ του ποντικιού. Συνεπώς, όταν κρατάμε πατημένο αυτό το μπουτόν, τότε η πλακέτα του Arduino θα ενημερώσει κατάλληλα τον υπολογιστή μας. Ακριβώς το ίδιο θα συμβεί στην περίπτωση που αφήσουμε το συγκεκριμένο μπουτόν.

Αποσαφήνιση: Να έχετε υπόψη σας ότι όταν χρησιμοποιείτε την εντολή Mouse.move(), τότε το Arduino θα πάρει τον έλεγχο του κέρσορα του υπολογιστή σας. Έτσι, πρώτα από όλα, βεβαιωθείτε ότι δεν θα χάσετε τον έλεγχο του υπολογιστή σας κατά την εκτέλεση κώδικα που εμπεριέχει αυτήν την συνάρτηση. Αυτό μπορεί να πραγματοποιηθεί αν δημιουργήσετε έναν ελεγκτή, προτού να καλέσετε την συνάρτηση Mouse.move().

Απαιτούμενος εξοπλισμός

– Πλακέτα του Arduino Leonardo, Micro ή Due.
– Πέντε στιγμιαία μπουτόν.
– Πέντε αντιστάσεις των 10k ohm.
– Καλώδια σύνδεσης.
– Breadboard.

Κύκλωμα

Συνδέστε την πλακέτα σας με τον υπολογιστή μέσω ενός καλωδίου micro-USB. Σημειωτέον ότι, τα μπουτόν πρέπει να είναι συνδεδεμένα με τις ψηφιακές εισόδους από 2 έως 6. Βεβαιωθείτε ότι, χρησιμοποιείτε τις αντιστάσεις των 10k ohm ως αντιστάσεις καθόδου.

 

 

 

 

 

Σχηματικά

 

 

 

 

 

Κώδικας

/*
  ButtonMouseControl

 For Leonardo and Due boards only.

 Controls the mouse from five pushbuttons on an Arduino Leonardo, Micro or Due.

 Hardware:
 * 5 pushbuttons attached to D2, D3, D4, D5, D6


 The mouse movement is always relative. This sketch reads
 four pushbuttons, and uses them to set the movement of the mouse.

 WARNING:  When you use the Mouse.move() command, the Arduino takes
 over your mouse!  Make sure you have control before you use the mouse commands.

 created 15 Mar 2012
 modified 27 Mar 2012
 by Tom Igoe

 this code is in the public domain

 */

#include "Mouse.h"

// set pin numbers for the five buttons:
const int upButton = 2;
const int downButton = 3;
const int leftButton = 4;
const int rightButton = 5;
const int mouseButton = 6;

int range = 5;              // output range of X or Y movement; affects movement speed
int responseDelay = 10;     // response delay of the mouse, in ms


void setup() {
  // initialize the buttons' inputs:
  pinMode(upButton, INPUT);
  pinMode(downButton, INPUT);
  pinMode(leftButton, INPUT);
  pinMode(rightButton, INPUT);
  pinMode(mouseButton, INPUT);
  // initialize mouse control:
  Mouse.begin();
}

void loop() {
  // read the buttons:
  int upState = digitalRead(upButton);
  int downState = digitalRead(downButton);
  int rightState = digitalRead(rightButton);
  int leftState = digitalRead(leftButton);
  int clickState = digitalRead(mouseButton);

  // calculate the movement distance based on the button states:
  int  xDistance = (leftState - rightState) * range;
  int  yDistance = (upState - downState) * range;

  // if X or Y is non-zero, move:
  if ((xDistance != 0) || (yDistance != 0)) {
    Mouse.move(xDistance, yDistance, 0);
  }

  // if the mouse button is pressed:
  if (clickState == HIGH) {
    // if the mouse is not pressed, press it:
    if (!Mouse.isPressed(MOUSE_LEFT)) {
      Mouse.press(MOUSE_LEFT);
    }
  }
  // else the mouse button is not pressed:
  else {
    // if the mouse is pressed, release it:
    if (Mouse.isPressed(MOUSE_LEFT)) {
      Mouse.release(MOUSE_LEFT);
    }
  }

  // a delay so the mouse doesn't move too fast:
  delay(responseDelay);
}

Επιστροφή στην σελίδα Παραπομπές Γλώσσας