Control de teclado y ratón con aplicación Android a través de Arduino (7 / 10 paso)

Paso 7: La aplicación para Android

Para el siguiente paso, voy a asumir que usted está cómodo con la escritura una aplicación Android. Si no, por favor revisar los links del paso 2. El código fuente está a continuación.

NOTAS:
* Estar seguro de cambiar el valor de DEVICE_ADDRESS. Esto puede encontrarse en la etiqueta su BlueSMiRF. También se puede encontrar mientras se ajusta la velocidad en baudios en el paso 4 (#9). Es la cadena de letras y números después de "BTA", que es un valor por encima de "BAUDRT".
* Estar seguro que el paquete de cambio nombre (primera línea de MyRemote.java) para que coincida con la estructura de directorios del proyecto

MyRemote.java

paquete edu.mit.media.amarino.myremote;

Import android.app.Activity;
Import android.os.Bundle;
Import android.text.Editable;
Import android.text.TextWatcher;
Import android.view.MotionEvent;
importación android.view.View;
Import android.widget.Button;
Import android.widget.EditText;
Import at.abraxas.amarino.Amarino;

pública clase MyRemote amplía actividad {}

resultado de TextView público;
público int a, b;
público EditText inputField;

/ * cambiar la dirección a la dirección del módulo Bluetooth
* y el dispositivo se añade al Amarino * /
privado static final String DEVICE_ADDRESS = "00:06:66:07:AD:FE";

final int retardo = 150;

/ ** Cuando crea por primera vez la actividad. */

público void onCreate (Bundle savedInstanceState) {}
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Amarino.Connect (, DEVICE_ADDRESS);

último botón lClick = findViewById(R.id.leftClick) (botón);
lClick.setOnClickListener (new View.OnClickListener() {
público void onClick (View v) {}
Realizar la acción al hacer clic
onLeftClick();
}
});
último botón rClick = findViewById(R.id.rightClick) (botón);
rClick.setOnClickListener (new View.OnClickListener() {
público void onClick (View v) {}
Realizar la acción al hacer clic
onRightClick();
}
});
Botón final plus = findViewById(R.id.plusBtn) (botón);
plus.setOnClickListener (new View.OnClickListener() {
público void onClick (View v) {}
Realizar la acción al hacer clic
onPlus();
}
});
Botón final menos findViewById(R.id.minusBtn) = (botón);
minus.setOnClickListener (new View.OnClickListener() {
público void onClick (View v) {}
Realizar la acción al hacer clic
onMinus();
}
});

inputField = (EditText)findViewById(R.id.input);

TextWatcher fieldValidatorTextWatcher = new TextWatcher() {}

{público vacío beforeTextChanged (CharSequence s, int comienzo, int count, int después)
}

público vacío onTextChanged (CharSequence s, int comienzo, int antes, int count) {}
String str = inputField.getText().toString();
int len = str.length();
char c;

backspaced
Si (len < = Inicio) {}
onDelete();
}
Swyped
else if (len > (Inicio + 1)) {}
Temp de cadena = "";
para (int i = Inicio; i < len; i ++) {}
c = str.charAt(i);
Temp += Character.toString(c);
}
onSend(temp);
}
escribe normalmente
Else {}
c = str.charAt(len-1);
Str = Character.toString(c);
onSend(str);
}
}

público vacío afterTextChanged (Editable arg0) {}
}
};
inputField.addTextChangedListener(fieldValidatorTextWatcher);

}


protegido {} void onStart()
super.onStart();
}

protegido {} void onStop()
super.onStop();
Detener servicio de fondo de Amarino, que no necesitamos más
Amarino.disconnect (, DEVICE_ADDRESS);
}

