martes, 11 de diciembre de 2012

LABORATORIO # 4


Controlar con el Arduino un secuencia de 8 LEDS, con un LED encendido moviendose
de izquierda a derecha en forma automática, utilizando una interfaz en
Processing para
controlar (pueden usar los Sliders de ControlP5) para controlar el
tiempo de encendido
y el tiempo de apagado.



MATERIALES QUE SE USARON



1 arduino

8 leds 

1 cable usb

1 protoboard

12 cables utp

8 resistencias

1 pc con el programa procesing

IMGENES DEL ENSAMBLAJE








CODIGO QUE SE USO

const int MAXLED = 8;
// arreglo de 8 LEDs, desde el pin 2 hasta el pin 9
int led[MAXLED] = {
  2,3,4,5,6,7,8,9};
char res;
int encendido=128, apagado=128;
// se ejecuta 1 sola vez, al iniciar el programa
void setup() {
  for (int i=0; i    pinMode(led[i], OUTPUT);
 
}
// se repite infinitamente mientras el arduino tenga corriente
void loop() {
  // recorre desde el indice 0 hasta el 7
  for (int i=0; i    //entra en el metodo leer datos
    //para conocer el valor de encendido y apagado de los leds
    leerDatos(); 
    on(led[i], encendido);   
    off(led[i], apagado);
  }
  // recorre desde el indice 6 hasta el 1, para no repetir los extremos
  for (int i=MAXLED-2; i>0; i–) {
    //entra en el metodo leer datos
    //para conocer el valor de encendido y apagado de los leds
    leerDatos();
    on(led[i], encendido);   
    off(led[i], apagado);
  }
}  
// métodos propios ——————————————–
void leerDatos(){
  //valida si esta hay un flujo de datos
  if (Serial.available()>0) {
    //se lee el valor mandado por serial
    res=Serial.read();
    //se valida el tipo de respuesta esperada
    if (res==’e') {
      //se asigna  el valor  del slide a  la velocidad de encendido del led
      encendido = Serial.read();
    }
    else if (res==’a') {
      //se asigna  el valor  del slide a la velocidad de apagado del led
      apagado = Serial.read();
    }
 
  }
}
void on(int led, int ms) {
  digitalWrite(led, HIGH); // HIGH = +5V = prender
  delay(ms); // espera en milisegundos
}
void off(int led, int ms) {
  digitalWrite(led, LOW); // LOW = 0V = apagar
  delay(ms); // espera en milisegundos
}

Codigo fuente Processing:

import processing.serial.*;
import controlP5.*;
//se crea una variable port de tipo serial
//para despues establecer la conexion
Serial port;
//se crea una variable cp5
//para despues establecer el control slide
ControlP5 cp5;
//se crea una variable
int valor=0;
int valor_anterior=-1;
void setup() {
  //tamanho  de la ventana
  size(600, 200);
 
  noStroke();
  //se crea la instancia del port y se le mandan atributos importantes
  port = new Serial(this, Serial.list()[1], 9600);
  //se modifican los controles
  cp5 = new ControlP5(this);
  cp5.addSlider(“e”)
    .setPosition(40, 40)
    .setWidth(500)
    .setHeight(20)
    .setRange(0, 255)
    .setValue(128)
    .setSliderMode(Slider.FLEXIBLE);
  
  cp5.addSlider(“a”)
    .setPosition(40, 140)
    .setWidth(500)
    .setHeight(20)
    .setRange(0, 255)
    .setValue(128)
    .setSliderMode(Slider.FLEXIBLE);
}
void draw() {
  //color del fondo
  background(100);
}
//metodo para el control de eventos
public void controlEvent(ControlEvent theEvent) {

//valido la condicion
  if(“e” == theEvent.getController().getName())
  {
      //mando por el serial la ‘e’
      port.write(‘e’);    
  }
  else if (“a” == theEvent.getController().getName())
  {
      //mando por el serial la ‘a’
      port.write(‘a’);
  }
  
  valor = int(theEvent.getController().getValue());
    if (valor != valor_anterior)
    {
      port.write(valor);
      valor_anterior = valor;
    }

}

VIDEO EN TIEMPO REAL FUNCIONANDO

DIAGRAMA DEL LABORATORIO






ESQUEMA DEL LABORATORIO


No hay comentarios:

Publicar un comentario