const int CP = 3; //Collegamento clck pulse
const int PL = 4; //Collegamento Parallel Load
const int start = 5; //Collegamento
const int numBit = 6;
const int numShift = 9; //Idle1-Start0-d0..d5-Stoop1
int8_t shift_count;
uint32_t m0;
#define BAUD 104
void setup() {
Serial.begin(9600);
//Serial.println(RAMEND, HEX);
//Serial.print(SPH, HEX);
//Serial.println(SPL, HEX);
pinMode(start, INPUT_PULLUP);
pinMode(CP, OUTPUT);
pinMode(PL, OUTPUT);
digitalWrite(PL, HIGH);
digitalWrite(CP, HIGH);
shift_count=0;
load_SR();
}
void loop() {
shift_count= shifter(shift_count);
}
void load_SR(){
//Per generare un impulso brevissimo e caricare i bit nello shift register
digitalWrite(PL, HIGH);
digitalWrite(PL, LOW);
digitalWrite(PL, HIGH);
}
int8_t shifter(int8_t c){
if(c){
uint32_t mx = millis();
if((mx-m0) > BAUD){
m0 += BAUD;
digitalWrite(CP, LOW);
digitalWrite(CP, HIGH);
digitalWrite(CP,LOW);
c--;
}
} else {
if(digitalRead(start) == 0){ //perchè pull-up
m0 = millis();
load_SR();
c = numShift;
}
}
return c;
}