hola gente. mucho tiempo sin entrar.
Aqui quería compartir con uds. mi primer programa arduino-processing. Es un intento de camara de vigilancia
. con una webcam :P. capturada por processing, y en la misma ventana se puede controlar la dirección de la webcam, esto esta dado por un servo, controlado por ardu y processing.
He logrado esto combinando el ejemplo para capturar webcam de la librería de processing, mas un viejo codigo de ejemplo de arduino, sobre posición de servo desde el serial. Básicamente lo modifique a 16 posiciones en vez de 9 que eran originalmente. Espero les guste. Como novato estoy feliz por encontrarme con processing y su amistad con arduino. Mas adelante le agregare detalles a la interfaz. Intentare probar unos ejemplos de detectores de movimiento que logran con processing. etc.
el video:
comparto el code de processing.
import processing.video.*;
import processing.serial.*;
Serial port;
int s=0;
int e=1;
int step = 10;
Capture cam;
void setup() {
size(640, 480);
println(Serial.list());
port = new Serial(this, Serial.list()[1], 9600);
frameRate(10);
String[] cameras = Capture.list();
if (cameras.length == 0) {
println("There are no cameras available for capture.");
exit();
} else {
println("Available cameras:");
for (int i = 0; i < cameras.length; i++) {
println(cameras[i]);
}
cam = new Capture(this, cameras[2]);
cam.start();
}
}
void draw() {
if (cam.available() == true) {
cam.read();
}
image(cam, 0, 0);
fill(255);
rect(10,210,50,30);
rect(580,210,50,30);
fill(0);
triangle(30,215,15,225,30,235);
triangle(610,215,610,235,625,225);
}
void mousePressed(){
println("mouseX: "+mouseX +" mouseY: "+mouseY);
if(mouseX<=60&&mouseX>=11&&mouseY>=211&&mouseY<=239){
if (s>=16) s=16;
else s=(s+e);
port.write(s);
println(s);
}
if(mouseX<=630&&mouseX>=581&&mouseY>=211&&mouseY<=239){
if(s<=0) s=0;
else s=(s-e);
port.write(s);
println(s);
}
}
codigo arduino
#include <Servo.h> // lamar a la libreria del servomotor
Servo myservo; // crear el objeto servo para controlar al servomotor
int val; // variable que almacenara los grados de movimiento del servomotor
void setup()
{
myservo.attach(9); // atribuye el pin 9 al servomotor para transferir los datos
Serial.begin(9600); // iniciar comunicacion serial
}
void loop()
{
if (Serial.available() > 0) { //lee si el monitor serial recibe datos, si es asi entra al ciclo if
int inByte = Serial.read(); //asigna el contenido del monitor serial a la variable.
switch (inByte) { //ciclos switch para determinar el valor que obtendra la variable val, segun sea el contenido de la variable inByte
case 0: //el contenido delmonitor seral es recibido como codigo ASCII, donde cero es igual a 48 en codigo ASCII
val=10; //en caso de ser cero la variable val obtendra el valor de cero
break; //salir del ciclo
case 1: //la compracion tambien se puede hacer usando el caracter encerrado entre comillas simples
val=20; //si el caso es 1 la variable val tendra el valor de 20
break; //salir del ciclo
case 2: //...
val=30;
break;
case 3:
val=40;
break;
case 4:
val=50;
break;
case 5:
val=60;
break;
case 6:
val=70;
break;
case 7:
val=80;
break;
case 8:
val=90;
break;
case 9:
val=100;
break;
case 10:
val=110;
break;
case 11:
val=120;
break;
case 12:
val=130;
break;
case 13:
val=140;
break;
case 14:
val=150;
break;
case 15:
val=160;
break;
case 16:
val=170;
break;
}
myservo.write(val); // establece la posición del servo según el valor de "val"
delay(30);
}
// espera a que el servo llegue a la posicion indicada antes de recibir otra orden
}