====== 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í [[http://www.mbed.org |MBED ]]. **Obrázek vývojové desky FRDM-KL25Z:** {{ http://www.haoyuelectronics.com/ebay/FRDM-KL25Z/3.jpg?500 |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) { // nekonečná smyč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 ===== Program funguje tak jak je dáno v zadání. Pohyb kurzoru je dán naklonem desky a talčítka jsou řešeny kapacitním slidrem. Povedlo se přidat aji jedno tlačítko navíc a to prostřední které plní funkci zmáčknutého kolečka.