Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2014:acc-touch-mouse

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) {                   // 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.

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