Hi,
i have a code that work well with shift register....
i have 2 shift registers and 16 LEDs
now i can change the walues of registers just fine...
this is my code
//variables
byte data_0_4;
byte data_5_8;
byte data_9_12;
byte data_13_16;
byte dataArrayShift[10];
dataArrayShift[0] = B0111;//3
dataArrayShift[1] = B1001;//4
dataArrayShift[2] = B1011;//5
dataArrayShift[3] = B1101;//6
dataArrayShift[4] = B1111;//7
this is in main loop
//start:the main code
for(int i=0; i < 6; i++){
if(i==0)
digitalWrite(13,HIGH);
else
digitalWrite(13,LOW);
data_0_4 = dataArrayShift[i];
data_5_8 = dataArrayShift[i];//.dataArrayShift[i];//dataArray_8_16[i];
data_9_12 = dataArrayShift[i];
data_13_16= dataArrayShift[i];
digitalWrite(shiftL_pin, 0);
shiftOut(shiftD_pin, shiftC_pin, data_13_16);
shiftOut(shiftD_pin, shiftC_pin, data_9_12);
shiftOut(shiftD_pin, shiftC_pin, data_5_8);
shiftOut(shiftD_pin, shiftC_pin, data_0_4);
digitalWrite(shiftL_pin, 1);
delay(100);
}
these is the shift function
void shiftOut(int myshiftD_pin, int myshiftC_pin, byte myDataOut) {
//internal function setup
int i=0;
int pinState;
pinMode(myshiftC_pin, OUTPUT);
pinMode(myshiftD_pin, OUTPUT);
digitalWrite(myshiftD_pin, 0);
digitalWrite(myshiftC_pin, 0);
for (i=3; i>=0; i--) {
digitalWrite(myshiftC_pin, 0);
if ( myDataOut & (1<<i) ) {
pinState= 1;
}
else {
pinState= 0;
}
digitalWrite(myshiftD_pin, pinState);
digitalWrite(myshiftC_pin, 1);
digitalWrite(myshiftD_pin, 0);
}
digitalWrite(myshiftC_pin, 0); //stop shifting
}
Now what i want to be able is to change just one bit without changing others
Now lets say the current values are like
0111 0111 0111 0111
Now i want o have
0111 0110 0111 0111
But don't want to touch/change enithing else..
How can i do this?