//*----------------------
// Laboratorio #6
// Progrmama Arduino
// Andres Satizabal
// Version 1.0
//*----------------------
// se inicializan los pines para en envio de los datos
// al integrado
int latchPin = 8;
int clockPin = 12;
int dataPin = 11;
// se inicializan los arreglos para cada patrón
int dato;
int P_A[17] = {0, 240, 255, 15, 255, 15, 255, 240, 0};
int P_B[16] = {0, 2, 4, 8, 16, 32, 64, 128, 64, 32, 16, 8, 4, 2, 1, 0};
int P_C[9] = {0, 129, 66, 36, 24, 36, 66, 129, 0 };
int P_D[10] = {0, 1, 5, 21, 85, 213, 245, 253, 255, 0};
int P_E[7] = {0, 255, 189, 165, 161, 129, 0};
int P_F[13] = {0, 1, 5, 21, 85, 213, 245, 253, 255, 0};
int P_G[9] = {0, 3, 15, 63, 255, 243, 240, 192, 0};
int P_H[9] = {0, 1, 129, 131, 195, 199, 231, 239, 255, 231, 195, 129, 0 };
// variable para la lectura del dato serial desde processing
char Letra;
// config del programa
void setup() {
// se configuran los pines como salidas y el modulo de com serial
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
Serial.begin(9600);
}
// Bucle de ejecución del programa
void loop() {
// Si hay datos disponibles en el puerto serial
if (Serial.available() > 0)
{
// Leer la letra actual en el buffer
Letra = Serial.read();
// aqui se condiciona si la letra enviada está entre las
// opciones y ejecuta el patron determinado
if (Letra == 'A'){
Patron_A();
}
if (Letra == 'B'){
Patron_B();
}
if (Letra == 'C'){
Patron_C();
}
if (Letra == 'D'){
Patron_D();
}
if (Letra == 'E'){
Patron_E();
}
if (Letra == 'F'){
Patron_F();
}
if (Letra == 'G'){
Patron_G();
}
if (Letra == 'H'){
Patron_H();
}
// el bucle se ejecuta mientras hayan datos disponibles
// por leer en el buffer.
}
}
// a continuacion y hasta el final de codigo estan las funciones
// para mostrar los patrones en cada caso descrito arriba.
void Patron_A(){
for (int j = 0; j < 17; j++) {
// carga la secuencia del arreglo determinado.
dato = P_A[j];
// funcion de envio
envio();
delay(100);
}
}
void Patron_B(){
for (int j = 0; j < 16; j++) {
// carga la secuencia del arreglo determinado
dato = P_B[j];
envio();
delay(100);
}
}
void Patron_C(){
for (int j = 0; j < 9; j++) {
// carga la secuencia del arreglo determinado
dato = P_C[j];
envio();
delay(200);
}
}
void Patron_D(){
for (int j = 0; j < 10; j++) {
// carga la secuencia del arreglo determinado
dato = P_D[j];
envio();
delay(200);
}
}
void Patron_E(){
for (int j = 0; j < 7; j++) {
// carga la secuencia del arreglo determinado
dato = P_E[j];
envio();
delay(200);
}
}
void Patron_F(){
for (int j = 0; j < 13; j++) {
// carga la secuencia del arreglo determinado
dato = P_F[j];
envio();
delay(100);
}
}
void Patron_G(){
for (int j = 0; j < 9; j++) {
// carga la secuencia del arreglo determinado
dato = P_G[j];
envio();
delay(300);
}
}
void Patron_H(){
for (int j = 0; j < 9; j++) {
dato = P_H[j];
envio();
delay(300);
}
}
void envio(){
// se pone el pin latch en cero para guardar el valor mientras se transmite.
digitalWrite(latchPin, 0);
//
shiftOut(dataPin, clockPin, MSBFIRST, dato);
// se regresa el pin latch a estado alto para esperar el nuevo valor
digitalWrite(latchPin, 1);
}