Fa "scorrere" un byte di dati, inviandolo dall’arduino ad un dispositivo esterno, un bit alla volta. Può partire sia dal bit più significativo ( il primo a sinistra ) che dal meno significativo ( l’ultimo a destra ). Ogni bit viene assegnato a turno al pin specificato, dopo di che viene generato un impulso sul pin di clock ( portato prima nello stato HIGH, poi LOW ) per indicare che il bit è disponibile.
Se ti stai interfacciando con un dispositivo che è controllato dalle transizioni crescenti del segnale di clock ( LOW → HIGH ), dovrai assicurarti che il pin di clock sia nello stato LOW prima di effettuare la prima chiamata a shiftIn(), ad esempio con una chiamata a digitalWrite(clockPin, LOW).
NOTA: questa è un’implementazione software; Arduino fornisce anche una libreria SPI che usa l’implementazione hardware, che è piu veloce ma funziona solo su pin specifici.
Sintassi
shiftOut(dataPin, clockPin, bitOrder, dati)
Parametri
dataPin: il pin al quale inviare i dati (int)
clockPin: il pin che invia l’impulso dopo che il dataPin è stato impostato al valore corretto (int)
bitOrder: l’ordine in cui far "scorrere" i bit; può essere MSBFIRST oppure LSBFIRST.
( Prima i bit più significativi, oppure, Prima i bit meno significativi )
//**************************************************************//
// Nome : shiftOutCode, Hello World //
// Autore : Carlyn Maw,Tom Igoe //
// Data : 25 Oct, 2006 //
// Versione: 1.0 //
// Note : Codice per usare un registro a scorrimento //
// : 74HC595 per contare da 0 a 255 //
// : //
// : 2017-11-13 //
// : Tradotto da Giuseppe Masino ( qub1750ul ) //
//****************************************************************
//Pin di arduino connesso al pin ST_CP del 74HC595
int latchPin = 8;
//Pin di arduino connesso al pin SH_CP del 74HC595
int clockPin = 12;
//Pin di arduino connesso al pin DS del 74HC595
int dataPin = 11;
void setup() {
//Imposta i pin come output poichè sono usati nel loop principale
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
//routine di conteggio
for (int j = 0; j < 256; j++) {
//manda a massa latchPin e mantienilo così mentre trasmetti
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, j);
//imposta latchPin a HIGH per segnalare al chip
//che può smettere di rimanere in ascolto per altre informazioni
digitalWrite(latchPin, HIGH);
delay(1000);
}
}
Note e Avvertimenti
dataPin e clockPin devono essere gia configurati come output attraverso una chiamata a pinMode().
shiftOut attualmente è scritto per mandare in uscita 1 byte ( 8 bit ) per cui richiede un’operazione a due fasi per valori più grandi di 255.
// Fai questo per MSBFIRST
int data = 500;
// manda in uscita i bit più significativi
shiftOut(dataPin, clock, MSBFIRST, (dati >> 8));
// manda in uscita i bit meno significativi
shiftOut(dataPin, clock, MSBFIRST, dati);
// Oppure questo per LSBFIRST
data = 500;
// manda in uscita i bit meno significativi
shiftOut(dataPin, clock, LSBFIRST, dati);
// manda in uscita i bit più significativi
shiftOut(dataPin, clock, LSBFIRST, (dati >> 8));
Title
Arduino Newsletter
We care about the privacy and personal data of our users.
To continue, please give us your consent:
Please confirm that you have read the privacy policy
Thank you for subscribing!
Curious to learn more?
Are you also a teacher, student, or professional that loves using Arduino in your day-to-day activities?
Then keep up-to-date with either our STEM or Professional monthly newsletters.
Arduino weekly newsletter (already subscribed)
Educators can benefit from the ever growing tech that shapes our environment through fun cool projects.
Why not awe your boss with highly innovative ways to help keep your enterprise connected at no extra cost?
Arduino Survey
We'd like to get to know you little better.
Please help us improve by answering this super short optional survey.