Indice
Descrizione
In questo episodio del tutorial di Arduino impareremo a utilizzare gli shift register. Vedremo come collegarli in modo da aumentare il numero di pin digitali della scheda di Arduino e realizzeremo alcuni esempi di giochi di luce con dei LED.
 Vedremo inoltre come possono essere collegati a cascata in modo da offrire molte più uscite digitali senza incrementare ulteriormente l'utilizzo dei pin di Arduino.
#define DATA_PIN 4#define LATCH_PIN 3#define CLOCK_PIN 2 void setup(){  pinMode(DATA_PIN, OUTPUT);  pinMode(LATCH_PIN, OUTPUT);  pinMode(CLOCK_PIN, OUTPUT);} void loop(){  animation1(70);  animation2(70);} void writeRegister(byte value){  digitalWrite(LATCH_PIN, LOW);  shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, value);  digitalWrite(LATCH_PIN, HIGH);} void animation1(unsigned int animationDelay){  for(int i = 0; i < 8; i++){    writeRegister(0x1 << i);    delay(animationDelay);  }  for(int i = 0; i < 8; i++){    writeRegister(0x80 >> i);    delay(animationDelay);  }} void animation2(unsigned int animationDelay){  byte value = 0x1;  for(int i = 0; i < 8; i++){    writeRegister(value);    value = (value << 1) + 1;    delay(animationDelay);  }  for(int i = 0; i < 8; i++){    writeRegister(value);    value = value >> 1;    delay(animationDelay);  }}#define DATA_PIN 4#define LATCH_PIN 3#define CLOCK_PIN 2 void setup(){  pinMode(DATA_PIN, OUTPUT);  pinMode(LATCH_PIN, OUTPUT);  pinMode(CLOCK_PIN, OUTPUT);} void loop(){  animation1(50);  animation2(50);} void writeRegister(unsigned int value){  digitalWrite(LATCH_PIN, LOW);  shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, value >> 8);  shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, value);  digitalWrite(LATCH_PIN, HIGH);} void animation1(unsigned int animationDelay){  for(int i = 0; i < 16; i++){    writeRegister(0x1 << i);    delay(animationDelay);  }  for(int i = 0; i < 16; i++){    writeRegister(0x8000 >> i);    delay(animationDelay);  }} void animation2(unsigned int animationDelay){  unsigned int value = 0x1;  for(int i = 0; i < 16; i++){    writeRegister(value);    value = (value << 1) + 1;    delay(animationDelay);  }  for(int i = 0; i < 16; i++){    writeRegister(value);    value = value >> 1;    delay(animationDelay);  }}In qualità di Affiliato Amazon riceviamo un guadagno dagli acquisti idonei