// Lab 6
// Cristian Córdoba
// Universidad Santiago de Cali
// Versión 1.0
// Se configuran los pines data, latch y clock.
int dataPin = 10;
int latchPin = 9;
int clockPin = 8;
// Se configuran los patrones der movimiento.
int dato;
int Patron0[16] = {1,2,4,8,16,32,64,128,1,2,4,8,16,32,64,128};
int Patron1[16] = {1,2,4,8,16,32,64,128,64,32,16,8,4,2,1,0};
int Patron2[16] = {0, 1, 129, 131, 195, 199, 231, 239, 255, 231, 195, 129, 0};
int Patron3[16] = {1,128,2,64,4,32,8,16,16,8,32,4,64,2,18,1};
int Patron4[16] = {128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,2};
int Patron5[16] = {64,8,2,64,32,4,128,16,1,64,8,2,64,32,4,0};
int Patron6[16] = {128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,2};
int Patron7[16] = {240, 255, 15, 255, 15, 255, 240};
// Variable para la lectura del dato serial desde processing.
char Lectura;
// Configuración del programa.
void setup() {
// Se configuran los pines como salidas y el modulo de com serial.
pinMode(dataPin, OUTPUT);
pinMode(latchPin, 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 el dato actual en el buffer.
Lectura = Serial.read();
// Aquí se condiciona si el dato enviado está entre las
// opciones y ejecuta el patrón de movimiento determinado
if (Lectura == '0'){
Patron_0();
}
if (Lectura == '1'){
Patron_1();
}
if (Lectura == '2'){
Patron_2();
}
if (Lectura == '3'){
Patron_3();
}
if (Lectura == '4'){
Patron_4();
}
if (Lectura == '5'){
Patron_5();
}
if (Lectura == '6'){
Patron_6();
}
if (Lectura == '7'){
Patron_7();
}
// El bucle se ejecuta mientras hayan datos disponibles
// por leer en el buffer.
}
}
// A continuación y hasta el final del código están las funciones
// para mostrar los patrones en cada caso descrito con antelación.
void Patron_0(){
for (int j = 0; j < 16; j++) {
// Carga la secuencia del arreglo determinado.
dato = Patron0[j];
envio();
delay(100);
}
}
void Patron_1(){
for (int j = 0; j < 16; j++) {
// Carga la secuencia del arreglo determinado.
dato = Patron1[j];
envio();
delay(100);
}
}
void Patron_2(){
for (int j = 0; j < 16; j++) {
// Carga la secuencia del arreglo determinado.
dato = Patron2[j];
envio();
delay(200);
}
}
void Patron_3(){
for (int j = 0; j < 16; j++) {
// Carga la secuencia del arreglo determinado.
dato = Patron3[j];
envio();
delay(200);
}
}
void Patron_4(){
for (int j = 0; j < 16; j++) {
// Carga la secuencia del arreglo determinado.
dato = Patron4[j];
envio();
delay(200);
}
}
void Patron_5(){
for (int j = 0; j < 16; j++) {
// Carga la secuencia del arreglo determinado.
dato = Patron5[j];
envio();
delay(100);
}
}
void Patron_6(){
for (int j = 0; j < 16; j++) {
// Carga la secuencia del arreglo determinado.
dato = Patron6[j];
envio();
delay(300);
}
}
void Patron_7(){
for (int j = 0; j < 16; j++) {
// Carga la secuencia del arreglo determinado.
dato = Patron7[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);
}