const int inputPin = A0; const int outputPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; const int numPins = sizeof(outputPins)/sizeof(outputPins[0]); void setup() { pinMode(inputPin, INPUT); for (int i = 0; i < numPins; i++) { pinMode(outputPins[i], OUTPUT); digitalWrite(outputPins[i], LOW); } } void loop() { int impulseCount = 0; // Получение первого пакета и подсчет количества импульсов for (int i = 0; i < 12; i++) { int value = digitalRead(inputPin); if (value == HIGH) { impulseCount++; } delayMicroseconds(100); // Регулируйте задержку в зависимости от скорости передачи сигнала } // Поиск самого длинного импульса в последующих пакетах while (true) { // Подсчет длины каждого импульса и поиск самого длинного int longestImpulse = 0; for (int i = 0; i < 12; i++) { int value = digitalRead(inputPin); if (value == HIGH) { int impulseLength = 1; while (digitalRead(inputPin) == HIGH) { impulseLength++; delayMicroseconds(100); // Регулируйте задержку в зависимости от скорости передачи сигнала } if (impulseLength > longestImpulse) { longestImpulse = impulseLength; } } delayMicroseconds(100); // Регулируйте задержку в зависимости от скорости передачи сигнала } // Активация соответствующего цифрового выхода for (int i = 0; i < numPins; i++) { if (longestImpulse >= impulseCount * 3) { digitalWrite(outputPins[i], HIGH); } else { digitalWrite(outputPins[i], LOW); } } delay(1); // Пауза между пакетами } } В данном коде используется массив outputPins, который содержит номера цифровых выходов D0...D11. Сигнал соответствующего выхода будет активирован, если найденный самый длинный импульс больше или равен величине impulseCount (количество импульсов в первом пакете) умноженной на 3.const int inputPin = A0; const int outputPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; const int numPins = sizeof(outputPins)/sizeof(outputPins[0]); void setup() { pinMode(inputPin, INPUT); for (int i = 0; i < numPins; i++) { pinMode(outputPins[i], OUTPUT); digitalWrite(outputPins[i], LOW); } } void loop() { int impulseCount = 0; // Получение первого пакета и подсчет количества импульсов for (int i = 0; i < 12; i++) { int value = digitalRead(inputPin); if (value == HIGH) { impulseCount++; } delayMicroseconds(100); // Регулируйте задержку в зависимости от скорости передачи сигнала } // Поиск самого длинного импульса в последующих пакетах while (true) { // Подсчет длины каждого импульса и поиск самого длинного int longestImpulse = 0; for (int i = 0; i < 12; i++) { int value = digitalRead(inputPin); if (value == HIGH) { int impulseLength = 1; while (digitalRead(inputPin) == HIGH) { impulseLength++; delayMicroseconds(100); // Регулируйте задержку в зависимости от скорости передачи сигнала } if (impulseLength > longestImpulse) { longestImpulse = impulseLength; } } delayMicroseconds(100); // Регулируйте задержку в зависимости от скорости передачи сигнала } // Активация соответствующего цифрового выхода for (int i = 0; i < numPins; i++) { if (longestImpulse >= impulseCount * 3) { digitalWrite(outputPins[i], HIGH); } else { digitalWrite(outputPins[i], LOW); } } delay(1); // Пауза между пакетами } } // В данном коде используется массив outputPins, который содержит номера цифровых выходов D0...D11. // Сигнал соответствующего выхода будет активирован, // если найденный самый длинный импульс больше или равен величине impulseCount (количество импульсов в первом пакете) умноженной на 3.