Не гаснут полностью светодиоды
- Войдите на сайт для отправки комментариев
Пнд, 02/11/2015 - 18:45
Вопрос такой:
в бегущих огнях на светодиодах, плата Arduino Nono, по команде аналогичной этой
digitalWrite(ledPin_2, LOW);
светодиоды полностью не гаснут, наблюдается очень слабое свечение.
но при новом цикле или рестарте кнопкой наблюдается полное выключение
В чем может быть проблема?
Схема включения и скетч - всё стандартное, да?
Да, все стандартно
Просто игрушка для изучения , кучка светодиодов где каждый последовательно с резистором на 470ом, но почему так происходит?
unsigned long time; const int ledPin_2 = 2; const int ledPin_3 = 3; const int ledPin_4 = 4; const int ledPin_5 = 5; const int ledPin_6 = 6; const int ledPin_7 = 7; const int ledPin_8 = 8; const int ledPin_9 = 9; const int ledPin_10 = 10; const int ledPin_11 = 11; // Variables will change: int ledState_2 = LOW; // этой переменной устанавливаем состояние светодиода int ledState_3 = LOW; // этой переменной устанавливаем состояние светодиода int ledState_4 = LOW; // этой переменной устанавливаем состояние светодиода int ledState_5 = LOW; // этой переменной устанавливаем состояние светодиода int ledState_6 = LOW; // этой переменной устанавливаем состояние светодиода int ledState_7 = LOW; // этой переменной устанавливаем состояние светодиода int ledState_8 = LOW; // этой переменной устанавливаем состояние светодиода int ledState_9 = LOW; // этой переменной устанавливаем состояние светодиода int ledState_10 = LOW; // этой переменной устанавливаем состояние светодиода int ledState_11 = LOW; // этой переменной устанавливаем состояние светодиода long previousMillis_2 = 0; // храним время последнего переключения светодиода long previousMillis_3 = 0; // храним время последнего переключения светодиода long previousMillis_4 = 0; // храним время последнего переключения светодиода long previousMillis_5 = 0; // храним время последнего переключения светодиода long previousMillis_6 = 0; // храним время последнего переключения светодиода long previousMillis_7 = 0; // храним время последнего переключения светодиода long previousMillis_8 = 0; // храним время последнего переключения светодиода long previousMillis_9 = 0; // храним время последнего переключения светодиода long previousMillis_10 = 0; // храним время последнего переключения светодиода long previousMillis_11 = 0; // храним время последнего переключения светодиода long interval = 950; // интервал между включение/выключением светодиода (1 секунда) // the setup function runs once when you press reset or power the board void setup() { for (int p=2; p <= 11; p++) { pinMode(p, OUTPUT); // задаем режим выхода для порта, подключенного к светодиоду } Serial.begin(9600); } void loop() { // здесь будет код, который будет работать постоянно // и который не должен останавливаться на время между переключениями свето unsigned long currentMillis = millis(); /* //проверяем не прошел ли нужный интервал, если прошел то if(currentMillis - previousMillis_2 > interval) { digitalWrite(ledPin_2, HIGH); } if(currentMillis - previousMillis_2 > interval*2) { // сохраняем время последнего переключения previousMillis_3 = currentMillis; digitalWrite(ledPin_3, HIGH); } if(currentMillis - previousMillis_2 > interval*3) { digitalWrite(ledPin_4, HIGH); } */ if(currentMillis - previousMillis_2 > interval*1) { digitalWrite(ledPin_2, LOW); digitalWrite(ledPin_5, HIGH); } if(currentMillis - previousMillis_2 > interval*2) { digitalWrite(ledPin_2, LOW); digitalWrite(ledPin_6, HIGH); } if(currentMillis - previousMillis_2 > interval*3) { digitalWrite(ledPin_3, LOW); digitalWrite(ledPin_7, HIGH); } if(currentMillis - previousMillis_2 > interval*4) { digitalWrite(ledPin_4, LOW); digitalWrite(ledPin_8, HIGH); } if(currentMillis - previousMillis_2 > interval*5) { digitalWrite(ledPin_5, LOW); digitalWrite(ledPin_9, HIGH); } if(currentMillis - previousMillis_2 > interval*6) { digitalWrite(ledPin_6, LOW); digitalWrite(ledPin_10, HIGH); } if(currentMillis - previousMillis_2 > interval*7) { digitalWrite(ledPin_7, LOW); digitalWrite(ledPin_11, HIGH); } if(currentMillis - previousMillis_2 > interval*8) { digitalWrite(ledPin_8, LOW); digitalWrite(ledPin_2, HIGH); } if(currentMillis - previousMillis_2 > interval*9) { digitalWrite(ledPin_9, LOW); digitalWrite(ledPin_3, HIGH); } if(currentMillis - previousMillis_2 > interval*10) { digitalWrite(ledPin_10, LOW); digitalWrite(ledPin_4, HIGH); } if(currentMillis - previousMillis_2 > interval*11) { digitalWrite(ledPin_11, LOW); digitalWrite(ledPin_5, HIGH); previousMillis_2 = currentMillis; } Serial.println(millis()); }И все-таки, хотелось бы увидеть эту "стандартную" схему.
Проблема в программе, схема вряд ли.
Начиная с начала светик 2 гаснет, начиная с 8 секунды он начинает метаться, например в строках 73 и 79 он гасится, а в 102 включается. Получается, что примерно с 8 по 11 секунду это светодиод гасят и практически сразу включают. Потому, естественно, он якобы не выключается. Еще раз, к 11-ой секунде буду последовательно срабатывать ВСЕ условия. Т.е. через секунду сработает условие 1, еще через секунду сработают условия 1 и 2, еще через секунду сработают условия 1, 2 и 3 и т.п.
Это ни разу не бегущие огни, это просто быстрое включение/выключение одних и тех же светодиодов. Насколько я знаю, бегущие огни, в простейщем варианте, это когда в начале включают один светодиод, через определенный интервал его выключают и включают другой и так далее по цепочке, а здесь совершенно другой алгоритм.
Бедные светодиодики.
Вопрос такой:
в бегущих огнях на светодиодах, плата Arduino Nono, по команде аналогичной этой
digitalWrite(ledPin_2, LOW);
светодиоды полностью не гаснут, наблюдается очень слабое свечение.
но при новом цикле или рестарте кнопкой наблюдается полное выключение
В чем может быть проблема?
ошибка в троке 126, т.к. событие произойдет после выполнения условия 122 if(currentMillis - previousMillis_2 > interval*11) т.е. все условия будут выполняться и делать они будут это очень быстро , что и наблюдается. цикл примерно 10 сек. некое подобие ШИМ получилось (пример стр 80 и 99)
Интересно, сэр слышал про такую вещь, как циклы?
#define interval 950 void setup() { for(byte i = 2; i < 12; i++) pinMode(i, OUTPUT); } void loop() { int state = (millis() / interval) % 10; for(byte i = 2; i < 12; i++) digitalWrite(i, (i-2) == state); }Интересно, сэр слышал про такую вещь, как циклы?
вот вы прям все и сразу хотите, там вообще непонятно что написано. Пущай для начала свой код подымит, а уже потом, когда поймет, показать ТС как правильно писать.
Добрый день всем!
Вообщем я код на форум не правильный выставил
В нём не возможно было этого увидеть,
но проблема есть реальная
код был нгаписан через delay
и можно было видеть как светодиоды слегка светятся до новой итеракции
вот этот код
// the setup function runs once when you press reset or power the board void setup() { // initialize digital pin 13 as an output. pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); } // the loop function runs over and over again forever void loop() { for (int k=12; k > 0; k=k-2){ for (int i=1; i <= 15; i++){ digitalWrite(2, HIGH); // turn the LED on (HIGH is the voltage level) delay(2); digitalWrite(2, LOW); delay(k); } } digitalWrite(2, HIGH); // turn the LED on (HIGH is the voltage level) delay(200); // wait for a second for (int k=12; k > 0; k=k-2){ for (int i=1; i <= 15; i++){ digitalWrite(3, HIGH); // turn the LED on (HIGH is the voltage level) delay(2); digitalWrite(3, LOW); delay(k); } } digitalWrite(3, HIGH); // turn the LED on (HIGH is the voltage level) delay(200); // wait for a second digitalWrite(4, HIGH); // turn the LED on (HIGH is the voltage level) delay(200); // wait for a second digitalWrite(5, HIGH); // turn the LED on (HIGH is the voltage level) delay(200); // wait for a second digitalWrite(6, HIGH); // turn the LED on (HIGH is the voltage level) delay(200); // wait for a second digitalWrite(7, HIGH); // turn the LED on (HIGH is the voltage level) delay(1); // wait for a second digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(5, HIGH); // turn the LED on (HIGH is the voltage level) delay(100); // wait for a second digitalWrite(6, HIGH); // turn the LED on (HIGH is the voltage level) delay(100); // wait for a second digitalWrite(7, HIGH); delay(100); digitalWrite(8, HIGH); // turn the LED on (HIGH is the voltage level) delay(200); // wait for a second digitalWrite(9, HIGH); // turn the LED on (HIGH is the voltage level) delay(200); // wait for a second digitalWrite(10, HIGH); // turn the LED on (HIGH is the voltage level) delay(200); // wait for a second digitalWrite(11, HIGH); // turn the LED on (HIGH is the voltage level) delay(500); digitalWrite(2, LOW); // turn the LED off by making the voltage LOW digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); delay(1000); // wait for a second }дело не в коде, их было много подобных бегущем огням и до новой итеракции диоды всё равно немного светились
Ну тогда к телепатам, без схемы, да еще сегодня один скетч завтра другой.
дело не в коде, их было много подобных бегущем огням и до новой итеракции диоды всё равно немного светились
проверяем схему :) надеюсь ноги сами подставите?
/* Blink Turns on an LED on for one second, then off for one second, repeatedly. This example code is in the public domain. */ // Pin 13 has an LED connected on most Arduino boards. // give it a name: int led = 13; // the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(led, OUTPUT); } // the loop routine runs over and over again forever: void loop() { digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(led, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second }всем привет! и спасибо за участие
Проблема действительно была
Её наблюдали несколько человек, пришлось взять и померить тестером
Сведодиоды плоские примерно 1 см один от другого в ряд
Даже Один светящийся подсвечивал по сторонам и создавал эффект не полного выключения
Еще раз всем спасибо и тему можно закрывать