Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2014:acc-touch-mouse

Toto je starší verze dokumentu!


Myš ovládaná akcelerometrem

autor: David Bronec

Zadání

S vývojovou deskou FRDM-KL25Z realizujte USB myš, připojenou jako HID. Pohyb myši bude tvořen náklonem dle akcelerometru, dvě tlačítka myši budou představována levou a pravou částí kapacitního slideru. Program byl napsán v prostředí MBED .

Obrázek vývojové desky FRDM-KL25Z: FRDM-KL25Z


Popis funkce

Nakláněním desky se nám krzor bude pohybovat po obrazovce. Nakloníme-li desku doprava, kurzor myši pojede po obrazovce. Když nakloníme doleva, pojede doleva. Zvedneme-li přední část kde je kacitní slaider nahoru pohne se kurzor myši nahoru, Sklopením přední části se bude pohybovat kurzor směrem dolů. Kacitní slaide bude představovat tlačítak myši. Uplně vlevo je levé talčítko a v pravo je pravé tlačítko. Dále se povedlo umístit prostřední tlačítko. Klepnutí doprostřed slaidru vyvolá funkci zmáčknutí kolečka u normální myši.

Program

#include „mbed.h“ #include „TSISensor.h“ knihovna pro Slider #include „MMA8451Q.h“ knihovna pro akcelerometr #include „USBMouse.h“ knihovna pro HID #define MMA8451_I2C_ADDRESS (0x1d«1) TSISensor tsi; USBMouse mouse; int main() { MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS); DigitalOut gled(LED_GREEN); nastavení zelené LED diody

bool nastaveni = false; proměná pro zanutí a vypnutí Slideru int tlacitko = 0; proměná pro určení tlačítka 1 = Levé tlačítko, 2 = Pravé tlačítko, 3 = Prostřední tlačítko

     
  while(true) {                   // nekoneečná smička
  int xhod = (acc.getAccX()*10);      // načtení hodnot z akcelerometru osy X do proměnné
  int yhod = (acc.getAccY()*-10);     // načtení hodnot z akcelerometru osy Y do proměnné
  float slajd = tsi.readPercentage();     // načtení hodnot ze Slideru a uložení do proměné
  
   if (slajd < 0.01) { 
          if (nastaveni == true) {            // pokud je Slider true vykonají se tyto operace
                  if (tlacitko == 1)          //když je proměná talčítko nastavená na 1 vykoná se tato operace
                      {
                          mouse.click(MOUSE_LEFT);        // volání funkce levého tlačítka
                      }
                  else if (tlacitko == 2)     //když je proměná talčítko nastavená na 2 vykoná se tato operace
                      {
                          mouse.click(MOUSE_RIGHT);       // volání funkce pravého tlačítka
                      }
                  else if (tlacitko == 3)     //když je proměná talčítko nastavená na 3 vykoná se tato operace
                      {
                          mouse.click(MOUSE_MIDDLE);      // volání funkce prostřeního tlačítka
                      }
              
              nastaveni = false;          // vypnutí slideru
              
          }
      }
  
        else if (slajd < 0.20) {          // pokud je hodnota slideru menší jak 20 
          if (nastaveni == false)         //pokud je slider roven false 
              {   
                  nastaveni = true;       //nastaví slideru na true (zapnutí)
                  tlacitko = 2;           // uložení dvojky do proměné tlačítka
              }
      }
      else if (slajd < 0.5) { 
          if (nastaveni == false) 
              {
                  nastaveni = true;
                  tlacitko = 3;
              }
      } 
      else {
          if (nastaveni == false) 
              {
                  nastaveni = true;
                  tlacitko = 1;
              }
      }
    
    if ((xhod == 0) & (yhod == 0 ))       // pokud jsou hodnoty os akcelerometru na nule 
          {
              gled = 0;                   // zanutí zelené LED diondy
          }
  else {gled = 1;}                        // vynutí zelené LED diody
  
  
             
    mouse.move(yhod, xhod);              // Funkce pro pohyb kurzoru 
    wait(0.001);                          // čekání pro plynulejší pohyb kurzoru
  }

}


Zavěr

2014/acc-touch-mouse.1419671260.txt.gz · Poslední úprava: 2014/12/27 10:07 autor: David Bronec