Здравствуйте. Посоветуйте пожалуйста такую микросхему, чтобы с помощью нее и одного цифрового выхода ардуино можно было управлять большим количеством светодиодов (вкл/выкл). Большим, например, десятью или двадцатью. Спасибо.
С помощью одного выхода, наверное, что-то и можно придумать, но первое, что приходит в голову — сдвиговый регистр 74HC595. Есть в чип-и-дипе. 2 входа — 8 выходов. Их можно стэкать, чтобы каждый раз получать на 7 выходов больше. Если нужно управлять яркостью, т.е. нужен ШИМ, придётся где-нибудь раздобыть TLC5940, 16 выходов, SPI-интерфейс (4 пина), м-м-м…
Пока жду сдвиговые регистры и есть время для баловства собрал индикатор мощности. Просто воткнул светодиоды через резисторы в 3,4,5,6,7,8,9,10,11,12 выходы. А в аудио-ноль вход пустил звук (только потихонечку, чтобы случаем больше 5 вольт туда не подать). С также соединил аудио-ноль с землей 10к резистором. Скетч: Код (Text): int led = 13; void setup() { for(int i=0; i<11; i++) pinMode(3 + i, OUTPUT); // Красивая инициализация for(int i=10; i>=0; i--) { digitalWrite(3 + i, true); delay(50); } for(int i=10; i>=0; i--) { delay(50); digitalWrite(3 + i, false); } } unsigned long time; // Текущее время unsigned int value; // Значение сигнала /* Максимальное значение и его задержка на 50 мс нужны для красоты, чтобы диоды не моргали как сумасшедшые. */ unsigned int value_max = 0; // Максимальное значение за 50 мс. unsigned int value_max_time = 0; // Время, когда было установлено максимальное значение /* Примерно то же самое, но для пиков. */ unsigned int peak_value; unsigned int peak_time; unsigned int peak_wait; void loop() { time = millis(); /* В результате данной формулы я хотел получить значение от 1 до 10. Не рекомендую ставить делитель больше 90, чтобы не спалить плату. */ value = analogRead(0) / 20; // Устанавливаем максимальное значение if (value > value_max) { value_max = value; value_max_time = time; } // Каждые 50 мс отбавляем от него 1. if (time > 50 + value_max_time) { if (value_max > 0) value_max --; value_max_time = time; } // Примерно то же самое с пиками, но начинаем отбавлять от пика через полсекунды. if (value_max > peak_value) { peak_value = value_max; peak_time = time; peak_wait = 500; } if (time > peak_wait + peak_time) { if (peak_value > 0) peak_value --; peak_wait = 50; peak_time = time; } if (peak_value > 9) peak_value = 9; // Устанавливаем состояние светодиодов. for(int i=0; i<11; i++) digitalWrite(3 + i, (i <= value_max) || (i == peak_value )); } Как придут регистры напишу код с их учетом и на два звуковых канала.