Controlar 8 LEDs desde el Arduino, a través de un IC 74HC595, definiendo mínimo 8 patrones de movimiento que son controlados desde una interfaz gráfica en Processing/ControlP5. Más información sobre el IC 74HC595
Elementos Utilizados
*8 Led's
*8 Resistencias
*1 Arduino UNO
*Protoboard
*Pelacable*Cables
*Cable USB
*IC 74HC595
Diagrama del montaje en la Protoboard
Diagrama Esquemático del Circuito
Fotos del Montaje
Vídeo Funcionamiento
Codigo Fuente Arduino
- #define PIN 3
- const int Latch = 8;
- const int Clock = 9;
- const int Data = 7;
- int Pins[PIN] = {
- 7,8,9};
- int Lect = 0;
- boolean OnLed = false;
- int Dato = 0;
- int i = 0;
- int Led[]={1,2,4,8,16,32,64,128};
- void setup() {
- for (int j=0; j<PIN; j++){
- pinMode(Pins[j], OUTPUT);
- }
- Serial.begin(9600);
- }
- void loop()
- {
- if (Serial.available()>0) {
- Lect = Serial.read(); //Leemos el Dato
- if (OnLed)
- {
- Suma(Lect);
- On(Dato);
- OnLed = false;
- }
- else
- {
- i = Lect;
- OnLed = true;
- }
- }
- }
- void Suma(int estadoLED){
- if(estadoLED==0)
- {
- Dato = Dato-Led[i];
- }else{
- Dato = Dato+Led[i];
- }
- }
- void On(int Valor)
- {
- digitalWrite(Latch, LOW);
- shiftOut(Data, Clock, MSBFIRST, Valor);
- digitalWrite(Latch, HIGH);
- }
Codigo Proccesing
- import controlP5.*;
- import processing.serial.*;
- ControlP5 cP5;
- Serial serial;
- int[] led = new int[] {
- 0, 0, 0, 0, 0, 0, 0, 0
- };
- 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];
- serial = new Serial(this, puerto, 9600);
- }
- 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("", 120, 230);
- }
- /
- 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);
- }
- }
- }