Ayuda!! quiero usar 7's  595 y no se bien como

Hola Amigos, les cuento un poco quiero hacer un POV con 18 led’s RGB, e intento controlarlos con 7 integrados 595. Ya logre, por ejemplo logro ponerlos a todos de un determinado color, o identificar a un led y color en particular. El problema que se me presenta es a la hora de controlar el tiempo de encendido y apagado. Mejor les muestro el prog. y espero que alguien me pueda ayudar o tirar alguna idea de como controlar de una mejor manera. Gracias

//**************************************************************//
// Name : shiftOutCode, Predefined Dual Array Style //
// Author : JUAN EDUARDO ARGAÑARAZ //
// Date : 27 JUL, 2010 //
// Version : 1.0 //
// Notes : Code for using a 74HC595 //


//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;

//holders for infromation you’re going to pass to shifting function
byte data1;
byte data2;
byte data3;
byte data4;
byte data5;
byte data6;
byte data7;
byte dataArray1[8];
byte dataArray2[8];
byte dataArray3[8];
byte dataArray4[8];
byte dataArray5[8];
byte dataArray6[8];
byte dataArray7[8];

void setup() {
//set pins to output because they are addressed in the main loop
pinMode(latchPin, OUTPUT);
Serial.begin(9600);

//Arduino doesn’t seem to have a way to write binary straight into the code
//so these values are in HEX. Decimal would have been fine, too.

dataArray1[1] = 0xFF; //00100100-esmeralda
dataArray1[2] = 0xFF; //01001001-lila
dataArray1[3] = 0xFF; //01101101-azul
dataArray1[4] = 0xFF; //10010010-amarillo
dataArray1[5] = 0xFF; //10110110-verde
dataArray1[6] = 0xFF; //11011011-rojo
dataArray1[7] = 0xFF; //00000000
dataArray1[8] = 0xFF; //00000000

//Arduino doesn’t seem to have a way to write binary straight into the code
//so these values are in HEX. Decimal would have been fine, too.

dataArray2[1] = 0xFF; //10010010-esmeralda
dataArray2[2] = 0xFF; //00100100-lila
dataArray2[3] = 0xFF; //10110110-azul
dataArray2[4] = 0xFF; //01001001-amirillo
dataArray2[5] = 0xFF; //11011011-verde
dataArray2[6] = 0xFF; //01101101-rojo
dataArray2[7] = 0xFF; //00000000
dataArray2[8] = 0xFF; //00000000

dataArray3[1] = 0xFF; //00100100-esmeralda
dataArray3[2] = 0xFF; //01001001-lila
dataArray3[3] = 0xFF; //01101101-azul
dataArray3[4] = 0xFF; //10010010-amarillo
dataArray3[5] = 0xFF; //10110110-verde
dataArray3[6] = 0xFF; //11011011-rojo
dataArray3[7] = 0xFF; //00000000
dataArray3[8] = 0xFF; //00000000

dataArray4[1] = 0xFF; //10010010-esmeralda
dataArray4[2] = 0xFF; //00100100-lila
dataArray4[3] = 0xFF; //10110110-azul
dataArray4[4] = 0xFF; //01001001-amirillo
dataArray4[5] = 0xFF; //11011011-verde
dataArray4[6] = 0xFF; //01101101-rojo
dataArray4[7] = 0xFF; //00000000
dataArray4[8] = 0xFF; //00000000

dataArray5[1] = 0xFF; //00100100-esmeralda
dataArray5[2] = 0xFF; //01001001-lila
dataArray5[3] = 0xFF; //01101101-azul
dataArray5[4] = 0xFF; //10010010-amarillo
dataArray5[5] = 0xFF; //10110110-verde
dataArray5[6] = 0xFF; //11011011-rojo
dataArray5[7] = 0xFF; //00000000
dataArray5[8] = 0xFF; //00000000

dataArray6[1] = 0xFF; //10010010-esmeralda
dataArray6[2] = 0xFF; //00100100-lila
dataArray6[3] = 0xFF; //10110110-azul
dataArray6[4] = 0xFF; //01001001-amirillo
dataArray6[5] = 0xFF; //11011011-verde
dataArray6[6] = 0xFF; //01101101-rojo
dataArray6[7] = 0xFF; //00000000
dataArray6[8] = 0xFF; //00000000

dataArray7[1] = 0xFE; //00100100-esmeralda
dataArray7[2] = 0xFF; //01001001-lila
dataArray7[3] = 0xFF; //01101101-azul
dataArray7[4] = 0xFF; //10010010-amarillo
dataArray7[5] = 0xFF; //10110110-verde
dataArray7[6] = 0xFF; //11011011-rojo
dataArray7[7] = 0xFF; //00000000
dataArray7[8] = 0xFF; //00000000

//function that blinks all the LEDs
//gets passed the number of blinks and the pause time
blinkAll_2Bytes(1,100);
}

