Здравствуйте! Появился такой вопрос. У меня проект по сути являющийся бегущим огоньком. В этом проекте у меня будет подключено 7 сдвиговых регистров и к каждой ноге выхода будет подключен светодиод через резистор всего 54 светодиода. Каскадом у меня получилось подключить сдвиговые регистры информацию под черпнул здесь http://asio5.ru/?p=454 и здесь http://arduino.ru/Tutorial/registr_74HC595 скетч более подходящий нашел вот тут http://asio5.ru/?p=454 Код (C++): /Пин SH_CP int SH_CP = 4; //Пин ST_CP int ST_CP = 3; //Пин DS int DS = 2; void setup() { // Настраиваем выходы SH_CP, ST_CP, DS pinMode(SH_CP, OUTPUT); pinMode(ST_CP, OUTPUT); pinMode(DS, OUTPUT); } void loop() { // Цикл обхода 16 светодиодов for (int i = 0; i < 16; i++) { // Запись в регистр registerWrite(i, HIGH); // Задержка 0.5 с. delay(500); // Отключение предыдущего светодиода if (i > 0) { registerWrite(i - 1, LOW); } // Отключение последнего светодиода // ("предыдущий" для первого" else { registerWrite(15, LOW); } } } // Метод для отсылки данных в регистры void registerWrite(int num, int state) { // Для хранения 16 битов используется unsigned int unsigned int bitsToSend = 0; // 0b000000000000000 // Инициализируем начало приема данных digitalWrite(ST_CP, LOW); // Устанавливаем 1 в соответствующий бит bitWrite(bitsToSend, num, state); // 16 бит необходимо разделить на два байта: // И записать каждый байт в соответствующий регистр byte register1 = highByte(bitsToSend); byte register2 = lowByte(bitsToSend); // Последовательная передача данных на пин DS shiftOut(DS, SH_CP, MSBFIRST, register2); shiftOut(DS, SH_CP, MSBFIRST, register1); // Инициализируем окончание передачи данных. // Регистры подадут напряжение на указанные выходы digitalWrite(ST_CP, HIGH); } Этот скетч немного мне не подходит т.к. он зажигает только один светодиод а мне нужно что бы он оставлял гореть и предыдущие светодиоды и второе работать скетч начинает со второго сдвигового регистра при включение т.е. сначала загорается 9 и последующие светодиоды а мне нужно чтобы с первого начинал загорать светодиод. Помогите доработать скетч хочу сделать шкалутку виде такой http://vk.com/video-42128136_164506984 или такой
Я бы не доработал этот скетч, а написал заново, какой то он не такой. Отключение же предыдущего светодиода прямо так и подписано: Код (C++): // Отключение предыдущего светодиода if (i > 0) { registerWrite(i - 1, LOW); } закаменить его или удалить. Вообще не понятно зачем делать 16-битную переменную, чтобы потом разбивать ее на два байта? Если требуется просто зажечь все светодиоды от первого до последнего то идеально подойдет регистр "без защелки", вот, кстати примечательно, что нашлось ему применение почти сразу! В случае схемы с ним достаточно просто подавать единичку через 0,5 сек на пин DS, программка в пару строк. Может быть есть смысл сделать на нем? Для схемы же на 595 потребуется на каждый шаг формировать биты и загонять их в цепочку. Тоже не очень сложно, но времени затратить придется побольше.