[SOLUCIONADO]ShifRegister = Dolor de cabeza muy fuerte

Pues tengo un circuito que montaré dentro de una caja, con 14 mecanismos diferentes que se activan en una secuencia fija durante las 24 horas para control de un acuario.
En el frente de la caja irán 14 leds de tres pines (verde/rojo) que en principio estarán todos verdes, y el mecanismo que esté activado pues se pondrá rojo.
Para no utilizar 14 salidas digitales del Arduino he montado como prueba un ShiftRegister 74HC595 con 8 leds.
Buscando en Internet parece que todo el mundo los utiliza solo para encender arbolitos de navidad pues los sketch son siempre los mismos, encender en secuencia un led después de otro :o :frowning: :confused: >:(
Por las dudas antes de las preguntas pongo el sencillo sketch:

int PinDatos = 2;        //Define which pins will be used for the Shift Register control
int PinGatillo = 3;
int PinReloj = 4;
 
int seq[8] = {1,2,4,8,16,32,64,128};    //The byte sequence

void setup()
{
    pinMode(PinDatos, OUTPUT);      
    pinMode(PinGatillo, OUTPUT);
    pinMode(PinReloj, OUTPUT);
}

void loop()
{
    for (int n = 0; n < 8; n++)
    {
        digitalWrite(PinGatillo, 0);            
        shiftOut(PinDatos, PinReloj, LSBFIRST, seq[n]); 
        digitalWrite(PinGatillo, 1); 
        delay(50);
    }
}

El tema es que quiero encender solo alguno/s a la vez.
En el caso de querer encender uno solo no hay problema, si en la función “shifOut()” le pongo el array con la posición del 0 al 7 pues enciende el pin correspondiente.
He hecho pruebas pero no entiendo como hacer para que enciendan varios pines al mismo tiempo, por ejemplo si en lugar de utilizar el array, en la función “ShifOut()” pongo el número 13, enciende el pin 1, 3 y 4.
En mi cabezota entiendo que poner 13 equivale a 13 bytes, o no, pero ya llego a un estado de mareo de neuronas que no me aclaro. :confused:
A ver si hay algún samaritano que me arroje un poco de luz.

No. Tu error es verlo como numeros y no como los bits que en realidad conforman ese número exprasado en la notación correspondiente.

Si envias un solo byte entonces lo importante son los bits. 1 byte = 8 bits 0x01 en byte = 0b0000 0001 en binario

asi que si enviaras 13 es decimal pero como hexadecimal es 0x0D, en realidad mira que envías considerando los pesos binarios

0x0D en byte = 0b0000 1101 en binario

asi que tu debes verlo de otro modo a todo.

seq[n] tienes los pesos binarios para poder encender de a uno los bits del 595 si usaras esta función lograrias encender lo que gustes

void led595(byte valor) {
        digitalWrite(PinGatillo, 0);            
        shiftOut(PinDatos, PinReloj, LSBFIRST, seq[valor]); 
        digitalWrite(PinGatillo, 1); 
        delay(50);
}

si valor = 1 solo activará seq[1] que no es el primero sino el segundo bit, ojo con eso. Para activar el primero debes enviar un 0.

led595(0); en tu loop

ahora si quieres activar varios leds esto activara uno y desactivará los otros asi que solo es una idea que podemos mejorar.

Gracias ;D

Pues se ha quedado así (En este ejemplo enciende el tercer y el sexto led):

int PinDatos = 8;        //Define which pins will be used for the Shift Register control
int PinGatillo = 11;
int PinReloj = 12;

void setup()
{
    pinMode(PinDatos, OUTPUT);      
    pinMode(PinGatillo, OUTPUT);
    pinMode(PinReloj, OUTPUT);
}

void loop()
{
    led595(0b00100100);
}
void led595(byte binario) 
{
     digitalWrite(PinGatillo, 0);           
      shiftOut(PinDatos, PinReloj, LSBFIRST, binario);
        digitalWrite(PinGatillo, 1);
          delay(500);
}

Pues si quieres podemos poner como RESUELTO el post. Gracias de nuevo.

Pues has visto que tenía solución. Tu debes agregar [SOLUCIONADO] al título.

Ve a More, luego modify y ya puedes editar el título.