En esta entrada pongo una mejora de la interfaz de Processing en el ejercicio de comunicación con Arduino. El código en Processing es mas complicado pero creo que se entiende bien.
En este vídeo vemos los resultados.
El código en Arduino sería el mismo
Código en Processing
import processing.serial.*; //importamos la libreria para trabajar con el puerto serie
int n=0; //almacenaremos el resto de dividir el tiempo entre 4000 para tomar intervalos de 1000 ms
int ultima_parada=0; // almacenaremos el valor de millis() cada vez que reiniciemos el tiempo (botón ON)
int actual=0; // almacenamos el valor del tiempo desde cero cada vez que se reinicie (botón ON)
boolean encendido=false; // encendido=true pone en marcha los ledes. false, los apaga.
Serial mipuerto;
void setup() {
size(600, 300);
background(0);
mipuerto = new Serial(this, "COM3", 9600); //inicializamos el puerto
}
void draw() {
actual=millis()-ultima_parada; //actual llevará el tiempo desde que se reinicia el encendido de los leds
botones(); //dibujamos los botones
n=(actual % 4000); //vamos haciendo fracciones de 1000 ms
if (encendido) { // si encendido es true ponemos en marcha los ledes
if (n<1000) {
fill(0, 0, 0); //dibujamos un rectángulo negro que tape los ledes cuando simulemos apagado
rect(0, 0, width, height-100);
mipuerto.write('a'); //escribimos una 'a' en el puerto para apagar todos los Ledes
} else if (n<2000) {
fill(255, 255, 0); //dibujamos un circulo amarillo que simule en led amarillo
ellipse(width/2+150, height/2-80, 100, 100);
mipuerto.write('1');//escribimos un '1' en el puerto encender el Led amarillo
} else if (n<3000) {
fill(0, 255, 0); //dibujamos un circulo verde que simule en led verde
ellipse(width/2, height/2-80, 100, 100);
mipuerto.write('2');//escribimos una '2' en el puerto para encender el Led verde
} else if (n<4000) {
fill(255, 0, 0); //dibujamos un circulo rojo que simule en led rojo
ellipse(width/2-150, height/2-80, 100, 100);
mipuerto.write('3');//escribimos una '3' en el puerto para encender el Led rojo
}
} else {
fill(0, 0, 0);
rect(0, 0, width, height-100);
mipuerto.write('a'); //escribimos una 'a' en el puerto para apagar todos los Ledes
}
}
void botones() { //dibujamos los botones de ON y OFF
textSize(24);
fill (255, 100, 100);
rect( 150, 200, 120, 50, 20);
fill (255, 255, 255);
text("OFF", 190, 235);
fill (100, 155, 100);
rect( 320, 200, 120, 50, 20);
fill (255, 255, 255);
text("ON", 360, 235);
}
void mousePressed() { //controla el clic del ratón sobre los botones ON y OFF
if (mouseX > 150 && mouseX < 270 && mouseY > 200 && mouseY < 250) {
encendido=false;
fill (255, 300, 300); //cambiamos algo el color del botón para ver que se ha pulsado
rect( 150, 200, 120, 50, 20);
fill (255, 255, 255);
text("OFF", 190, 235);
}
if (mouseX > 320 && mouseX < 440 && mouseY > 200 && mouseY <250) {
encendido=true;
ultima_parada=millis(); //almacenamos el valor del tiempo en el momento de reiniciar para restarlo del actual y poder volver a contar desde el principio
fill (200, 155, 200); //cambiamos algo el color del botón para ver que se ha pulsado
rect( 320, 200, 120, 50, 20);
fill (255, 255, 255);
text("ON", 360, 235);
}
}
viernes, 21 de diciembre de 2018
Comunicación Arduino con Processing
Utilizaremos el puerto serie para comunicar Processing con Arduino. Para ver cómo funciona conectaremos 3 ledes a Arduino y mediante un programa en Processing haremos que se enciendan los ledes de forma secuencial uno tras otro con un segundo de diferencia y luego se apaguen todos a la vez.
Programa de Arduino: En este programas leemos el buffer del puerto según se vaya llenando y dependiendo de si es una 'a', un '1', un '2' o un '3' encendemos el led correspondiente.
int valor='a'; //variable para cargar el buffer del Serial
void setup() {
pinMode(2,OUTPUT);
//declaramos salidas a los tres pines
pinMode(3,OUTPUT);
//donde están conectados los ledes
pinMode(4,OUTPUT);
Serial.begin(9600);
}
void loop() {
if (Serial.available()>0){ //Si el puerto tienen algo en el buffer
valor=Serial.read(); //leemos el
puerto serie y lo cargamos en valor.
if (valor=='1'){
digitalWrite(2,HIGH); //dependiendo de lo que se lea se
} //enciende un led u otro
if (valor=='2'){
digitalWrite(3,HIGH);
}
if (valor=='3'){
digitalWrite(4,HIGH);
}
if (valor=='a'){ // cuando lee 'a' se apagan todos.
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
}
}
}
Programa de Processing: Con este programa enviaremos la información al puerto serie para que sea leida por Arduino. Aqui controlaremos los tiempos.
import processing.serial.*; //importamos la librería para trabajar con el puerto serie
int m=0; //en esta variable almacenaremos el tiempo transcurrido desde el inicio
int n=0; //en esta variable almacenaremos la secuencia de tiempo en la que cambian los ledes
Serial puerto; //declaramos una variable de la clase Serial
void setup() {
puerto = new Serial(this, "COM3", 9600); //configuramos el puerto de conexión.
}
void draw() {
m=millis();
n=(m % 4000); //Vamos dividiendo el tiempo en fracciones de 1 segundo. Como son 4 segundos
// nos quedamos con el resto de dividir el tiempo por 4000 ms.
if (n<1000) {
puerto.write('a'); //Lanzamos una 'a' para apagar todos los Ledes
} else if (n<2000) {
puerto.write('1');//Lanzamos una 1 para encender el Led amarillo
} else if (n<3000) {
puerto.write('2');//Lanzamos una 1 para encender el Led verde
}else if (n<4000) {
puerto.write('2');//Lanzamos una 1 para encender el Led rojo
}
}
lunes, 10 de diciembre de 2018
Estafas y fraudes en la Red
En esta entrada propongo una posible actividad para alumnos de 4º ESO sobre "Estafas y fraudes en la RED" . Se trata de una actividad para el curso con el mismo nombre del INTEF.
Suscribirse a:
Comentarios (Atom)