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