Прошу помощи уважаемые форумчане! Имеется Ard-UNO, которое включает последовательно 11 светодиодов, но с одинаковой задержкой, программу брал в интернете, все работает. Но нужно, что бы они загорались так же поочередно и можно было бы регулировать задержку между диодами, независимо друг от друга. Это возможно? В программировании не силен, на 6-ом десятке лет плохо идет процесс обучения. Направьте на путь истинный пожалуйста.
Вот он. byte i; // задаем переменную для цифровых выходов byte LedMax = 13; // максимальное количество выходов (диодов) void setup() { // задаем пины со 2 по 13, как выходы (OUTPUT) for(i=2; i<LedMax; i++) { pinMode(i, OUTPUT); } } void loop() { // последовательно зажигаем светодиоды с 2 по 13 выход for(i=2; i<LedMax; i++) { digitalWrite(i, HIGH); delay(5000); } delay(1000); // ставим паузу в 1 секунду } Там дальше продолжение было, они гасли в обратной последовательности. Но это мне не надо и код отсек лишний. А надо чтоб зажглись и так все и осталось. М.б. и delay(1000); // ставим паузу в 1 секунду тоже лишнее. Ну вот так как то.
Код (C++): // количество светодиодов const byte numLeds = 12; // массив0 с номерами пинов, к которым подключены светодиоды const byte ledPin[numLeds] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; // порядок может быть не последовательным // массив1 с длительностью свечения для каждого светодиода, мсек const unsigned int duration[numLeds] = {50, 100, 150, 200, 250, 300, 350, 400, 450, 500, 550, 600}; // массив2 с длительностью паузы перед включением следующего светодиода, мсек const unsigned int pause[numLeds] = {100, 300, 100, 300, 0, 0, 0, 0, 500, 500, 0, 250}; void setup() { // задаем пины из массива0, как выходы (OUTPUT) for (byte i = 0; i < numLeds; i++) pinMode(ledPin[i], OUTPUT); } void loop() { // зажигаем светодиоды на заданную в массиве1 длительность, потом гасим и сразу зажигаем следующий for (byte i = 0; i < numLeds; i++) { digitalWrite(ledPin[i], HIGH); delay(duration[i]); digitalWrite(ledPin[i], LOW); } // последовательно гасим все for (byte i = 0; i < numLeds; i++) { digitalWrite(ledPin[i], LOW); delay(80); } // зажигаем светодиод, потом ждем заданную в массиве2 паузу и зажигаем следующий for (byte i = 0; i < numLeds; i++) { digitalWrite(ledPin[i], HIGH); delay(pause[i]); digitalWrite(ledPin[i], LOW); } // последовательно гасим все, в обратном порядке delay(500); for (byte i = 0; i < numLeds; i++) { digitalWrite(numLeds - ledPin[i], LOW); delay(100); } while(1); // тупим и больше ничего не делаем до нажатия Reset }
Tomasina, все работает, только немного поменял состояние "высокое! на "низкое", что бы предыдущий не гаснул и задержки поменял. А так все здорово! В личку номер тлф скинь, счет немного пополню, выручил сильно, может еще обращюсь. Учить буду С++...:-( // количество светодиодов const byte numLeds = 12; // массив0 с номерами пинов, к которым подключены светодиоды const byte ledPin[numLeds] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; // порядок может быть не последовательным // массив1 с длительностью свечения для каждого светодиода, мсек const unsigned int duration[numLeds] = {5000, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000, 5500, 6000}; // массив2 с длительностью паузы перед включением следующего светодиода, мсек const unsigned int pause[numLeds] = {1000, 3000, 1000, 3000, 1000,1000, 1000, 1000, 5000, 5000, 1000, 2500}; void setup() { // задаем пины из массива0, как выходы (OUTPUT) for (byte i = 0; i < numLeds; i++) pinMode(ledPin, OUTPUT); } void loop() { // зажигаем светодиод, потом ждем заданную в массиве2 паузу и зажигаем следующий for (byte i = 0; i < numLeds; i++) { digitalWrite(ledPin, HIGH); delay(pause); digitalWrite(ledPin,HIGH); } // последовательно гасим все, в обратном порядке delay(5000); for (byte i = 0; i < numLeds; i++) { digitalWrite(numLeds - ledPin, LOW); delay(10); } while(1); // тупим и больше ничего не делаем до нажатия Reset }
тогда вот это лишнее, оно повторно включает уже включенный светодиод: Код (C++): digitalWrite(ledPin,HIGH); delay(pause); digitalWrite(ledPin,HIGH); // вот это лишнее Поможешь советом следующему новичку, это сплачивает сильнее
Принял. Новичкам тяжко осваивать, но без этого (учебы) никак. Спрошу еще пару вопросов, наберусь наглости. Мне на базе этого скетча нужно чтоб первый светодиод погас через 5 сек. и больше не включался, а третий включился, после второго (второй не гаснет), поморгал в течении 3 сек с частотой 4-5Гц (0.2-0.25 сек.) и тоже отрубился. Остальные как и в программе дальше отработали друг за другом. Можно конечно поставить две линии задержки + мультивибратор, если программно сложно будет реализовать. Что подскажите?
Подскажите пожалуйста, что нужно добавить в код (пост №4), чтобы с выводов 11, 12, 13 пропал высокий уровень. С 2 по 10 все в норме, но надо все их загасить.