Опять я...

Тема в разделе "Arduino & Shields", создана пользователем mike_KH, 7 май 2015.

  1. dnk

    dnk Нерд

    Потому что функцию R() надо вызывать в начале функции D() (ну или перед ней). А так да, 26 + 26 = 52 импульса получается.
     
  2. mike_KH

    mike_KH Гик

    Все работает, просто магия какая то)) Только я это самое сделал в коде и вы пишите как решить это дело)))
     
  3. mike_KH

    mike_KH Гик

    Спасибо всем огромное!!!!
     
  4. Максимус-Бог

    Максимус-Бог Убийца матрёшек

    Проблема с той же микросхемой.
    Программа должна писать последовательно цифры(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);
    }
     
  5. Sindbad

    Sindbad Гик

    А следующую цифру через сколько повторов пропускает?
     
  6. Максимус-Бог

    Максимус-Бог Убийца матрёшек

    при запуске 4 пропускает, а дальше всё норм.
     
  7. Sindbad

    Sindbad Гик

    Нет. Этого не может быть. Вы просто не дождались. Хотя, подозреваю, что ждать придется долго.
    Чтобы убрать пропуски (возможно, очень редкие) нужно отказаться от вызова delay()
     
  8. Максимус-Бог

    Максимус-Бог Убийца матрёшек

    в программе только один delay()
     
  9. Sindbad

    Sindbad Гик

    Вот от него и нужно отказаться, переписав соответствующий участок программы.
     
  10. Максимус-Бог

    Максимус-Бог Убийца матрёшек

    СЛОЖНА.....
    скетч из вики амперки, они же не могли выложить неправильный скетч.
     
  11. Sindbad

    Sindbad Гик

    Ок.
    Можете проверить, как будет работать, если заменить delay(1000) на delay(300) ?
     
    Максимус-Бог нравится это.
  12. Максимус-Бог

    Максимус-Бог Убийца матрёшек

    Работает, спасибо.
    Но теперь остальные сегменты моргают.
     
  13. Sindbad

    Sindbad Гик

    Потому, что это еще не "работает". Это костыль для постановки диагноза.
    Более удобный костыль:
    Код (C++):
    void setup()
    {
        pinMode(RESET_PIN, OUTPUT);
        pinMode(CLOCK_PIN, OUTPUT);
        // Обнуляем счётчик при старте, чтобы он не оказался
        // в случайном состоянии
        resetNumber();
        delay(500); //костыль
    }
    delay(300) поменять обратно на delay(1000)

    Диагноз?
     
    Максимус-Бог нравится это.
  14. Максимус-Бог

    Максимус-Бог Убийца матрёшек

    Пациент в норме.
    Спасибо.
     
  15. Sindbad

    Sindbad Гик

    Костыль считать протезом!
    А понять причину?
     
  16. Максимус-Бог

    Максимус-Бог Убийца матрёшек

    я понял, надо дать микрлсхеме очухаться.
     
  17. Sindbad

    Sindbad Гик

    Нет. Когда микросхема обеспечивает вывод "0, 1, 2, 3" - она уже более чем очухалась.