En este laboratorio controlaremos desde el arduino una matriz Led 8*8 a través de un IC MAX7219, para mostrar un número del 0 al 9, dependiendo de la posición del potenciómetro.
MATERIALES:
- 1 Módulo 8 Leds RGB
- Arduino
- Protoboard
- Cables
DIAGRAMAS:
En fritzing:
ESQUEMÁTICO:
FOTOS MONTAJE:
VIDEO:
CODIGO:
ARDUINO
#define TOTAL 8
#define MAX 8
//Declaracion de pines y de arreglos
// Conectamos el LED a los pines,9,10,11 que es PWM
// salida pwm para el color rojo
int pin_r = 9;
// salida pwm para el color verde
int pin_g = 10;
// salida pwm para el color rojo
int pin_b = 11;
// Indica los pines en el que debe estar conectado el modulo
int led[TOTAL] = {2, 3, 4, 5, 6, 7, 8, 12};
// Se inicializan los datos de cada variable de color
int R[TOTAL]={0,0,0,0,0,0,0,0};
int G[TOTAL]={0,0,0,0,0,0,0,0};
int B[TOTAL]={0,0,0,0,0,0,0,0};
// Variables de cada componenten Inicializadas
int pos = 0;
int color = 0;
int estado = 0;
String str = "";
/********** Configuracion **********/
void setup() {
//comunicacion serial sera a 9600 baudios y pines inicializados con sus estados
Serial.begin(9600);
for (int i = 0; i < TOTAL; i++) {
pinMode(led[i], OUTPUT);
digitalWrite(led[i], HIGH);
}
// se configuran las salidas PWM usadas
// pin de salida, color rojo
pinMode(pin_r, OUTPUT);
digitalWrite(pin_r, HIGH);
// pin de salida, color verde
pinMode(pin_g, OUTPUT);
digitalWrite(pin_g, HIGH);
// pin de salida, color azul
pinMode(pin_b, OUTPUT);
digitalWrite(pin_b, HIGH);
}
/********** Ciclo Principal **********/
// Solo se ejecuta una vez, al iniciar o resetear el Arduino
// Ciclo infinito de ejecucion
void loop() {
leerSerial();
for (int i=0; i<TOTAL; i++) {
encender(led[i], R[i], G[i], B[i]);
}
}
// aqui se condiciona si el valor enviado para
// la intensidad del pin R, G o B del modulo
//metodo necesario para leer la informacion serial
void leerSerial() {
if (Serial.available() > 0) {
str = Serial.readString();
pos = int(str[1] - '0');
estado = int(str[2] - '0');
switch (str[0]) {
case 'r': R[pos] = estado; break;;
case 'g': G[pos] = estado; break;;
case 'b': B[pos] = estado; break;; }}}
//metodo para encender cada led deacuardo al pin usado
void encender (int pin_led, int r, int g, int b)
{
digitalWrite(pin_led, LOW);
digitalWrite(pin_r, r == 0 ? HIGH : LOW);
digitalWrite(pin_g, g == 0 ? HIGH : LOW);
digitalWrite(pin_b, b == 0 ? HIGH : LOW);
delay(2);
digitalWrite(pin_led, HIGH);
digitalWrite(pin_r, HIGH);
digitalWrite(pin_g, HIGH);
digitalWrite(pin_b, HIGH);
}
PROCESSING:
import controlP5.*;
import processing.serial.*;
// Se Definen las variables necesarias
ControlP5 cp5;
Serial serial;
// define las variables del texto, tipo Textlabel
Textlabel texto1, texto2;
Textlabel texto5, texto6;
//****** Objetos ********//
// Areglos para las variables de cada color: rojo, verde, azul.
int[] r = new int[] {0, 0, 0, 0, 0, 0, 0, 0};
int[] g= new int[] {0, 0, 0, 0, 0, 0, 0, 0};
int[] b= new int[] {0, 0, 0, 0, 0, 0, 0, 0};
//**** variables*****//
int colorDeFondo = color (200,100,100);
//***********configuracion*********************//
// Solo se ejecuta una vez, al iniciar el Sketch//
void setup() {
size(600, 300); // tamaño de la ventana
// crear el objeto ControlP5
cp5 = new ControlP5(this);
// crear un botón para encender/apagar cada LED
// para el color rojo
for (int i=0; i<r.length; i++)
cp5.addToggle("r"+i, 35+i*70, 60, 50, 40);
// para el color verde
for (int j=0; j<g.length; j++)
cp5.addToggle("g"+j, 35+j*70, 130, 50, 40);
// para el color azul
for (int k=0; k<b.length; k++)
cp5.addToggle("b"+k, 35+k*70, 200, 50, 40);
// Creamos el objeto del puerto Serial
serial = new Serial(this, Serial.list()[0], 9600);
// Se crea el texto principal
texto1 = cp5.addTextlabel("label")
.setText("CONTROLES DE ENCENDIDO Y APAGADO")
.setPosition(100,10)
.setColorValue(0xfffffFFF)
.setFont(createFont("Arial",20))
;
// crea texto indicativo
texto2 = cp5.addTextlabel("label1")
.setText("COLOR ROJO VERDE Y AZUL")
.setPosition(180,30)
.setColorValue(0xffffffFF)
.setFont(createFont("Comic Sans MS",15))
;
}
// se dibujar cada frame y se asigna el color de fondo
void draw()
{
{background(colorDeFondo);}
}
// actua cuando ocurra un evento con los botones
void controlEvent(ControlEvent theEvent)
{
// guardar el nombre y valor del evento
String nombre = theEvent.getController().getName();
int valor = int(theEvent.getController().getValue());
println("evento: " + nombre + " / valor: "+valor);
//serial.write(nombre+valor);
println(nombre+valor);
serial.write(nombre+valor);
}


No hay comentarios:
Publicar un comentario