const uint8_t clockPin = 5; // pin per il clock pulse
const uint8_t latchPin = 4; // pin per il parallel load
const uint8_t buttonPin = 3; // pin buttone start
const uint8_t numBit = 6; // num data bit effettivi
const uint8_t numShift = 9; // il numero di shift da effettuare
// numero shift: 1(riposo),0(bit start),B0..B5,1(bit stop)
int8_t shift_count;
uint32_t time0;
#define BAUD 104
//-Il pin d7 è collegato direttamente ai 5v in modo che rappresenti 1 fisso
//la trasmissione seriale quando è a riposo.
// -Il pin d6 è collegato a GND quindi rimane sempre a 0
// e rappresenta il bit di start
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(latchPin, OUTPUT);
pinMode(clockPin,OUTPUT);
digitalWrite(latchPin,HIGH);
digitalWrite(clockPin,LOW);
load_SR();
shift_count = 0;
}
void loop() {
// put your main code here, to run repeatedly:
shift_count = uart(shift_count);
}
//load shift register
void load_SR(){
// il parallel load si attiva quando è a low
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
digitalWrite(latchPin,HIGH);
}
int8_t uart(int8_t c){
if(c){
uint32_t time1 = millis();
if((time1 - time0) > BAUD){
time0 = time0 + BAUD;
digitalWrite(clockPin, LOW);
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin,LOW);
c--;
}
}
else{
if(digitalRead(buttonPin) == 0){
time0 = millis();
load_SR();
c = numShift;
}
}
return c;
}