int timer = 200; // Чем выше число, тем медленнее тайминг.
byte ledPins[] = { 2, 6, 4, 5, 9, 7, 8, 3};// массив номеров пинов, к которым подключены светодиоды
byte pinCount = 8; // количество пинов (длина массива)
byte LightsSet[2][8] = {
{ 2, 3, 4, 6, 9, 7, 8, 5},
{9, 8, 7, 6, 5, 4, 3, 2},
}; //набор пресетов габаритов
int actPreset = 1; //номер активного пресета
bool flagSW = false; //флаг для переключателя включения габаритов
bool flagBTN = false; //флаг для обработчика нажатия кнопки пресетов
void setup() {
//Serial.begin(9600);
pinMode(10, INPUT_PULLUP);
// элементы массива нумеруются от 0 до (pinCount - 1).
//цикл for для инициализации каждого пина как выход:
for (int pinIndex = 0; pinIndex < pinCount; pinIndex++) {
pinMode(ledPins[pinIndex], OUTPUT);
}
}
void loop() {
/* https://arduino.ru/forum/programmirovanie/kopirovanie-chasti-massiva?ysclid=ltuczv3s56740726308
flagBTN = SwBtn(11); //переключаем пресеты габаритов
if (flagBTN == true) {
actPreset++; //прибавляем переменную-номер активного пресета
memcpy(ledPins, LightsSet[actPreset], 8); //пушим активный пресет из массива
}
*/
flagSW = SwBtn(10); //проверяем, получен ли сигнал зажечь габариты
if (flagSW == true) {
LEDswOn();
};
if (flagSW == false) {
LEDswOff();
}
}
void LEDswOn() { //зажигание светодиодов
for (int pinIndex = 0; pinIndex < pinCount; pinIndex++) {
// включаем пин:
digitalWrite(ledPins[pinIndex], HIGH);
delay(timer);
}
}
void LEDswOff() { //гашение светодиодов
for (int pinIndex = pinCount - 1; pinIndex >= 0; pinIndex--) {
delay(timer);
// выключаем пин:
digitalWrite(ledPins[pinIndex], LOW);
}
}
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);
}