Последовательное включение диодов друг за другом, прошу помощи в скетче
- Войдите на сайт для отправки комментариев
Здравствуйте, уважаемые участники форума.
В наличии arduino uno, 20 диодов, 3 сдвиговых регистра и огромное желание сделать так, чтобы эти 20 диодов включились друг за другом в столбик с 1 по 20, простояли включёнными некоторое время, далее всё погасло и столбик начинал расти заново. Как некая шкала или индикатор.
За некоторое время изучения интернетов на предмет подобных решений родился скетч. Его итерации умеют:
-зажигать диоды по отдельности, (т.е. первый горит,следующий гаснет)сверху вниз
-и снизу вверх,
- от любого диода в столбике до следующего любого диода,
- все 20 диодов включаются одновременно
- одновременно включается рандомное число диодов в столбике
..но научить его работать так, как мне надо не получилось.
На всякий случай, выкладываю скетч, который зажигает и гасит диоды по отдельности друг за другом
//ST_CP вход const int latchPin = 8; //SH_CP вход const int clockPin = 12; //DS вход const int dataPin = 11; void setup() { //режим OUTPUT pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); } void loop() { // проходим по всем выходам трёх регистров, 25 потому, что если 24 // то последний диод не горит for (int thisLed = 0; thisLed < 25; thisLed++) { // записываем сигнал в регистр для очередного светодиода registerWrite(thisLed, LOW); // если это не первый светодиод, то отключаем предыдущий if (thisLed > 0) { registerWrite(thisLed - 1, HIGH); } // если это первый светодиод, то отключаем последний else { registerWrite(15, LOW); } // делаем паузу delay(250); } } // этим куском кода подключаем регистры в нужном кол-ве void registerWrite(int whichPin, int whichState) { // инициализируем и обнуляем байт byte bitsToSend[3] = {0, 0, 0}; digitalWrite(latchPin, LOW); // устанавливаем HIGH в соответствующем бите bitWrite(bitsToSend[whichPin/8], whichPin%8, whichState); // проталкиваем байт в регистр for(int i = 0; i < 3; i++) shiftOut(dataPin, clockPin, LSBFIRST, bitsToSend[i]); // "защелкиваем" регистр, чтобы байт появился на его выходах digitalWrite(latchPin, HIGH); }
Помогите, пожалуйста, в решении
Для сдвиговых регистров 595 есть библиотека Shift595:
https://sites.google.com/site/shift595arduino/
Здравствуйте. Спасибо за ответ. Подключение этой библиотеки даёт одновременное включение всех диодов . Также у меня получалось в процессе манипуляций с кодом включать и гасить одновременно по несколько диодов. Но не последовательно друг за другом.
Valera19701,
Вы решили подшутить над ТС или вправду ошиблись (например, в районе 20-ой строки, да и вообще)? Если первое, то это ... неспортивно как-то.
В общем, конечно, одна из первых попыток. И mills, и shift пробовала
Есть смутные сомнения в том, что ко всему прочему, что-то напутано в подключении каскада
ЕвгенийП
было когдато взято отсюда, и давно переделано
http://interkot.ru/blog/robototechnika/8-svetodiodob-i-sdvigovoy-registr/
Изначально я ориентировалась вот на этот перевод Множим выходы с помощью сдвигового регистра 74 HC595
Samum, Вы смеетесь?
чтобы эти 20 диодов включились друг за другом в столбик с 1 по 20, простояли включёнными некоторое время
За некоторое время изучения интернетов на предмет подобных решений родился скетч. Его итерации умеют:
-зажигать диоды по отдельности, (т.е. первый горит,следующий гаснет)сверху вниз
Чем отличается второй скетч от первого (т.е. тот, что есть, от того, что нужен)?
Единственной маленькой деталью: в первом случае не нужно гасить уже зажженый светодиод.
Другими словами, нужно просто выкинуть из имеющегося скетча лишнее - команду гашения предыдущего светодиода.
Видео на эту тему:
http://www.youtube.com/watch?v=582NNt3tDmQ
В наличии arduino uno, 20 диодов, 3 сдвиговых регистра и огромное желание сделать так, чтобы эти 20 диодов включились друг за другом в столбик с 1 по 20, простояли включёнными некоторое время, далее всё погасло и столбик начинал расти заново. Как некая шкала или индикатор.
Для данного количества диодов достаточно одной переменной unsigned long int.
Отдельные биты ещё можно менять функцией bitSet()
Более подробный справочник по языку Ардуино здесь:
http://atmel.ucoz.ru/publ/spravochnik_po_jazyku/1-1-0-1