Arduino en español
Circuitos con Arduino - Juan Antonio Villalpando
-- Tutorial de iniciación a Arduino --
Volver al índice del tutorial
____________________________
46B.- Processing y Bluetooth con App Inventor. Enviar datos desde el ordenador a una aplicación y viceversa.
- En el tutorial anterior, 46Bprocessing.htm, vimos unas nociones básicas de Processing.
- Ahora vamos a enviar datos desde el ordenador a una aplicación realizada con App Inventor y viceversa, mediante Bluetooth.
- Necesitamos que nuestro ordenador tenga Bluetooth, en el caso que no lo tenga, podemos comprar un "Dongle" Bluetooth.
_________________________________________________
1.- Enviar datos desde el ordenador a una aplicación.
p46B_Processing_BT1.aia
- Vamos a utilizar 3 Sliders, Deslizadores.
- Al mover los Sliders, se enviará sus datos a la aplicación mediante Bluetooth.
- Para crear este componente en Processing utilizaremos la librería: controlP5-2.2.5.zip
- La descomprimimos y copiamos su carpeta en libraries, como vimos en el tutorial anterior.
_________________________________________________
- Código Processing.
- Debes establecer el puerto del Bluetooth de tu ordenador, en mi caso es el COM1.
Bluetooth_Colores |
// Juan A. Villalpando
// kio4.com
// http://kio4.com/arduino/46Bprocessing_Bluetooth_AI2.htm
import controlP5.*; // Librería para crear componentes.
ControlP5 cp5; // cp5 es un elemento de la librería.
import processing.serial.*; // Comunincación Bluetooth.
Serial port; // Puerto Bluetooth.
int red = 0;
int green = 0;
int blue = 0;
Slider s1, s2, s3;
void setup(){
size(680,380);
background(200,200,200);
println("Puertos disponibles:");
println(Serial.list());
port = new Serial(this, "COM1", 9600); // Puerto Bluetooth del ordenador.
cp5 = new ControlP5(this);
PFont p = createFont("Arial",40);
ControlFont font = new ControlFont(p);
cp5.setFont(font);
s1 = cp5.addSlider(" R").setPosition(100,100)
.setRange(0,255)
.setSize(400,40)
.setColorBackground(0xffff0000)
.setColorForeground(0xffaa0000)
.setColorActive(0xffff4400)
.setColorLabel(0xffff0000);
s2 = cp5.addSlider(" G").setPosition(100,150)
.setRange(0,255)
.setSize(400,40)
.setColorBackground(0xffaaff00)
.setColorForeground(0xff009900)
.setColorActive(0xff66ff66)
.setColorLabel(0xff009900);
s3 = cp5.addSlider(" B").setPosition(100,200)
.setRange(0,255)
.setSize(400,40)
.setColorBackground(0xff00aaff)
.setColorForeground(0xff0000ff)
.setColorActive(0xff6666ff)
.setColorLabel(0xff000099);
}
void draw(){
red = int(s1.getValue());
green = int(s2.getValue());
blue = int(s3.getValue());
String Sred = str(red);
String Sgreen = str(green);
String Sblue = str(blue);
port.write(Sred + "," + Sgreen + "," + Sblue + "\n");
}
|
_________________
- Diseño.
_________________
- Bloques.
- Mediante el SelectorDeLista, seleccionaremos el Bluetooth del ordenador (que debe aparecer en esa lista).
_________________________________________________
2.- Enviar datos desde la aplicación al ordenador por Bluetooth.
p46B_Processing_BT2.aia
- Ahora veremos el caso contrario, enviar 3 datos desde la aplicación al ordenador mediante Bluetooth.
- Mediante tres deslizadores enviamos tres números desde la aplicación al ordenador, esos números se muestran en el formulario del Processing.
- Los números se envía en este formato: 123,67,89#, el caracter # lo utilizo como fin de mensaje.
- Además cambia el fondo del formulario.
_________________
- Diseño.
_________________
- Bloques.
_________________________________________________
- Código Processing.
- Debes establecer el puerto del Bluetooth de tu ordenador, en mi caso es el COM1.
Recibir_Bluetooth |
// Juan A. Villalpando
// kio4.com
// http://kio4.com/arduino/46Bprocessing_Bluetooth_AI2.htm
import controlP5.*; // Librería para crear componentes.
ControlP5 cp5; // cp5 es un elemento de la librería.
import processing.serial.*; // Comunicación Bluetooth.
Serial port; // Puerto Bluetooth.
String Sred = "";
String Sgreen = "";
String Sblue = "";
char caracter = 0;
String palabra = "";
Textlabel l1, l2, l3;
void setup(){
size(680,380);
background(200,200,200);
println("Puertos disponibles:");
println(Serial.list());
port = new Serial(this, "COM1", 9600); // Establece el puerto.
cp5 = new ControlP5(this);
PFont p = createFont("Arial",40);
ControlFont font = new ControlFont(p);
cp5.setFont(font);
l1 = cp5.addTextlabel("label1")
.setText("Rojo = ")
.setPosition(100,50)
.setColorValue(0xffff0000)
.setFont(createFont("Arial", 40));
l2 = cp5.addTextlabel("label2")
.setText("Verde = ")
.setPosition(100,100)
.setColorValue(0xff009900)
.setFont(createFont("Arial", 40));
l3 = cp5.addTextlabel("label3")
.setText("Azul = ")
.setPosition(100,150)
.setColorValue(0xff0000ff)
.setFont(createFont("Arial", 40));
}
public void draw() {
while (port.available() > 0) {
caracter = char(port.read());
palabra = palabra + caracter;
if (caracter == '#') {
// Example receives: 123,67,89#
palabra = palabra.substring(0, palabra.length() - 1); // Delete last char #
Sred = getValue(palabra,',',0);
Sgreen = getValue(palabra,',',1);
Sblue = getValue(palabra,',',2);
l1.setText("Rojo = " + Sred);
l2.setText("Verde = " + Sgreen);
l3.setText("Azul = " + Sblue);
background(float(Sred),float(Sgreen),float(Sblue),255);
// port.write("Return: " + palabra + "\n"); // Retorna los datos.
palabra = "";
}
}
// background(0);
}
///////////////// Function Split by char ////////////////
String getValue(String data, char separator, int index)
{
int found = 0;
int strIndex[] = {0, -1};
int maxIndex = data.length()-1;
for(int i=0; i<=maxIndex && found<=index; i++){
if(data.charAt(i)==separator || i==maxIndex){
found++;
strIndex[0] = strIndex[1]+1;
strIndex[1] = (i == maxIndex) ? i+1 : i;
}
}
return found>index ? data.substring(strIndex[0], strIndex[1]) : "";
}
|
_______________________________________
3.- Ejecutable.
- Mediante "Exportar Aplicación", podemos obtener la aplicación ejecutable.
_______________________________________
4.- Otros tutoriales.
- Aquí puse tutoriales en inglés sobre estos temas:
https://groups.google.com/forum/#!searchin/mitappinventortest/visual$20basic|sort:date/mitappinventortest/KkZbrPI7kb4/fTFQkAAaAQAJ 4
https://groups.google.com/forum/#!searchin/mitappinventortest/autoit|sort:date/mitappinventortest/VwgEZu5jH-E/Mdo2LMAxBQAJ 5
________________________________
|