#include <SPI.h>
const int STCPPin = 8; // пин, управляющий выходной защёлкой
void setup()
{
SPI.begin();
pinMode(STCPPin, OUTPUT);
digitalWrite(STCPPin, LOW);
SPI.transfer(0); //сброс всех выходов в ноль
digitalWrite(STCPPin, HIGH); //формирование фронта на выходную защелку
digitalWrite(STCPPin, LOW);
}
// Кольцевой сдвиг
void rotateLeft(uint8_t &bits)
{
uint8_t high_bit = bits & (1 << 7) ? 1 : 0;
bits = (bits << 1) | high_bit;
}
void loop()
{
SPI.setDataMode(SPI_MODE0);
//SPI.setBitOrder(LSBFIRST);
//SPI.setClockDivider(2);
static uint8_t nomad = 1; //активен только один светодиод
SPI.transfer(nomad);
digitalWrite(STCPPin, HIGH); //формирование фронта на выходную защелку
digitalWrite(STCPPin, LOW);
rotateLeft(nomad); //сдвиг бита на один разрд
delay(500);
}
// //Пин подключен к ST_CP входу 74HC595
// const int latchPin = 8;
// //Пин подключен к SH_CP входу 74HC595
// const int clockPin = 13;
// //Пин подключен к DS входу 74HC595
// const int dataPin = 11;
// char inputString[2];
// void setup() {
// //устанавливаем режим OUTPUT
// pinMode(latchPin, OUTPUT);
// pinMode(dataPin, OUTPUT);
// pinMode(clockPin, OUTPUT);
// Serial.begin(9600);
// Serial.println("reset");
// }
// void loop() {
// // проходим циклом по всем 16 выходам двух регистров
// for (int thisLed = 0; thisLed < 16; thisLed++) {
// // записываем сигнал в регистр для очередного светодиода
// registerWrite(thisLed, HIGH);
// delay(500);
// // если это не первый светодиод, то отключаем предыдущий
// if (thisLed > 0) {
// registerWrite(thisLed - 1, LOW);
// }
// // если это первый светодиод, то отключаем последний
// else {
// registerWrite(15, LOW);
// }
// // делаем паузу перед следующией итерацией
// }
// }
// // этот метод отсылает бит на сдвиговый регистр
// void registerWrite(int whichPin, int whichState) {
// // для хранения 16 битов используем unsigned int
// unsigned int bitsToSend = 0;
// // выключаем светодиоды на время передачи битов
// digitalWrite(latchPin, LOW);
// // устанавливаем HIGH в соответствующий бит
// bitWrite(bitsToSend, whichPin, whichState);
// // разбиваем наши 16 бит на два байта
// // для записи в первый и второй регистр
// byte registerOne = highByte(bitsToSend);
// byte registerTwo = lowByte(bitsToSend);
// // "проталкиваем" байты в регистры
// shiftOut(dataPin, clockPin, MSBFIRST, registerTwo);
// shiftOut(dataPin, clockPin, MSBFIRST, registerOne);
// // "защелкиваем" регистр, чтобы биты появились на выходах регистра
// digitalWrite(latchPin, HIGH);
// }