[ Pobierz całość w formacie PDF ]
butów, takich jak:
nazwa czujnika,
zu ycie pr du w mA,
rozdzielczo ,
maksymalny zakres,
dostawca,
wersja.
418 ROZDZIA 14
Bluetooth i sensory
Czujnik orientacji w telefonie Nexus One ma nast puj c charakterystyk :
Nazwa: AK8973 Orientation Sensor
Pobór pr du: 7,0 mA
Rozdzielczo : 1,0 stopie
Maksymalny zakres: 360 stopni
Teraz, gdy wiemy, jak uzyska dost p do czujnika poprzez SensorManager, zajmijmy
si odczytem jego warto ci.
14.2.2. Odczyt warto ci czujnika
Warto ci z czujników odczytujemy z u yciem obiektu implementuj cego interfejs
SensorEventInterface. Do metody o nazwie onSensorChanged() wysy ane s obiekty
SensorEvent. Klasa SensorEvent zawiera cztery pola wymienione w tabeli 14.4.
Tabela 14.4. Pola klasy SensorEvent
Pole Komentarz
accuracy
Pole typu ca kowitego reprezentuj ce dok adno odczytu szacowan przez czujnik.
Sensor
Referencja do czujnika, który utworzy ten obiekt SensorEvent.
timestamp
Znacznik czasu z dok adno ci nanosekundow , informuj cy o momencie utworzenia zdarzenia.
Pole to mo e by przydatne przy korelowaniu wielu zdarze .
values[3]
Warto ci z czujnika zapisane jako tablica liczb zmiennoprzecinkowych z trzema warto ciami. Jednostki
i dok adno tych trzech warto ci jest zale na od czujnika.
Obiekt SensorEventListener otrzymuje zdarzenie za ka dym razem, gdy zmieni si
warto sensora. Na poni szym listingu przedstawiona jest uproszczona wersja metody
onSensorChanged() z aplikacji SenseBot.
Listing 14.4. Uproszczona wersja metody onSensorChanged()
public void onSensorChanged(SensorEvent event) {
try {
if (bConnected == false) return;
StringBuilder sb = new StringBuilder();
sb.append("[" + event.values[0] + "]");
sb.append("[" + event.values[1] + "]");
sb.append("[" + event.values[2] + "]");
readings.setText(sb.toString());
// przetworzenie tych danych z czujnika
// updateMotors();
} catch (Exception e) {
Log.e(tag,"B d w onSensorChanged ::" + e.getMessage());
}
}
14.2. Interakcja z obiektem SensorManager 419
Za ka dym razem, gdy dost pny jest obiekt SensorEvent , jest on przekazywany do
metody onSensorChanded(). Pierwsz operacj w tym kodzie jest sprawdzenie, czy mamy
dzia aj ce po czenie z robotem . Je eli nie ma po czenia, ignorujemy dane. Ka da
z trzech warto ci jest odczytywana i formatowana do wy wietlenia w polu TextView .
Warto ci s interpretowane i odpowiednie instrukcje s wysy ane do kontrolera ste-
ruj cego silnikami robota . Kod odpowiedzialny za interpretacj i interakcj z robo-
tem przedstawiono w dalszej cz ci tego rozdzia u.
Aplikacja musi zarejestrowa swój obiekt SensorEventListener, aby otrzymywa te
powiadomienia. W nast pnym punkcie przedstawimy zalecany sposób wykonywania
procesu rejestracji.
14.2.3. W czanie i wy czanie czujników
Obiekt implementuj cy interfejs SensorEventListener otrzymuje komunikaty wy cznie
wtedy, gdy jest zarejestrowany. Klasa SensorManager zawiera dwie funkcje pozwalaj ce
aplikacji na rejestrowanie zdarze czujnika. W kontek cie aplikacji SenseBot interesuje
nas otrzymywanie zdarze z czujnika po o enia wy cznie wtedy, gdy urz dzenie jest
po czone z robotem poprzez Bluetooth. Dlatego kod rejestracji umie cili my w przed-
stawionej wcze niej metodzie handleConnected(). Na poni szym listingu zamieszczony
jest nowy kod, dodany do metody handleConnected().
Listing 14.5. Kod rejestracji czujnika
sManager.registerListener(SenseBot.this,
sManager.getDefaultSensor(
Sensor.TYPE_ORIENTATION),
SensorManager.SENSOR_DELAY_UI);
Metoda registerListener() z klasy SensorManager oczekuje trzech argumentów
potrzebnych do przekazania danych z czujnika do aplikacji. Pierwszym argumentem jest
obiekt implementuj cy interfejs SensorEventListener, którym w tym przypadku jest sama
klasa SenseBot.this . Drugim argumentem jest obiekt interesuj cego nas czujnika.
W tym przypadku jeste my zainteresowani ledzeniem warto ci z czujnika po o enia .
Cz stotliwo , z jak s aktualizowane dane czujników, jest zmienna i definiowana przez
programist za pomoc trzeciego parametru. W tym przypadku u yli my sta ej Sensor
Manager.SENSOR_DELAY_UI , która jest dobr , uniwersaln warto ci . Dla gier i innych
aplikacji czasu rzeczywistego nale y u y wi kszych warto ci.
Jak pami tamy, czujnik po o enia potrzebuje 7 mA. Aby wyd u y czas pracy
baterii, nale y pami ta o wy czeniu czujnika, je eli nie jest on potrzebny. W aplikacji
SenseBot istniej dwa miejsca, w których ma to miejsce. Pierwszym jest metoda handle
Disconnected() gdy utracimy po czenie z robotem, nie ma sensu próbowa odczy-
tywa dane z sensora. Innym miejscem, w którym nale y doda funkcj wyrejestro-
[ Pobierz całość w formacie PDF ]
Podobne
- Home
- TOM03
- Delinsky Barbara ZśÂ‚ocisty urok
- 499DUO.Iding Laura Noworoczne marzenia
- 2. Pamić™tniki Wampirów Walka
- Charles Williams The Diamond Bikini (pdf)
- McClure Ken Spirala pandory
- Morgan Diana SzaleśÂ„cza eskapada
- Frederik Pohl The Worlds of George O
- Redwood Pack 8 Wicked Wolf Carrie Ann Ryan
- Krystyna Wójcik Piszć™ pracć™ magisterskć…
- zanotowane.pl
- doc.pisz.pl
- pdf.pisz.pl
- natalcia94.xlx.pl