LABORATORIO 7
DESCRIPCIÓN DEL LABORATORIO :
Controlaré a través de Arduino ocho (8) LEDs puestos en una protoboard, por medio de un IC 74HC595, controlando individualmente vía una interfaz gráfica en Processing/ControlP5 que LED está encendido o apagado.
DIAGRAMA DEL MONTAJE EN EL CIRCUITO
CÓDIGO ARDUINO
- // Se definen la cantidad de pines que vamos a usar como PIN
- // y la entrada analoga A0 como la que se va a usar por el
- // potenciómetro
- #define PIN 3
- #define Pot A0
- // Se le dan nombres a los pines (7-9) del arduino
- // que van a ser usados por el integrado respectivamente
- // además el pin SH_CP osea Clock debe ser PWM(~)
- const int Latch = 8;
- const int Clock = 9;
- const int Data = 7;
- int led[PIN] = {
- 7,8,9};
- // Ocho secuencias
- int Serie1[7]={
- 129,66,36,24,24,36,66};
- int Serie2[9]={
- 0,128,192,224,240,248,252,254,255};
- int Serie3[12]={
- 255,126,60,24,16,8,16,8,24,60,126,255};
- int Serie4[2]={
- 240,15};
- int Serie5[14]={
- 129,0,131,133,137,145,161,0,193,161,145,137,133,131};
- int Serie6[2]={
- 195,60};
- int Serie7[11]={
- 1,0,1,0,15,0,15,0,255,255,0};
- int Serie8[50]={
- 1,2,4,8,16,32,64,128,64,32,16,8,4,2,1,2,4,8,16,32,64,128,192,160,144,136,132,130,129,131,133,137,145,161,193,225,209,201,197,195,199,203,211,227,243,235,231,239,255,0};
- // Ciclo para activar los tres pines como salida
- // y el pin A0 como entrada
- void setup() {
- for (int i=0; i<PIN; i++){
- pinMode(led[i], OUTPUT);
- }
- pinMode(Pot, INPUT);
- }
- // Recibe la info de la posición del potenciómetro
- void loop()
- {
- int Pos = analogRead(Pot);
- Pos = map(Pos, 0, 1023, 0,7);
- Casos(Pos);
- }
- // Según la posición del potenciómetro escoge un caso
- void Casos(int Valor)
- {
- switch(Valor)
- {
- case 0:
- for(int j=0;j<7;j++)
- {
- On(Serie1[j]);
- }
- break;
- case 1:
- for(int j=0;j<9;j++)
- {
- On(Serie2[j]);
- }
- break;
- case 2:
- for(int j=0;j<12;j++)
- {
- On(Serie3[j]);
- }
- break;
- case 3:
- for(int j=0;j<2;j++)
- {
- On(Serie4[j]);
- }
- break;
- case 4:
- for(int j=0;j<14;j++)
- {
- On(Serie5[j]);
- }
- break;
- case 5:
- for(int j=0;j<2;j++)
- {
- On(Serie6[j]);
- }
- break;
- case 6:
- for(int j=0;j<11;j++)
- {
- On(Serie7[j]);
- }
- break;
- case 7:
- for(int j=0;j<50;j++)
- {
- On(Serie8[j]);
- }
- break;
- }
- }
- // Función para enviar los datos al Integrado IC 74HC595
- void On(int Valor)
- {
- digitalWrite(Latch, LOW);
- shiftOut(Data, Clock, MSBFIRST, Valor);
- digitalWrite(Latch, HIGH);
- delay(100);
- }
CODIGO PROCESSING
/ Se utiliza las librerias ControlP5 y Serial del Processing
import controlP5.*;
import processing.serial.*;
// Se define la variable cP5 del tipo ControlP5
ControlP5 cP5;
// Se le da nombres al Serial
Serial serial;
int[] led = new int[] {
0, 0, 0, 0, 0, 0, 0, 0
};
// Configuración inicial
void setup() {
size(590, 250); //Tamaño de la ventana
noStroke();
cP5 = new ControlP5(this); //Crea el objeto ControlP5
// Crea el Knob del color Rojo
for (int i=0; i<led.length; i++)
{
cP5.addToggle("led"+i, 35+i*70, 140, 30, 30)
.setMode(ControlP5.SWITCH);
}
String puerto = Serial.list()[0];
//Comunicación serial a 9600bps
serial = new Serial(this, puerto, 9600);
}
// Cada uno de los circuilos hecho toma el color determinado
// del Led que se tiene en la protoboard
void draw() {
background(0xFF444444);
fill(led[0] == 0 ? 0xFF222222 : color(255, 255, 0));
ellipse(50, 100, 50, 50);
for (int i=1; i<4; i++) {
fill(led[i] == 0 ? 0xFF222222 : color(255, 0, 0));
ellipse(50+i*70, 100, 50, 50);
}
for (int i=4; i<led.length; i++) {
fill(led[i] == 0 ? 0xFF222222 : color(0, 255, 0));
ellipse(50+i*70, 100, 50, 50);
}
fill(255);
textFont(createFont("Gill Sans Ultra Bold", 50));
text("Enciende un LED", 40, 50);
fill(255);
textSize(25);
text("Juan Camilo Fernández López", 120, 230);
}
// Como se va a actuar cuando ocurra un evento con los botones
void controlEvent(ControlEvent evento) {
String nombre = evento.getController().getName();
int valor = int(evento.getController().getValue());
// Guarda el valor de cada boton
for (int i=0; i<led.length; i++) {
if (nombre.equals("led"+i)) {
led[i] = valor;
serial.write(i);
serial.write(valor);
println("evento: " + i + " / valor: "+valor);
}
}
}
VÍDEO DEL FUNCIONAMIENTO
No hay comentarios.:
Publicar un comentario