×
Namespaces

Variants
Actions
(Difference between revisions)

Como capturar os valores do acelerômetro, em Java ME

From Nokia Developer Wiki
Jump to: navigation, search
valderind4 (Talk | contribs)
hamishwillee (Talk | contribs)
m (Hamishwillee - Tidy wiki text)
(11 intermediate revisions by 5 users not shown)
Line 1: Line 1:
[[Category:Java_ME_(Português)]]
+
[[Category:Java ME]][[Category:Code Examples]][[Category:Lang-Portuguese]][[Category:S60 5th Edition]][[Category:Mobile Sensor API (JSR-256)]][[Category:How To]][[Category:Sensor]]
[[Category:Exemplos de código Java ME]]
+
{{ArticleMetaData <!-- v1.2 -->
[[Category:Lang-PT]]
+
|sourcecode= [[Media:SensorTestMIDlet.zip]]
 +
|installfile= <!-- Link to installation file (e.g. [[Media:The Installation File.sis]]) -->
 +
|devices= <!-- Devices tested against - e.g. ''devices=Nokia 6131 NFC, Nokia C7-00'') -->
 +
|sdk= <!-- SDK(s) built and tested against (e.g. [http://linktosdkdownload/ Nokia Qt SDK 1.1]) -->
 +
|platform= Java ME
 +
|devicecompatability= <!-- Compatible devices e.g.: All* (must have internal GPS) -->
 +
|dependencies= <!-- Any other/external dependencies e.g.: Google Maps Api v1.0 -->
 +
|signing= <!-- Signing requirements - empty or one of: Self-Signed, DevCert, Manufacturer -->
 +
|capabilities= <!-- Capabilities required by the article/code example (e.g. Location, NetworkServices. -->
 +
|keywords= <!-- APIs, classes and methods (e.g. QSystemScreenSaver, QList, CBase -->
 +
|language= Lang-Portuguese
 +
|translated-by= [[User:Valderind4]]
 +
|translated-from-title= How to get accelerometer sensor values in Java ME
 +
|translated-from-id= 50958
 +
|review-by= <!-- After re-review: [[User:username]] -->
 +
|review-timestamp= <!-- After re-review: YYYYMMDD -->
 +
|update-by= <!-- After significant update: [[User:username]]-->
 +
|update-timestamp= <!-- After significant update: YYYYMMDD -->
 +
|creationdate= 20090705
 +
|author= [[User:Jarmlaht]]
 +
}}
  
Original em: [[How to get accelerator sensor values in Java ME]]
+
==Introdução==
 +
{{Abstract|Como mostrado no [[Como recuperar informações de sensores em Java ME]], na API MOBILE SENSOR no Nokia N97 encontra-se dois diferentes sensores de acelerômetros, um dá valores inteiros, outros valores em ponto flutuante. Este artigo mostra, como capturar valores destes acelerômetros em um MIDlet.}}
  
==Introdução==
 
 
Os dispositivos S60 quinta edição suportam a MOBILE SENSOR API (JSR-256). O Nokia 5800 XM e o Nokia N97 são os primeiros dispositivos a ter esta API implementada. Os dispositivos S60 quinta edição (e a maioria dos dispositivos S60 terceira edição FP1 e os da terceira edição FP2) tem um acelerômetro, que providencia valores baseados na posição e movimento do dispositivo. Por exemplo, quando a tela do aparelho móvel e mudada de posição, a tela é atualizada para a posição  
 
Os dispositivos S60 quinta edição suportam a MOBILE SENSOR API (JSR-256). O Nokia 5800 XM e o Nokia N97 são os primeiros dispositivos a ter esta API implementada. Os dispositivos S60 quinta edição (e a maioria dos dispositivos S60 terceira edição FP1 e os da terceira edição FP2) tem um acelerômetro, que providencia valores baseados na posição e movimento do dispositivo. Por exemplo, quando a tela do aparelho móvel e mudada de posição, a tela é atualizada para a posição  
 
Como mostrado no [[Como recuperar informações de sensores em Java ME]], na API MOBILE SENSOR no Nokia N97 encontra-se dois diferentes sensores de acelerômetros, um dá valores inteiros, outros valores em ponto flutuante. Este artigo mostra, como capturar valores destes acelerômetros em um MIDlet
 
  
 
Os passos para se usar o acelerômetro são os seguintes:
 
Os passos para se usar o acelerômetro são os seguintes:
Line 24: Line 42:
 
<code java>
 
<code java>
 
     /**
 
     /**
     * Searches sensors of "accelerator" quantity and if found returns a
+
     * Procura por sensores de acelerômetro e caso encontrado abre uma conexão do tipo
     * SensorConnection opened to it. Based on the boolean value of type_int
+
     * SensorConnection. Baseado no valor booleano de type_int
     * either TYPE_DOUBLE or TYPE_INT sensor is used.
+
     * sensores TYPE_DOUBLE ou TYPE_INT é utilizado.
     * @return SensorConnection, which has been opened to a sensor matching the criteria
+
     * @return SensorConnection, o qual foi aberto com o sensor
 
     */
 
     */
 
     private SensorConnection openSensor() {
 
     private SensorConnection openSensor() {
Line 72: Line 90:
 
<code java>
 
<code java>
 
     /**
 
     /**
     * Initializes (opens) the sensor and sets the DataListener
+
     * Inicializa (abre) o sensor e adiciona um DataListener
 
     */
 
     */
 
     private synchronized void initSensor() {
 
     private synchronized void initSensor() {
Line 105: Line 123:
 
<code java>
 
<code java>
 
     /**
 
     /**
     * Notification of the received sensor data.
+
     * Notificação dos dados recebidos pelo sensor
     * @param sensor - SensorConnection, the origin of the received data
+
     * @param sensor - SensorConnection, o sensor de origem dos dados enviados
     * @param data - the received sensor data
+
     * @param data - os dados recebidos
     * @param isDataLost - true if some data has been lost
+
     * @param isDataLost - verdadeiro caso algum dado tenha sido perdido
 
     */
 
     */
 
     public void dataReceived(SensorConnection sensor, Data[] data, boolean isDataLost) {
 
     public void dataReceived(SensorConnection sensor, Data[] data, boolean isDataLost) {
Line 127: Line 145:
  
 
     /**
 
     /**
     * Gets the directions (axis_x, axis_y and axis_z values) from the accelerator
+
     * Obtém a direção (axis_x, axis_y and axis_z values) do acelerômetro
     * sensor data. An average value is calculated from the buffer values.
+
     * Um valor médio é calculado do buffer de valores.
     * @param data The sensor data
+
     * @param data As informações do sensor
     * @return directions The array containing the axis_x, axis_y and axis_z values
+
     * @return directions Um array possuindo os valores axis_x, axis_y e axis_z
 
     */
 
     */
 
private static int[] getIntegerDirections(Data[] data) {
 
private static int[] getIntegerDirections(Data[] data) {
Line 149: Line 167:
 
Os arquivos SensorTestMIDlet.jad e SensorTestMIDlet.jar estão disponíveis aqui. O MIDle mostra os valores do sensor e desenha um indicador gráfico baseado nesses valores, como mostrado na figura abaixo.
 
Os arquivos SensorTestMIDlet.jad e SensorTestMIDlet.jar estão disponíveis aqui. O MIDle mostra os valores do sensor e desenha um indicador gráfico baseado nesses valores, como mostrado na figura abaixo.
  
[[Image:SensorTest2.png|An image showing the SensorTest MIDlet running in Nokia N97 SDK 0.5.]]
+
[[File:SensorTest2.png|An image showing the SensorTest MIDlet running in Nokia N97 SDK 0.5.]]
  
Uma imagem mostrando o SensorTest MIDlet sendo executado no Nokia N97 SDK 0.5.  
+
Uma imagem mostrando o SensorTest MIDlet sendo executado no Nokia N97 SDK 0.5.
  
 
==Aplicação exemplo==
 
==Aplicação exemplo==
Line 157: Line 175:
  
 
==Veja também==
 
==Veja também==
* [http://www.forum.nokia.com/info/sw.nokia.com/id/1e5dc196-7e18-4247-a1b9-ad9a43f8b2ff/sensor_s60_5_0_beta.sisx.html Mobile Sensor API (JSR-256) beta add-on for Nokia 5800 XpressMusic]
+
* [http://www.developer.nokia.com/info/sw.nokia.com/id/1e5dc196-7e18-4247-a1b9-ad9a43f8b2ff/sensor_s60_5_0_beta.sisx.html Mobile Sensor API (JSR-256) beta add-on for Nokia 5800 XpressMusic]
* [http://www.forum.nokia.com/info/sw.nokia.com/id/ec866fab-4b76-49f6-b5a5-af0631419e9c/S60_All_in_One_SDKs.html Nokia N97 SDK 0.5]
+
* [http://www.developer.nokia.com/info/sw.nokia.com/id/ec866fab-4b76-49f6-b5a5-af0631419e9c/S60_All_in_One_SDKs.html Nokia N97 SDK 0.5]
* [http://www.forum.nokia.com/Resources_and_Information/Documentation/Java/Java_API_Specifications.xhtml Mobile Sensor API (JSR-256) javadoc documentation and RI Binary]
+
* [http://www.developer.nokia.com/Develop/Java/Documentation/Java_API_specifications.xhtml Mobile Sensor API (JSR-256) javadoc documentation and RI Binary]
 
* [http://share.ovi.com/media/jarmlaht.public/jarmlaht.10005 Video of using Mobile Sensor API for controlling RC car in Nokia Developer Summit 2009 in Monaco]
 
* [http://share.ovi.com/media/jarmlaht.public/jarmlaht.10005 Video of using Mobile Sensor API for controlling RC car in Nokia Developer Summit 2009 in Monaco]
* [http://wiki.forum.nokia.com/index.php/How_to_get_information_about_sensors_in_Java_ME How to get information about sensors in Java ME]
+
* [[How to get information about sensors in Java ME]]
 +
<!-- Translation --> [[en:How to get accelerometer sensor values in Java ME]]

Revision as of 09:41, 15 August 2012

Article Metadata

Exemplo de código
Compatibilidade
Plataforma(s): Java ME
S60 5th Edition

Artigo
Tradução:
Por valderind4
Última alteração feita por hamishwillee em 15 Aug 2012

Contents

Introdução

Como mostrado no Como recuperar informações de sensores em Java ME, na API MOBILE SENSOR no Nokia N97 encontra-se dois diferentes sensores de acelerômetros, um dá valores inteiros, outros valores em ponto flutuante. Este artigo mostra, como capturar valores destes acelerômetros em um MIDlet.

Os dispositivos S60 quinta edição suportam a MOBILE SENSOR API (JSR-256). O Nokia 5800 XM e o Nokia N97 são os primeiros dispositivos a ter esta API implementada. Os dispositivos S60 quinta edição (e a maioria dos dispositivos S60 terceira edição FP1 e os da terceira edição FP2) tem um acelerômetro, que providencia valores baseados na posição e movimento do dispositivo. Por exemplo, quando a tela do aparelho móvel e mudada de posição, a tela é atualizada para a posição

Os passos para se usar o acelerômetro são os seguintes:

  • Encontre um sensor do tipo acelerômetro no dispositivo.
  • Selecione o sensor dando valores inteiros ou em ponto flutuantes
  • Passe a URL para o sensor
  • Abra a SensorConnection para o sensor
  • Implemente o método dataReceived() para usar os dados do sensor

O simples código abaixo mostra como pesquisar o tipo do acelerômetro do sensor do acelerômetro e como o tipo do valor do sensor pode ser selecionado. O método também captura a URL do sensor e retorna a correta SensorConnection para ele

Simples código

O simples código abaixo mostra como pesquisar o tipo do acelerômetro do sensor do acelerômetro e como o tipo do valor do sensor pode ser selecionado. O método também captura a URL do sensor e retorna a correta SensorConnection para ele.

    /**
* Procura por sensores de acelerômetro e caso encontrado abre uma conexão do tipo
* SensorConnection. Baseado no valor booleano de type_int
* sensores TYPE_DOUBLE ou TYPE_INT é utilizado.
* @return SensorConnection, o qual foi aberto com o sensor
*/

private SensorConnection openSensor() {
infos = SensorManager.findSensors("acceleration", null);
if (infos.length==0) return null;
int datatypes[] = new int[infos.length];
int i = 0;
String sensor_url = "";
if (!type_int) {
System.out.println("Searching TYPE_DOUBLE sensor...");
while (!sensor_found) {
datatypes[i] = infos[i].getChannelInfos()[0].getDataType();
if (datatypes[i] == 1) { //ChannelType.TYPE_DOUBLE = 1
sensor_url = infos[i].getUrl();
System.out.println("Sensor: " + sensor_url + ": TYPE_DOUBLE found.");
sensor_found = true;
}
else i++;
}
}
else if (type_int) {
System.out.println("Searching TYPE_INT sensor...");
while (!sensor_found) {
datatypes[i] = infos[i].getChannelInfos()[0].getDataType();
if (datatypes[i] == 2) { //ChannelType.TYPE_INT = 2
sensor_url = infos[i].getUrl();
System.out.println("Sensor: " + sensor_url + ": TYPE_INT found.");
sensor_found = true;
}
else i++;
}
}
System.out.println("Sensor: " + sensor_url);
try {
return (SensorConnection)Connector.open(sensor_url);
}catch (IOException ioe) {
ioe.printStackTrace();
return null;
}
}

O seguinte método mostra, como configurar o DataListener para capturar os valores do sensor:

    /**
* Inicializa (abre) o sensor e adiciona um DataListener
*/

private synchronized void initSensor() {
sensor = openSensor();
if (sensor == null) return;
try {
sensor.setDataListener(this, BUFFER_SIZE);
while(!isStopped){
try{
wait();
}catch(InterruptedException ie){}
}
sensor.removeDataListener();
}catch (IllegalMonitorStateException imse) {
imse.printStackTrace();
}catch (IllegalArgumentException iae) {
iae.printStackTrace();
}
try {
sensor.close();
} catch(IOException ioe){
ioe.printStackTrace();
}
if (isStopped) {
sensor = null;
}
}

Finalmente, o método dataReceived() é implementado para dar os valores do sensor. O método getIntegerDirections também é listado, ele calcula a média dos valores armazenados.

     /**
* Notificação dos dados recebidos pelo sensor
* @param sensor - SensorConnection, o sensor de origem dos dados enviados
* @param data - os dados recebidos
* @param isDataLost - verdadeiro caso algum dado tenha sido perdido
*/

public void dataReceived(SensorConnection sensor, Data[] data, boolean isDataLost) {
if (!type_int) {
double[] directions = getDirections(data);
x = directions[0];
y = directions[1];
z = directions[2];
}
else {
int[] directions = getIntegerDirections(data);
x_int = directions[0];
y_int = directions[1];
z_int = directions[2];
}
repaint();
}
 
/**
* Obtém a direção (axis_x, axis_y and axis_z values) do acelerômetro
* Um valor médio é calculado do buffer de valores.
* @param data As informações do sensor
* @return directions Um array possuindo os valores axis_x, axis_y e axis_z
*/

private static int[] getIntegerDirections(Data[] data) {
int [][] intValues = new int[3][BUFFER_SIZE];
int[] directions = new int[3];
for (int i=0; i<3; i++){
intValues[i] = data[i].getIntValues();
int temp = 0;
for (int j = 0; j<BUFFER_SIZE; j++) {
temp = temp + intValues[i][j];
}
directions[i] = temp/BUFFER_SIZE;
}
return directions;
}

Os arquivos SensorTestMIDlet.jad e SensorTestMIDlet.jar estão disponíveis aqui. O MIDle mostra os valores do sensor e desenha um indicador gráfico baseado nesses valores, como mostrado na figura abaixo.

An image showing the SensorTest MIDlet running in Nokia N97 SDK 0.5.

Uma imagem mostrando o SensorTest MIDlet sendo executado no Nokia N97 SDK 0.5.

Aplicação exemplo

Veja também

134 page views in the last 30 days.
×