void loop() {

for (int j = 1; j < 7; j++) {
//load the light sequence you want from array
data1 = dataArray1[j];
data2 = dataArray2[j];
data3 = dataArray3[j];
data4 = dataArray4[j];
data5 = dataArray5[j];
data6 = dataArray6[j];
data7 = dataArray7[j];

//ground latchPin and hold low for as long as you are transmitting

digitalWrite(latchPin, 0);
//move 'em out
shiftOut(dataPin, clockPin, data1);
shiftOut(dataPin, clockPin, data2);
shiftOut(dataPin, clockPin, data3);
shiftOut(dataPin, clockPin, data4);
shiftOut(dataPin, clockPin, data5);
shiftOut(dataPin, clockPin, data6);
shiftOut(dataPin, clockPin, data7);
//return the latch pin high to signal chip that it
//no longer needs to listen for information
digitalWrite(latchPin, 1);
delay(10);
}
}

// the heart of the program
void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
// This shifts 8 bits out MSB first,
//on the rising edge of the clock,
//clock idles low

//internal function setup
int i=0;
int pinState;
pinMode(myClockPin, OUTPUT);
pinMode(myDataPin, OUTPUT);

//clear everything out just in case to
//prepare shift register for bit shifting
digitalWrite(myDataPin, 0);
digitalWrite(myClockPin, 0);

//for each bit in the byte myDataOut[ch65533]
//NOTICE THAT WE ARE COUNTING DOWN in our for loop
//This means that %00000001 or “1” will go through such
//that it will be pin Q0 that lights.
for (i=7; i>=0; i–) {
digitalWrite(myClockPin, 0);

//if the value passed to myDataOut and a bitmask result
// true then… so if we are at i=6 and our value is
// %11010100 it would the code compares it to %01000000
// and proceeds to set pinState to 1.
if ( myDataOut & (1<<i) ) {
pinState= 1;
}
else {
pinState= 0;
}

//Sets the pin to HIGH or LOW depending on pinState
digitalWrite(myDataPin, pinState);
//register shifts bits on upstroke of clock pin
digitalWrite(myClockPin, 1);
//zero the data pin after shift to prevent bleed through
digitalWrite(myDataPin, 0);
}

//stop shifting
digitalWrite(myClockPin, 0);
}

//blinks the whole register based on the number of times you want to
//blink “n” and the pause between them “d”
//starts with a moment of darkness to make sure the first blink
//has its full visual effect.
void blinkAll_2Bytes(int n, int d) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
digitalWrite(latchPin, 1);
delay(200);
for (int x = 0; x < n; x++) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 255);
shiftOut(dataPin, clockPin, 255);
digitalWrite(latchPin, 1);
delay(d);
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
digitalWrite(latchPin, 1);
delay(d);
}
}

  • Con este código hago destellar el primer led en color verde.

Has probado una librería que hay para los Shift.

http://www.arduino.cc/playground/Code/ShiftRegister595#Example

yo lo tengo con 5 y funciona de maravilla!

Gracias por el dato ICEMAN, pero no puedo hacerlo funcionar, tampoco puedo hacerlo funcionar al ejemplo, tenes alguno que te funcione para pasarlo? Saludos.

PD: disculpas por el tiempo que demore en contestar, pero por cuestiones de trabajo no le estoy dedicando mucho tiempo al proyecto.

Hola, tranquilo, no pasa nada por la demora....

Los ejemplos que tengo son los de la librería, no tengo nada en concreto ya que lo tengo en un circuito "shield" que utilizo para salidas, pero debería funcionarte....

Acuérdate de definir bien la cantidad de 595 a utilizar y no deberías de tener problemas

Hola, gracias por tu tiempo. Creo que diste en la tecla, como defino la cantidad de 595 que utilizo?. Saludos

Mírate el privado que te mandé (no se si viste que era otra librería).
En él verás el enlace a la librería.

lo pongo otra vez aquí: http://www.megaupload.com/?d=K6CGAAGG

Si miras el código ejemplo verás:

ShiftOut Reg1(8,12,11,2);

El último dígito es donde dices la cantidad de 595 que tienes (en este caso 2), los otros los pines del arduino....

Ok. ahora si....muchas gracias. Estoy trabajando con el dato que me diste, aunque creo que no me va a servir para lo que quiero hacer. Tenes una idea de lo que quiero hacer?. Te mando una foto, hice la placa por que no eran la gran cosa y con el protoboard se me complicaba cuando lo usaba con la batería es decir cuando lo hacia girar se me salían de posición los cables. De todas maneras aun me falta mucho. Saludos

PD: Como subo las fotos?

No la veo. (la foto) :-/

UUUYY, intente subirla, pero se ve que no salio. Como subo las fotos???

mira aqui subi un video, http://www.youtube.com/watch?v=umjjh3pmjPs

Lo veo mas o menos..... pero te faltan por iluminar algún led no¿? ese es el problema ¿?

Si, me da un error cuando intento aumentar de un dígito a dos la cantidad de arreglos declarados :
por ej.

dataArray7[05] = 0xFB;
.
.
.
for (int j = 0; j < 1; j++){
for (int k = 0; k < 9; k++)
{
data1 = dataArray1[j,k]; …

Me da un error que no puedo eliminar aun, cuando tenga algo mejor te aviso, Saludos

PD: cuando era dataArray7[5] = 0xFB;
.
.
for (int j = 0; j < 1; j++){
data1 = dataArray1[j]; …

funcionaba al ampliarlo no lo puedo hacer funcionar…