shiftIn()

Описание

Считывает байт (8 бит) данных побитово с пина данных. Начинает с самого старшего (т.е. крайнего левого) или самого младшего (крайнего правого) бита. Для каждого бита тактовый пин устанавливается в HIGH, следующий бит считывается с линии данных, а затем тактовый пин устанавливается в LOW.

Примечание

Если вы взаимодействуете с устройством, тактируемым по нарастающему фронту, необходимо убедиться, что тактовый пин находится в LOW перед первым вызовом shiftIn(), например, с помощью вызова digitalWrite(clockPin, LOW).

Примечание

Это программная реализация; Arduino также предоставляет библиотеку SPI, которая использует аппаратную реализацию. Она работает быстрее, но только на определённых пинах.

Синтаксис

Используйте следующую функцию для синхронного считывания последовательных данных:

byte incoming = shiftIn(dataPin, clockPin, bitOrder)

Параметры

Функция принимает следующие параметры:

  • dataPin: пин, с которого считываются данные. Допустимые типы данных: int.

  • clockPin: пин, обеспечивающий тактовый сигнал.

  • bitOrder: порядок сдвига битов: MSBFIRST или LSBFIRST (старший бит первым или младший бит первым).

Возвращаемое значение

Возвращает байт (0-255), представляющий 8 бит, считанных с устройства. Тип данных: byte.

Пример кода

#define DATA_PIN  4    // Пин, подключённый к выходу последовательных данных
#define CLOCK_PIN 5    // Пин, подключённый к входу тактового сигнала (CLK)

void setup() {
  pinMode(DATA_PIN, INPUT);
  pinMode(CLOCK_PIN, OUTPUT);

  Serial.begin(9600);
}

void loop() {
  // Считываем 8 бит с линии данных с помощью shiftIn()
  byte dataByte = shiftIn(DATA_PIN, CLOCK_PIN, MSBFIRST);

  // Выводим байт в двоичном формате
  Serial.print("Received Byte: ");
  Serial.println(dataByte, BIN);

  delay(1000); // Ждём перед следующим чтением
}

См. также