Arduino Leonardo - miš!

Pitate se da li je moguće uz pomoć Arduino mikrokontorlera napraviti sopstvenog miša ili tastaturu?
Da, moguće je! U narednom primeru ćemo pokazati i na koji način se to može uraditi.

Za realizaciju ovog primera potrebni su nam:

Na slici ispod prikazana je šema.

U okviru Arduino razvojnog okruženja potrebno je najpre definisati promenljive i pinove koji će biti korišćeni:

int inputPin = A0;
int stara_vred = 0;
float koef = 4000/1023;

Analogni pin A0, za koji ćemo povezati potenciometar, dodeljujemo promenljivoj inputPin. Takođe, postavljamo i inicijalne vrednosti promenljivih stara_vred i koeficijenta koja se određuje u skladu sa rezolucijom ekrana, jer je potrebno opseg kretanja miša po ekranu bude od jedne do druge ivice ekrana. Broj 4000 je zapravo samo veliki broj koji ce pokriti sto vecu rezoluciju ekrana. Podesavanjem ovog broja mozemo da izvedemo fino podesavanja na zeljenu rezoluciju.

Unutar setup() nalaze se sledeće linije koda:

pinMode(inputPin, INPUT);
Mouse.begin();
Serial.begin(9600);

čime se pin A0 proglašava za ulazni, a naš Arduino Leonardo će naredbom Mouse.begin() „imitirati“ miša za računar, pri čemu je brzina komunikacije kojom „razgovara“ sa računarom postavljena na 9600 simbola po sekundi, što se dobija naredbom Serial.begin().

U okviru loop() imamo sledeće linije koda:

int vrednost = Filtracija();
vrednost = vrednost-round(1023/2);
vrednost = round(vrednost*koef);
Serial.println(stara_vred);
if(abs(vrednost-stara_vred) > 2)

  {
    Mouse.move(vrednost-stara_vred,0,0);
    stara_vred = vrednost;
  }
delay(200); 

U okviru ovog dela programa računa se vrednost pozicije miša, na osnovu razlike nove i stare skalirane vrednosti pomeraja potenciometra, odnosno inkrementa, što se prosleđuje kursoru miša naredbom Mouse.move(). Ova naredba prima tri argumenta, vrednost pomeraja po x-osi (levo-desno), vrednost pomeraja po y-osi (gore-dole), vrednost pomeraja wheel (točkića miša). Takođe, u okviru SerialMonitor moguće je ispisivati vrednosti sa potenciometra, što se dobija naredbom Serial.println(). Kako je signal dobijen sa analognog ulaza često zašumljen, vrši se filtriranje, odnosno usrednjavanje vrednosti koja se dobija sa potenciometra. To se obavlja pomocu funkcije Filtracija():

int Filtracija()
{

  int vrednost1 = analogRead(inputPin);
  delay(10);

  int vrednost2 = analogRead(inputPin);
  delay(10);
  int vrednost3 = analogRead(inputPin);

  delay(10);
  return floor( ( vrednost1 + vrednost2 + vrednost3 ) / 3 );

}

Ukoliko smo sve povezali na pravi način i otkucali naš kod, možemo videti da se okretanjem potenciometra, odnosno promenom otpornosti našeg potenciometra, kursor miša kreće levo-desno na našem monitoru.

Sada nije teško uraditi i kretanje kursora miša gore-dole po vašem monitoru, zar ne? Verujemo da ćete taj zadatak rešiti očas posla!