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

.jpg)












No hay comentarios.:
Publicar un comentario