int latchPin = 9; //Пин подключен к ST_CP входу 74HC595
int clockPin = 7; //Пин подключен к SH_CP входу 74HC595
int dataPin = 8; //Пин подключен к DS входу 74HC595
bool flagSW = false; //флаг для переключателя включения габаритов
bool LED_On = false;
byte LedSegm[1][16] = { };// массив номеров пинов, к которым подключены светодиоды
const unsigned long DELAY = 100UL; //задержка анимации
char inputString[2];
void setup() {
//устанавливаем режим OUTPUT
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
//Serial.begin(9600);
//Serial.println("reset");
pinMode(10, INPUT_PULLUP); //пин, на котором включение габаритов
}
void loop() {
flagSW = SwBtn(10); //проверяем, получен ли сигнал зажечь габариты
if (flagSW == true && LED_On == false) {
LEDswOn();
LED_On = true;
};
if (flagSW == false && LED_On == true) {
LEDswOff();
LED_On = false;
}
}
// этот метод отсылает бит на сдвиговый регистр
void registerWrite(const byte ledState)
{
shiftOut(dataPin, clockPin, LSBFIRST, ledState); // записать сатус пина
// передернуть затвор:
digitalWrite(latchPin, LOW); // открыть затвор
digitalWrite(latchPin, HIGH); // закрыть затвор
}
bool SwBtn(int paramA) { //обработка переключателя режимов
uint32_t btnTimer = 0;
bool btnState = !digitalRead(paramA);
bool flag = false;
if (btnState && !flag && millis() - btnTimer > 100) { //габариты включены
flag = true;
btnTimer = millis();
}
if (!btnState && flag && millis() - btnTimer > 100) { //габариты выключены
flag = false;
btnTimer = millis();
}
return (flag);
}
void LEDswOn() { //зажигание светодиодов
// проходим циклом по всем 16 выходам двух регистров
byte ledsPattern{0};
const byte leds_patterns[]{
0b10000001,
0b01000010,
0b00100100,
0b00011000,
0b00100100,
0b01000010,
0b10000001
};
const byte patternsNum = sizeof(leds_patterns) / sizeof(*leds_patterns); // определяем длину массива
for (byte i = 0; i < patternsNum; ++i)
{
registerWrite(leds_patterns[i]);
delay(DELAY); // задержка чтобы видеть изменение картинки
}
/* for (byte i = 0; i < 8; ++i)
{
bitSet(ledsPattern, i);
registerWrite(ledsPattern);
delay(DELAY);
} */
}
//гашение светодиодов
void LEDswOff() {
byte ledsPattern{0};
for (byte i = 8; i > 0; --i)
{
bitClear(ledsPattern, i);
registerWrite(ledsPattern);
delay(DELAY);
}
}