PROCESSING+TOUCHOSC+IPHONE = accelerometro IP

Estoy intentando hacer una captura de la información que genera el accelerometro del IPHONE, para poder utilizarla en otras aplicaciones.

Aquí vemos el ejemplo funcionando… vía wifi envío la información del accelerometro al ordenador, para luego ser tratada en los proyectos que me interesen.

Por ahora la única forma que he encontrado es:

1º instalando TOUCHOSC en el IPHONE, este programa tiene un SDk muy simple y es practico a la hora de enviar las carátulas realizadas al IPHONE, es el encargado de enviar la información desde el iphone a cualquier IP.

2º instalando PROCESSING en cualquier ordenador, este es compatible con todas las plataforma, y con un par de líneas de código puedes hacer una aplicación que escuche el puerto 8000, el cual es donde envía sus datos el programa TOUCHOSC.

3º un poco de paciencia, saliva y programación. y una red wifi donde conectar ambos equipos…(iphone y ordenador).

Esta es la configuración del TOUCHOSC en el IPHONE: con solo el accelerometro activo… no importa cual «LAYOUT» usemos. Recordemos que la IP que tenemos que configurar es la del ordenador que recibirá nuestra información.

El código de processing es:

[sourcecode language=»py»]
import processing.opengl.*;
import oscP5.*;
OscP5 oscP5;

float xrot = 0;
float zrot = 0;
float xrot_targ = 0;
float zrot_targ = 0;
float orientation = 0;
float dampSpeed = 5;

void setup() {
size(600,600, OPENGL);
oscP5 = new OscP5(this,8000);
smooth();
}

void draw() {
camera( 0, 0, 300,
0, 0, 0,
0.0, 1.0, 0.0
);
background(200);
if (xrot_targ < xrot) {
xrot = xrot + ((xrot_targ – xrot) / dampSpeed);
} else {
xrot = xrot – ((xrot – xrot_targ) / dampSpeed);
}

if (zrot_targ < zrot) {
zrot = zrot + ((zrot_targ – zrot) / dampSpeed);
} else {
zrot = zrot – ((zrot – zrot_targ) / dampSpeed);
}
if (orientation > 0) {
fill(0,0,255);
rotateX(radians(xrot));
rotateZ(radians(zrot));
} else {
fill(0,255,0);
rotateX(radians(xrot*-1));
rotateZ(radians(zrot*-1));
}
box(230,10,80);

}

void oscEvent(OscMessage theOscMessage) {
if(theOscMessage.checkAddrPattern("/accxyz")==true) {
xrot_targ = (theOscMessage.get(0).floatValue()*90);
zrot_targ = (theOscMessage.get(1).floatValue()*90)*-1;
orientation = theOscMessage.get(2).floatValue();
}
}

[/sourcecode]

ejecutamos el código de processing… y listo, vemos la magia… con un retardo muy pequeño vemos como responde de una forma muy fluida.

Saludos y espero que sea útil…

 

 

Sigue leyendo

AnteriorSiguiente

10 comentarios en «PROCESSING+TOUCHOSC+IPHONE = accelerometro IP»

  1. copie y pegue el texto en processing y me tira el siguiente error… tal vez tengo que importar alguna libreria?

    «expecting RPAREN, found ‘;’
    processing.app.SketchException: Syntax error, maybe a missing right parenthesis?
    at processing.mode.java.JavaBuild.preprocess(JavaBuild.java:314)
    at processing.mode.java.JavaBuild.preprocess(JavaBuild.java:197)
    at processing.mode.java.JavaBuild.build(JavaBuild.java:156)
    at processing.mode.java.JavaBuild.build(JavaBuild.java:135)
    at processing.mode.java.JavaMode.handleRun(JavaMode.java:176)
    at processing.mode.java.JavaEditor$20.run(JavaEditor.java:481)
    at java.lang.Thread.run(Thread.java:662)
    »

    de antemano gracias. 😀

  2. import processing.opengl.*;
    import oscP5.*;
    OscP5 oscP5;
     
    float xrot = 0;
    float zrot = 0;
    float xrot_targ = 0;
    float zrot_targ = 0;
    float orientation = 0;
    float dampSpeed = 5;
     
    void setup() {
    size(600,600, OPENGL);
    oscP5 = new OscP5(this,8000);
    smooth();
    }
     
    void draw() {
    camera( 0, 0, 300,
    0, 0, 0,
    0.0, 1.0, 0.0
    );
    background(200);
    if (xrot_targ < xrot) { xrot = xrot + ((xrot_targ - xrot) / dampSpeed); } else { xrot = xrot - ((xrot - xrot_targ) / dampSpeed); }   if (zrot_targ < zrot) { zrot = zrot + ((zrot_targ - zrot) / dampSpeed); } else { zrot = zrot - ((zrot - zrot_targ) / dampSpeed); } if (orientation > 0) {
    fill(0,0,255);
    rotateX(radians(xrot));
    rotateZ(radians(zrot));
    } else {
    fill(0,255,0);
    rotateX(radians(xrot*-1));
    rotateZ(radians(zrot*-1));
    }
    box(230,10,80);
     
    }
     
    void oscEvent(OscMessage theOscMessage) {
    if(theOscMessage.checkAddrPattern(«/accxyz»)==true) {
    xrot_targ = (theOscMessage.get(0).floatValue()*90);
    zrot_targ = (theOscMessage.get(1).floatValue()*90)*-1;
    orientation = theOscMessage.get(2).floatValue();
    }
    }

  3. :O gracias, si tienes un problemas con la codificacion porque sobre esto que escribo me aprece «cambiar %raquo» jajaa

  4. que noob que soy sigue tirandome errores. copie y pegue el texto tal cual pusiste en tu correcion. y me sale este nuevo error.

    «processing.app.SketchException: unexpected char: ‘\’
    at processing.mode.java.JavaBuild.preprocess(JavaBuild.java:353)
    at processing.mode.java.JavaBuild.preprocess(JavaBuild.java:197)
    at processing.mode.java.JavaBuild.build(JavaBuild.java:156)
    at processing.mode.java.JavaBuild.build(JavaBuild.java:135)
    at processing.mode.java.JavaMode.handleRun(JavaMode.java:176)
    at processing.mode.java.JavaEditor$20.run(JavaEditor.java:481)
    at java.lang.Thread.run(Thread.java:662)
    »

    gracias denuevo.

  5. no se porque tira ese caracter, siendo que no hay niuno de esos en todo el codigo.

  6. Trata de cambiar los caracteres de tu navegador con alguno diferente… porque seguro es eso…
    en la opcion de
    if (xrot_targ < xrot) deberia decir if(xrot_targ " el simbolo de menor que" xrot) lo mismo para la siguiente opcion con zrot y la el ultimo if if (orientation > 0)
    deberia decir if(orientation «el simbolo de mayor que» 0)

    tienes un problema de codificacion de caracteres con tu navegador, este proyecto lo implante hace mas de 6 meses, y mucha gente lo ha copiado con exito…
    saludos.

  7. Saludos
    Estoy realizando un proyecto con el touch osc y me pregunta es como seria el código si para recibir estaría utilizando lenguaje C, el problema mio es como separar las coordenadas de xyz del accxyz.
    Gracias por tu ayuda

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.