shiftOut()

 

Выводит байт информации на порт вход/выхода последовательно (побитно). Вывод может осуществляться как с первого (левого), так и с последнего (правого) бита. Каждый бит последовательно подается на заданный порт, после чего подается сигнал на синхронизирующий порт вход/выход, информируя о доступности к считыванию бита.
 
Такой способ передачи данных называют последовательный протокол с синхронизацией. Он часто используется для взаимодействия микроконтроллеров с датчиками и сенсорами, а также другими микроконтроллерами. Последовательная передача с синхронизацией позволяет устройствам связываться на максимальной скорости. Смотрите также документацию (англ.) по SPI (Serial Peripheral Interface Protocol) - протокол последовательного периферийного интерфейса.
 
Синтаксис
shiftOut(dataPin, clockPin, bitOrder, value)
Параметры
  • dataPin: номер порта вход/выхода, на который выводятся биты (int)
  • clockPin: номер порта по которому производится синхронизация (int)
  • bitOrder: используемая последовательность вывода бит. MSBFIRST (Most Significant Bit First) — слева или LSBFIRST (Least Significant Bit First) — справа.
  • value: значение (байт) для вывода (byte)
Возвращаемое значение
нет
 
Замечание по использованию
Порт вывода (dataPin) и синхронизирующий порт (clockPin) должны быть предварительно сконфигурированы как порты вывода с помощью функции pinMode().
 
Текущая реализация функции shiftOut() может выводить только один байт (8 бит) информации, поэтому необходимо произвести несколько действий чтобы  вывести значения больше 255.
// Вывод будет MSBFIRST с первого (левого) бита 
int data = 500;
// выводим старший байт
shiftOut(dataPin, clock, MSBFIRST, (data >> 8));  
// выводим младший бит
shiftOut(dataPin, clock, MSBFIRST, data);

// вывод LSBFIRST с последнего бита
data = 500;
// выводим младший бит
shiftOut(dataPin, clock, LSBFIRST, data);  
// выводим старший бит
shiftOut(dataPin, clock, LSBFIRST, (data >> 8)); 
Пример
Пример вывода счетчика от 0 до 255 на сдвиговый регистр с последовательным вводом 74HC595.
//**************************************************************//
//  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                            //
//****************************************************************

//Порт подключенный к ST_CP 74HC595
int latchPin = 8;
//Порт подключенный к SH_CP  74HC595
int clockPin = 12;
//Порт подключенный к DS 74HC595
int dataPin = 11;

void setup() {
  //устанавливаем режим порта выхода
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  for (int j = 0; j < 256; j++) {
    //устанавливаем LOW на latchPin пока не окончена передача байта
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, j);   
    //устанавливаем HIGH на latchPin, чтобы проинформировать регистр, что передача окончена.
    digitalWrite(latchPin, HIGH);
    delay(1000);
  }
}

Справочник языка Arduino

*