App inventor 2 en español
Cómo programar los teléfonos móviles con Android.
Bluetooth, Arduino y App inventor 2 - Juan Antonio Villalpando
-- Tutorial de iniciación de App Inventor 2 en español --
Volver al índice del tutorial
___________________________
9D3.- App inventor, Bluetooth, Arduino. Envía una secuencia a LED. (II)
- Este ejemplo está basado en el anterior
- En el Arduino tenemos 3 LED situado en los terminales 11, 12 y 13.
- Disponemos de un archivo: rutina.csv en donde se encuentra tres valores de 1 y 0 y un Tiempo.
1-1-1-2*
0-1-1-2*
0-0-1-2*
0-0-0-2*
1-1-1-2*
1-1-0-2*
1-0-0-2*
0-0-0-2*
- El asterisco indica fin de la fila.
- Cuando comencemos la aplicación, App Inventor tomará ese archivo y pasará sus valores a una lista.
- Enviará la primera fila por Bluetooth al Arduino:
(1-1-1-2*)
- El código de Arduino separará los dos valores:
valor11 = 1
valor12 = 1
valor13 = 1
Tiempo = 2
- En este caso se encenderán los tres LED (1 - 1 - 1) durante 2 segundos.
- Continuamente irá comprobando si se ha cumplido esos 2 segundos.
- En caso que se cumplan se enviará a App Inventor la palabra "siguiente"
- App Inventor cuando reciba esa palabra o cualquier otra, simplemente que reciba algo...
- Enviará la segunda fila
(0-1-1-2*)
____________________________
- Forma de conectarlo.
_______________________
- Código del Arduino.
secuencia_led_2.ino |
// Juan Antonio Villalpando
// juana1991@yahoo.com
// kio4.com
char caracter;
String palabra;
int LED11 = 11;
int LED12 = 12;
int LED13 = 13;
int valor11;
int valor12;
int valor13;
int Tiempo = 1000000;
unsigned long currentMillis;
unsigned long previousMillis = currentMillis;
int k1;
int k2;
int k3;
int k4;
void setup() {
Serial.begin(9600);
pinMode(LED11, OUTPUT);
pinMode(LED12, OUTPUT);
pinMode(LED13, OUTPUT);
}
void loop() {
if(Serial.available()) {
caracter = Serial.read();
palabra = palabra + caracter;
if(caracter == '*') {
palabra = palabra.substring(0, palabra.length() - 1); // Quita último caracter *
k1 = palabra.indexOf('-');
valor11 = palabra.substring(0, k1).toInt();
k2 = palabra.indexOf('-', k1+1);
valor12 = palabra.substring(k1+1, k2).toInt();
k3 = palabra.indexOf('-', k2+1);
valor13 = palabra.substring(k2+1, k3).toInt();
k4 = palabra.indexOf('-', k3+1);
Tiempo = 1000 * palabra.substring(k3+1, k4).toInt();
palabra = "";
digitalWrite(LED11, valor11);
digitalWrite(LED12, valor12);
digitalWrite(LED13, valor13);
}
previousMillis = currentMillis;
} // =>Fin del available
tiempo();
} // =>Fin del loop
void tiempo() {
currentMillis = millis();
if (currentMillis >= (previousMillis + Tiempo)) {
previousMillis = currentMillis;
Serial.print("siguiente\n");
}
}
|
- Para el tiempo, en vez de utilizar delay (ya que dejaría parado el código hasta que terminara esa instrucción), utilizo lo currentMillis y el código va analizando en cada bucle del loop si se ha rebasado el tiempo.
___________________________________________________________
9D2.- App inventor, Bluetooth, Arduino. Envía una secuencia a LED.
p9D2_secuencia_led.aia
- La aplicación es casi igual que la del ejemplo anterior, solo debes subir un nuevo archivo rutina.csv con este contenido:
rutina.csv |
1-1-1-2*
0-1-1-2*
0-0-1-2*
0-0-0-2*
1-1-1-2*
1-1-0-2*
1-0-0-2*
0-0-0-2*
|
_________________
- Diseño.
- Reloj con un Intervalo de 100.
- ClienteBluetooth con
ByteDelimitador = 10
- Cambia el archivo rutina.csv
_________________
- Bloques.
_________________
- Comentarios.
- De las filas obtenemos (0-1-1-2*), quitamos el paréntesis y enviamos 0-1-1-2*
- Fíjate que podemos encender un LED mediante:
digitalWrite(LED11, HIGH);
- Y también así:
digitalWrite(LED11, 1);
- Y apagar así:
digitalWrite(LED11, 0);
__________________________________
|