2013-02-02 15 views
5

Pracuję z dziećmi niepełnosprawnymi, które mają porażenie mózgowe. Jedno dziecko ma ograniczoną kontrolę silnika, więc obecnie używa joysticka do sterowania myszą, a jego szybkość jest ustawiona bardzo nisko. To działa dobrze dla niej, ponieważ może kliknąć wszystkie przyciski na ekranie, ale myślę, że moglibyśmy lepiej - kiedy chce przejść przez cały ekran, zajmuje to wiek (około 10 sekund).zastępuje ustawienia częstości myszy. Tworzenie własnego algorytmu wskaźnika myszy

Moja hipoteza jest taka, że ​​jej mózg jest w porządku, a tylko jej kontrola motoryczna jest słaba. Jeśli to prawda, uważam, że mysz, która wystartowałaaby z niską prędkością, ale doświadczyła stałego przyspieszenia, byłaby dla niej lepsza, ponieważ podnosiłaby prędkość i stawała się szybka podczas przechodzenia przez cały ekran. Jeśli to zadziała, to możemy poprawić ustawienia PID i ustawienie prędkości/przyspieszenia dla dużej liczby osób niepełnosprawnych, co przyspieszy ich dostęp, a przez to ich naukę i rozwój.

Ale ja nie wiem, że najlepszym sposobem, aby zbudować to - wszelkie sugestie, myśli, linki i wskazówki mile widziane.

Przede Próbowałem za pomocą przetwarzania i Java, i za pomocą MouseListener, a robot do sterowania kursorem. Nie jestem przekonany, że jest to najlepszy sposób, ponieważ czytam pozycję kursora, a następnie piszę do niej, więc moje najlepsze próby wciąż przesuwają kursor i nie ma płynnego ruchu. Czy jest to możliwe w Javie? Czy muszę odczytywać dane wejściowe myszy z USB za pomocą jakiegoś sterownika, a następnie zastąpić kreślenie kursora na ekranie moim własnym?

Zrobiłem kilka filmów, aby zilustrować efekt, który próbuję osiągnąć.

Status quo (moja ilustracja jedzie kursor wyłączyć klawisze strzałek) http://www.youtube.com/watch?v=3ZhQCg5DJt8

Nowe zachowanie chcę (mysz przyspiesza) http://www.youtube.com/watch?v=JcBK_ZCFGPs

jeśli to jakieś zastosowanie, kod tworzenie użyłem aby te dema jest kopiowany w poniżej:

status quo demo:

import java.awt.AWTException; 
import jav 
a.awt.Robot; 

Robot robot; 
int i = 0; 
int j = 0; 

void setup() { 
    setupDotgame(); 
    try { 
    robot = new Robot(); 
    } 
    catch (AWTException e) { 
    e.printStackTrace(); 
    } 
    robot.mouseMove(screenWidth/2, screenHeight/2); 
} 

void draw() { 
    //println(frameCount); 
    robot.mouseMove(screenWidth/2+8*i, screenHeight/2+8*j); 
    drawDotgame(); 
} 

void keyPressed() { 
    if (keyCode == UP) { 
    j--; 
    } 
    else if (keyCode == DOWN) { 
    j++; 
    } 
    else if (keyCode == RIGHT) { 
    i++; 
    } 
    else if (keyCode == LEFT) { 
    i--; 
    } 
} 

pożądanego zachowania:

import java.awt.AWTException; 
import java.awt.Robot; 

Robot robot; 
int i = 0; 
int j = 0; 
int delta = 8; 
int time = 0; 

void setup() { 
    setupDotgame(); 
    try { 
    robot = new Robot(); 
    } 
    catch (AWTException e) { 
    e.printStackTrace(); 
    } 
    robot.mouseMove(screenWidth/2, screenHeight/2); 
} 

void draw() { 



    //println(frameCount); 
    robot.mouseMove(screenWidth/2+i, screenHeight/2+j); 
    drawDotgame(); 

} 

void keyPressed() { 
    if (millis() - time < 90) { 
    delta += 8; 
    } 
    else { delta = 8; } 
    time = millis(); 


    if (keyCode == UP) { 
    j-=delta; 
    } 
    else if (keyCode == DOWN) { 
    j+=delta; 
    } 
    else if (keyCode == RIGHT) { 
    i+=delta; 
    } 
    else if (keyCode == LEFT) { 
    i-=delta; 
    } 
} 

I kod DotGame oboje referencyjny:

void setupDotgame() { 
    size(1000, 600); 
    background(255); 
    fill(255, 0, 0); 
    noStroke(); 
    smooth(); 
    drawCircle(); 
} 

void drawDotgame() { 
    if (get(mouseX, mouseY) != color(255)) { 
    background(255); 
    drawCircle(); 
    } 
} 

void drawCircle() { 
    int x = round(random(50, width-50)); 
    int y = round(random(50, height-50)); 
    int rad = round(random(20, 80)); 
    ellipse(x, y, rad, rad); 
} 

góry dzięki

+0

Czy rozważałeś użycie przycisku na joysticku, aby przyspieszyć ruch. Na przykład Ctrl + strzałka sprawia, że ​​mysz szybko się porusza, gdy używasz MouseKeys. Podobnie jest z czymś, co może sprawić, że będzie skakał w razie potrzeby, ale nadal będzie mieć niską prędkość, jakiej wymaga precyzyjne dostrajanie? – cjds

+0

Dzięki za sugestię. Ten uczeń może zrobić tylko jedną rzecz na raz z rękami naprawdę nie jestem tak optymistą, że może zrobić dwie rzeczy naraz. Jak mówię, myślę, że jej mózg jest w porządku, ale wiele spasowania mięśni sprawia, że ​​rzeczy naprawdę trudne. – samjewell

+1

Nie chcę brzmieć jak kretyn, ale jest to kwestia programowania chcesz odpowiedział, czy starasz się dostać dyskusja będzie na najlepszej drodze, aby to zrobić? A potem konstruktywna uwaga: nie rozwiązuj tego dla "twojego programu", ale rozwiązuj dla urządzenia wejściowego. Spraw, aby joystick zwolnił więcej delt na sekundę, w zależności od tego, jak długo jest utrzymywany (stosunkowo prosty w przypadku arduino itp.), A problem "jak to zrobić w Javie" znika, ponieważ masz teraz uniwersalne rozwiązanie dla wszystkich programów we wszystkich systemach operacyjnych. –

Odpowiedz

0

jak Carl zasugerował, wierzę najlepszą odpowiedź krótki dokonywania myszy rzeczywiście to zachowanie jest rodzajem skakania, które sprawi, że mysz będzie blisko miejsca, do którego musisz się udać, a następnie skorzystaj z joysticka.

Tak się składa, że ​​program o nazwie AutoItv3 może robić tego rodzaju rzeczy. Możesz ustawić go tak, by rozpoznawał specjalne skróty klawiszowe, a następnie poprowadź ten klawisz myszy w dowolne miejsce.

polecenia przydatne do tego są HotKeySet, mousemove i funkc/EndFunc.