público boolean onTouchEvent (MotionEvent event) {}
int x = (int)event.getX();
int y = (int)event.getY();
int diffX;
diffY int;
isUp booleano, isDown, isLeft isRight;
interruptor (event.getAction()) {}
caso MotionEvent.ACTION_DOWN:
un = x;
b = y;
rotura;
caso MotionEvent.ACTION_MOVE:
determinar izquierda o derecha
if(a > x) {}
isLeft = true;
isRight = false;
} else {}
isRight = true;
isLeft = false;
}
determinar hacia arriba o hacia abajo
if(b > y) {}
isUp = true;
isDown = false;
} else {}
isDown = true;
isUp = false;
}
calcular la diferencia
diffX = a - x;
Si diffX (diffX < 0) * = -1;
diffY = b - y;
Si diffY (diffY < 0) * = -1;
determinar la diferencia más grande
Si (isLeft & & isUp) {}
if(diffX > diffY) onLeft();
onUp() otra cosa;
}
else if (isLeft & & isDown) {}
if(diffX > diffY) onLeft();
onDown() otra cosa;
}
else if (isRight & & isDown) {}
if(diffX > diffY) onRight();
onDown() otra cosa;
}
else if (isRight & & isUp) {}
if(diffX > diffY) onRight();
onUp() otra cosa;
}

rotura;
caso MotionEvent.ACTION_UP:
rotura;
}
devuelven el valor false;
}

privado void onUp() {}
Amarino.sendDataToArduino (esto, DEVICE_ADDRESS, ' ~', "U");
}
privado void onLeft() {}
Amarino.sendDataToArduino (esto, DEVICE_ADDRESS, ' ~', "L");
}
privado void onRight() {}
Amarino.sendDataToArduino (esto, DEVICE_ADDRESS, ' ~', "R");
}
privado void onDown() {}
Amarino.sendDataToArduino (esto, DEVICE_ADDRESS, ' ~', "D");
}
privado void onLeftClick() {}
Amarino.sendDataToArduino (esto, DEVICE_ADDRESS, ' ~', "Z");
}
privado void onRightClick() {}
Amarino.sendDataToArduino (esto, DEVICE_ADDRESS, ' ~', "X");
}
privado void onPlus() {}
Amarino.sendDataToArduino (esto, DEVICE_ADDRESS, ' ~', "P");
}
privado void onMinus() {}
Amarino.sendDataToArduino (esto, DEVICE_ADDRESS, ' ~', "M");
}

