Reemplazar un dígito de una cadena numérica

En un post de esta misma sección, de hace un par de días, quedó resuelto el tema del manejo de los Registros de Desplazamieto para encender una serie de Leds Pilotos (gracias surbyte!). El programita quedó así:

int PinDatos = 2;
int PinReloj = 3;
int PinGatillo = 4;

byte seq1 = 0b11000000;
byte seq2 = 0b00000001;


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

void loop()
{
        led595(seq1,seq2);
}
void led595(byte x1,byte x2) 
{
     digitalWrite(PinGatillo, 0);           
      shiftOut(PinDatos, PinReloj, MSBFIRST, x1);
      shiftOut(PinDatos, PinReloj, MSBFIRST, x2);
        digitalWrite(PinGatillo, 1);
          delay(500);
}

En el ejemplo, se encienden los leds 1, 2 y 16. Durante el funcionamiento del programa algunos leds piloto se deben ir apagando y otros encendiendo. Llevo todo el día leyendo sobre direcciones de memoria, punteros, funciones de conversión de cadenas, pero no encuentro la manera de cambiar por ejemplo una sola posición de la cadena binaria, pasando de cero a uno o al revés, para encender o apagar solo de a un led sin afectar el estado del resto.

Algo tan simple como esto resolverá tu problema BitWrite

Estúdialo y verás.

Bieeeen!!! Dos cosas: (no puedo probarlo ahora) hay que incluir alguna librería específica? Y me podrías recomendar algún libro o mejor alguna página donde haya listado de todas las variables que puedan emplearse en Arduino? Si te parece mañana lo pruebo y pongo el sketch terminado por si le sirve a alguien más.

albertoG1:
hay que incluir alguna librería específica?

bitWrite ya viene integrado en la IDE de Arduino, por lo tanto… no.

albertoG1:
Y me podrías recomendar algún libro o mejor alguna página donde haya listado de todas las variables que puedan emplearse en Arduino?

byte, char, int, long, las contrapartes unsigned (sin signo) de las dos últimas, y float. ¿Qué más necesitas saber?

Gracias, lo de un libro o una página lo digo porque como comenté al principio del post, me perdí "en la nube" buscando como reemplazar un elemento de una cadena y era tan simple, y la mayoría de los libros y artículos ponen siempre los mismos comandos y funciones. Pero de todas formas se por propia experiencia que de esta forma, a tropezones, se va avanzando, solo hace falta tener el entusiasmo para profundizar.

Quizas este enlace te aclare algo mas: referencia lenguaje Arduino

Bueno, gracias a todos, pongo el programita por si le sirve a alguien:

/********************************************************************************
 *  Programa que controla 16 diodos leds como pilotos de actividad utilizando
 *  dos ShiftRegister 74HC595 (Circuito: http://i.imgur.com/UWgb3kX.png)
 *  Primero se declaran las 3 variables para el 74HC595 y luego las dos variables
 *  que llevan la secuencia de pines encendidos o apagados (1/0)
 ********************************************************************************/

byte PilotosLedDatos = 2;
byte PilotosLedReloj = 3;
byte PilotosLedGatillo = 4;
byte SeqPilotos1 = 0b00000000;
byte SeqPilotos2 = 0b00000000;

void setup()
{
    pinMode(PilotosLedDatos, OUTPUT);       //Se configuran los tres pines del
    pinMode(PilotosLedGatillo, OUTPUT);     //74HC595 como salidas
    pinMode(PilotosLedReloj, OUTPUT);
}

void loop()
{
    bitWrite(SeqPilotos1,0,1);                    //Enciende el Led 1 (Comienza por el bit final, el 8)
    bitWrite(SeqPilotos2,4,1);                    //Enciende el Led 5 (Comienza por el bit final, el 5)
    PilotosLed595(SeqPilotos1,SeqPilotos2); //Llama a la función PilotosLed595
}
void PilotosLed595(byte Primero,byte Segundo) 
{
    digitalWrite(PilotosLedGatillo, 0);                                                //Desactiva el 74HC595         
    shiftOut(PilotosLedDatos, PilotosLedReloj, LSBFIRST, Segundo);       //Entran los
    shiftOut(PilotosLedDatos, PilotosLedReloj, LSBFIRST, Primero);         //datos al 595
    digitalWrite(PilotosLedGatillo, 1);                                                //Ahora activa el 74HC595
    delay(500);                                                                            //Aguarda medio segundo
}