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;
// 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);
}
void setup() {
for (int i=0; i
}
// 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);
}
}
void loop() {
// recorre desde el indice 0 hasta el 7
for (int i=0; i
//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();
}
}
}
//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
}
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
}
digitalWrite(led, LOW); // LOW = 0V = apagar
delay(ms); // espera en milisegundos
}
Codigo fuente Processing:
import processing.serial.*;
import controlP5.*;
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;
//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);
}
//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);
}
//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;
}
}
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;
}
}
No hay comentarios:
Publicar un comentario