I'm now currently working on a project that has 64 bit output. Here's the code
char command;
String string,strval[8];
boolean ledon = false;
int val[8];
//Pin connected to latch pin (ST_CP) of 74HC595
const int latchPin = 8;
//Pin connected to clock pin (SH_CP) of 74HC595
const int clockPin = 12;
////Pin connected to Data in (DS) of 74HC595
const int dataPin = 11;
void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
Serial.begin(9600);
Serial.println("begin");
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 0);
digitalWrite(latchPin, HIGH);
}
void loop()
{
if (Serial.available() > 0)
{string = "";}
int k=0;
while(Serial.available() > 0)
{
command = ((byte)Serial.read());
//Serial.println(command);
if(command == ';')
{
break;
}
else
{
string += command;
}
k=1;
delay(3);
}
int j=0;
if(k==1){
for(int i=0;i<8;i++){
strval[i]="";
}
Serial.println(string);
for(int i=0;i<string.length();i++){
char c=string[i];
if(c=='|'){
j++;}
else {strval[j]+=c;}
}
for(int i=0;i<8;i++){
val[i]=strval[i].toInt();
Serial.println(val[i]);
}
}
digitalWrite(latchPin, LOW);
// shift out the bits:
for(int i=7;i>=0;i--){
shiftOut(dataPin, clockPin,MSBFIRST, val[i]);
}
digitalWrite(latchPin, HIGH);
}
The input is a string that has 8 decimals separated by the symbol "|" and marked by ";" for the prog to know it is the last character. I've tested this separation and putting the values into an array and it works fine.
Although when I combine this with the shiftout code, the output is different than expected. I've tried using the code, which basically is: latchpin on, shift the data, latch pin out, separately and it's fine. but when I use it one this. it doesn't work.
The setup and schematic i used is based on this https://www.arduino.cc/en/Tutorial/ShiftOut
I have 4 modules of this shiftout
one module is like this (from the same arduino page link) https://www.arduino.cc/en/uploads/Tutorial/ShftOut_Schm2.gif
I'm really stucked here. Thanks guys, I hope you can help.