Выводит байт информации на порт вход/выхода последовательно (побитно). Вывод может осуществляться как с первого (левого), так и с последнего (правого) бита. Каждый бит последовательно подается на заданный порт, после чего подается сигнал на синхронизирующий порт вход/выход, информируя о доступности к считыванию бита.
Такой способ передачи данных называют последовательный протокол с синхронизацией. Он часто используется для взаимодействия микроконтроллеров с датчиками и сенсорами, а также другими микроконтроллерами. Последовательная передача с синхронизацией позволяет устройствам связываться на максимальной скорости. Смотрите также документацию (англ.) по 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.
shiftOut(dataPin, clock, MSBFIRST, (data >> 8)); |
shiftOut(dataPin, clock, MSBFIRST, data); |
shiftOut(dataPin, clock, LSBFIRST, data); |
shiftOut(dataPin, clock, LSBFIRST, (data >> 8)); |
Пример
Пример вывода счетчика от 0 до 255 на сдвиговый регистр с последовательным вводом 74HC595.
pinMode(latchPin, OUTPUT); |
pinMode(clockPin, OUTPUT); |
pinMode(dataPin, OUTPUT); |
for ( int j = 0; j < 256; j++) { |
digitalWrite(latchPin, LOW); |
shiftOut(dataPin, clockPin, LSBFIRST, j); |
digitalWrite(latchPin, HIGH); |
Справочник языка Arduino