Deskripsi
Merupakan fungsi untuk mengirim data secara serial sinkron setiap kali pin clock berlogika high. Karena data akan selalu tergeser keluar ke jalur pin data setiap kali transisi clock ke logika high maka sebelumnya pin clock harus dipastikan berlogika low dengan instruksi digitalWrite (clockPin, LOW)
Syntax
shiftOut (dataPin, clockPin, bitOrder, value)
Parameter
dataPin: pin untuk jalur data keluar tiap bitnya dengan tipe data int
clockPin: pin di mana signal clock akan dibangkitkan untuk mengirim data lewat jalur dataPin
bitOrder: merupakan perintah bagaimana fungsi geser dilakukan, apakah LSB (LSBFIRST) atau MSB (MSBFIRST) dahulu
value: data yang digeser keluar pada jalur data dengan tipe data byte
Contoh Program
//**************************************************************//
// Name : shiftOutCode, Hello World //
// Author : Carlyn Maw,Tom Igoe //
// Date : 25 Oct, 2006 //
// Version : 1.0 //
// Notes : Code for using a 74HC595 Shift Register //
// : to count from 0 to 255 //
//****************************************************************
//Pin yang terhubung ke ST_CP of 74HC595
int latchPin = 8;
//Pin yang terhubung ke SH_CP of 74HC595 int clockPin = 12; ////Pin yang terhubung ke DS of 74HC595 int dataPin = 11; void setup() { //set semua pin ini menjadi OUTPUT pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { // for (int j = 0; j < 256; j++) { // digitalWrite(latchPin, LOW); //latch pin di set LOW selama proses pengiriman data shiftOut(dataPin, clockPin, LSBFIRST, j); kirimkan data diiringi signal clock dengan LSB terkirim dahulu digitalWrite(latchPin, HIGH); // kembalikan latch pin ke HIGH delay(1000); } }
Catatan dan Peringatan
- dataPin dan clockPin harus dikonfigurasi sebagai output dengan perintah pinMode()
- perintah shiftOut hanya mengeluarkan output sebesar 1 byte (8 bit), oleh karena itu untuk nilai lebih besar dari 255 maka:
// Lakukan ini untuk MSBFIRST serial
int data = 500;
// geser keluar highbyte
shiftOut(dataPin, clock, MSBFIRST, (data >> 8));
// geser keluar lowbyte
shiftOut(dataPin, clock, MSBFIRST, data);
// atau lakukan ini untuk LSBFIRST Serial
data = 500;
// geser keluar low byte
shiftOut(dataPin, clock, LSBFIRST, data);
// geser keluar high byte
shiftOut(dataPin, clock, LSBFIRST, (data >> 8));
Terjemahan dan edit dari https://www.arduino.cc/reference/en/language/functions/advanced-io/shiftout/
DELTA ELECTRONIC
Paulus Andi Nalwan, ST