Потому что функцию R() надо вызывать в начале функции D() (ну или перед ней). А так да, 26 + 26 = 52 импульса получается.
Все работает, просто магия какая то)) Только я это самое сделал в коде и вы пишите как решить это дело)))
Проблема с той же микросхемой. Программа должна писать последовательно цифры(0, 1, 2, 3, 4, 5, 6, 7, 8, 9). При запуске, он пропускает 4. Код (C++): #define CLOCK_PIN 13 #define RESET_PIN 12 /* * Функция resetNumber обнуляет текущее значение * на счётчике */ void resetNumber() { // Для сброса на мгновение ставим контакт // reset в HIGH и возвращаем обратно в LOW digitalWrite(RESET_PIN, HIGH); digitalWrite(RESET_PIN, LOW); } /* * Функция showNumber устанавливает показания индикаторов * в заданное неотрицательное число `n` вне зависимости * от предыдущего значения */ void showNumber(int n) { // Первым делом обнуляем текущее значение resetNumber(); // Далее быстро «прокликиваем» счётчик до нужного // значения while (n--) { digitalWrite(CLOCK_PIN, HIGH); digitalWrite(CLOCK_PIN, LOW); } } void setup() { pinMode(RESET_PIN, OUTPUT); pinMode(CLOCK_PIN, OUTPUT); // Обнуляем счётчик при старте, чтобы он не оказался // в случайном состоянии resetNumber(); } void loop() { // Получаем количество секунд в неполной минуте // с момента старта и выводим его на индикаторы showNumber((millis() / 1000) % 60); delay(1000); }
Нет. Этого не может быть. Вы просто не дождались. Хотя, подозреваю, что ждать придется долго. Чтобы убрать пропуски (возможно, очень редкие) нужно отказаться от вызова delay()
Потому, что это еще не "работает". Это костыль для постановки диагноза. Более удобный костыль: Код (C++): void setup() { pinMode(RESET_PIN, OUTPUT); pinMode(CLOCK_PIN, OUTPUT); // Обнуляем счётчик при старте, чтобы он не оказался // в случайном состоянии resetNumber(); delay(500); //костыль } delay(300) поменять обратно на delay(1000) Диагноз?