{} privado void onSend (String str)
Amarino.sendDataToArduino (esto, DEVICE_ADDRESS, ' ^', str);
}
privado void onDelete() {}
Amarino.sendDataToArduino (esto, DEVICE_ADDRESS, ''', 'B');
}
}

===============================

Main.XML

<? xml version = "1,0" encoding = "utf-8"? >
< xmlns:android LinearLayout = "http://schemas.android.com/apk/res/android" android: orientación = "vertical"
Android: layout_width = "fill_parent" android: layout_height = "fill_parent" >

< LinearLayout android: layout_width = "400px" android: layout_height = "100px" android: layout_gravity = "center_horizontal"
Android: layout_marginTop = "20px" >

< botón android: id = "
Android: texto = "android: textSize ="32px"
Android: layout_width = "200px" android: layout_height = "100px" >< / botón >

< botón android: id = "
Android: texto = "android: textSize ="32px"
Android: layout_width = "200px" android: layout_height = "100px" >< / botón >

< / LinearLayout >

< LinearLayout android: layout_width = "200px" android: layout_height = "100px" android: layout_gravity = "center_horizontal"
Android: layout_marginTop = "20px" >

< botón android: id = "
Android: texto = "android: textSize ="48px"
Android: layout_width = "100px" android: layout_height = "100px" >< / botón >

< botón android: id = "
Android: texto = "android: textSize ="48px"
Android: layout_width = "100px" android: layout_height = "100px" >< / botón >

< / LinearLayout >

< LinearLayout android: layout_width = "450px" android: layout_height = "100px" android: layout_gravity = "center_horizontal"
Android: layout_marginTop = "20px" >

< EditText android: id = "android: textSize ="32px"
Android: layout_width = "fill_parent" android: layout_height = "100px" / >

< / LinearLayout >

< / LinearLayout >

===============================

Strings.XML

<? xml version = "1,0" encoding = "utf-8"? >
< recursos >
< nombre de cadena = "app_name" > MyRemote < / cuerdas >
< nombre de cadena = "clickLeft" > a la izquierda, haga clic en < / cuerdas >
< nombre de cadena = "botón" > Click derecho < / cuerdas >
< nombre de cadena = "más" > + < / cuerdas >
< nombre de cadena = "menos" >, < / cuerdas >
< nombre de cadena = 'Enviar' > / enviar < cadena >
< / recursos >

===============================

Me gustaría decir unas palabras acerca de las varias funciones en la parte inferior de "MyRemote.java". Llaman el mismo método con parámetros similares:
Amarino.sendDataToArduino (esto, DEVICE_ADDRESS, ' ~', "Z");

Este método realiza el comunicación real en el campo con el BlueSMiRF conectado al Arduino. Sabe qué dispositivo para enviarlo a la variable DEVICE_ADDRESS, que es el identificador único para el BlueSMiRF. Bastante directo. Pero al lado de parámetros puede necesitar un poco más de explicación, la ~ y la Z. El parámetro 3 (~) indica el bosquejo de procesamiento, que voy a escribir en el siguiente paso, qué modo estamos en:
~ = movimiento del ratón, clic de ratón y ratón sensibilidad
^ = entrada de teclado
' = retroceso

Elegí los personajes aleatorios útil para un par de razones. Sobre todo, necesitaba algunos caracteres reservados para denotar el "modo" por lo que opté por esos personajes que nunca utilizaría durante la ejecución de este proyecto. Esto puede parecer confuso, pero esperemos que esto resuelve lo: el cuarto parámetro ("Z" en el fragmento anterior) puede hacer una cosa si enviarlo con un ~ o puede hacer algo completamente diferente si lo envíe con un ^. Esto crece exponencialmente las posibilidades.

Observe el uso de estos caracteres en el siguiente paso, nuestro bosquejo de procesamiento.

Artículos Relacionados

Control de Arduino con teléfono Android a través de Bluetooth

Control de Arduino con teléfono Android a través de Bluetooth

Hola gente, aquí pueden aprender a controlar Arduino con teléfono Android a través de Bluetooth. Puede utilizar tu smartphone como un control remoto para sistema de iluminación del hogar o se puede utilizar como un etc. remoto del abejón.Para realiza
Gesto controló el coche robótica con aplicación android

Gesto controló el coche robótica con aplicación android

FYP - gesto controló el coche robótica con aplicación para Android. Código completo como gesto de reconocimiento y bluetooth transmisión de datos está disponible. Personas que necesitan cualquier tipo de ayuda con respecto a este proyecto o algún otr
Arduino Bluetooth tanque con aplicación Android personalizada (V1.0)

Arduino Bluetooth tanque con aplicación Android personalizada (V1.0)

¡ Hola! Esta es una guía de cómo construir un sencillo y barato Arduino basado en tanque de Bluetooth. Esta es la primera etapa de este proyecto y sólo implica el desarrollo de un vehículo en movimiento pista base tanque. La segunda etapa es la aplic
Teensy IR control remoto teclado y ratón / reproductor de playlist de Youtube

Teensy IR control remoto teclado y ratón / reproductor de playlist de Youtube

por: Shawn McCombsEste proyecto fue muy divertido al programa. Buena práctica, y tiene un propósito funcional. Si desea volver a propósito no dude.Paso 1: Descargar el material que necesita Aquí es el cómo, para el programa teclas de acceso rápido y
Tablero de interruptor de la wifi o el enchufe inteligente con Esp8266, Attiny 85 & Sensor PIR con aplicación android

Tablero de interruptor de la wifi o el enchufe inteligente con Esp8266, Attiny 85 & Sensor PIR con aplicación android

El 85 de Arduino Wifi es una pequeña tabla con ESP8266-01 módulo, Attiny85 micro controlador y un relé. Tiene también y como de encabezado adicional para conectar un relé externo o para conectar sensores de PIR, IR, etc. dependiendo de la aplicación.
Una guía para controlar cosas con variables de entrada (a través de arduino)

Una guía para controlar cosas con variables de entrada (a través de arduino)

el corazón de este proyecto es un) montan un sensor a entrada analógica arduino y b) programación con if... else instrucción.Este proyecto muestra un sistema de refrigeración de ordenador para mantener cierta temperatura dentro de una torre de ordena
Arduino Bluetooth garaje puerta Control con sensores y personalizable aplicación Android

Arduino Bluetooth garaje puerta Control con sensores y personalizable aplicación Android

Usar un arduino para activar relés para apertura de puertas y cerraduras eléctricas.Una aplicación personalizable para Android, conecta con arduino mediante emparejamiento protegidos por contraseña.Un módulo de bluetooth hc-05 recibe órdenes desde un
Cómo usar Mousekeys - mover el Cursor del ratón con el botón de número - Windows XP

Cómo usar Mousekeys - mover el Cursor del ratón con el botón de número - Windows XP

Mousekeys es una utilidad que incorpora Windows XP. Le permite controlar el cursor del ratón con el teclado numérico. Puede ser útil cuando no tienes un ratón o hace falta hacer movimientos de ratón de precisión.Paso 1: Abrir Panel de Control Ir a Pa
Bandeja del teclado/del ratón

Bandeja del teclado/del ratón

Así que mi madre visitó y no me deja escuchar el final de lo horrible era la ergonomía de mi escritorio. El escritorio sí mismo es realmente alto; demasiado alto para cómodamente con un teclado y ratón en. Así que a pesar de sólo pasar tal vez una ho
Casa calentador Controler con interfaz de usuario de SMS basados en Arduino

Casa calentador Controler con interfaz de usuario de SMS basados en Arduino

el proyecto proporciona instrucciones y código para construir un regulador de calefacción para su hogar o remoto caserío, que puede ser controlado y supervisado por GSM a través de comandos SMS. Comencé a diseñarlo como necesitábamos un controlador c
Arduino/Android - servomotor BLUETOOTH Multi aplicación Android Control

Arduino/Android - servomotor BLUETOOTH Multi aplicación Android Control

¡Hola mundo! Hice una aplicación de control de 1 servo ayer y dije que haría un control multi, así que aquí está la aplicación de control de múltiples! También hice un mejor código de arduino. Siga el siguiente paso para el esquema, código, lista de
Conectar Bluetooth Universal de Arduino - Control tu Arduino con tu dispositivo Android

Conectar Bluetooth Universal de Arduino - Control tu Arduino con tu dispositivo Android

Siempre quise controlar fácilmente mi Arduino con mi Smartphone, pero nunca encontré la solución perfecta para hacerlo. No quiero decir que esto es perfecto, pero hace lo que quiero que do...well no totalmente pero estoy cerca... Creo.En este Instruc
Arduino/Android - BLUETOOTH RGB LED de CONTROL de la aplicación ANDROID

Arduino/Android - BLUETOOTH RGB LED de CONTROL de la aplicación ANDROID

¡ Hola mundo! Hoy he hecho una aplicación para el control de un módulo Led RGB con un dispositivo Android. Entrarme en contacto con el código de fuente abierta de la aplicación.Nota: Si has comprado una LED de ánodo común conectarlo a 5vUtilicé un Le
Cómo crear una aplicación Android con Android Studio

Cómo crear una aplicación Android con Android Studio

Este tutorial te enseñará los conceptos básicos de cómo construir una aplicación Android utilizando el entorno de desarrollo Android Studio. Como los dispositivos Android se convierten cada vez más más común, la demanda de nuevas aplicaciones sólo au