Эксперемент 7. Задание 3.

Тема в разделе "Флудилка", создана пользователем Oleg_duino, 25 мар 2015.

  1. Oleg_duino

    Oleg_duino Нерд

    Здараствуйте! Битый час пытаюсь понять свою ошибку. И не могу, хоть убей! Задание в следующем

    Задание 3:Переделайте программу так, чтобы вместо int pin = FIRST_LED_PIN + (ms / 120) % 10 перемещением огонька управлял цикл for.

    Было так:

    #define FIRST_LED_PIN 2
    #define LAST_LED_PIN 11

    void setup()
    {
    for (int pin = FIRST_LED_PIN; pin <= LAST_LED_PIN; ++pin)
    pinMode(pin, OUTPUT);
    }
    void loop()
    {
    unsigned int ms = millis();

    int pin = FIRST_LED_PIN + (ms / 120) % 10;

    digitalWrite(pin, HIGH);
    delay(10);
    digitalWrite(pin, LOW);
    }

    После моего переделывания получилось, вот так, но почему-то на ардуино схема не работает:


    #define FIRST_LED_PIN 2
    #define LAST_LED_PIN 11

    void setup()
    {

    for (int pin = FIRST_LED_PIN; pin <= LAST_LED_PIN; ++pin)
    pinMode(pin, OUTPUT);
    }

    void loop()
    {

    unsigned int ms = millis();


    for (int pin = FIRST_LED_PIN; pin <= LAST_LED_PIN; pin = FIRST_LED_PIN + (ms / 120) % 10 )
    {
    digitalWrite(pin, HIGH);
    delay(10);
    digitalWrite(pin, LOW);}
    }
     
  2. alex-petrov74

    alex-petrov74 Нуб

    Вы задаете значение переменной ms вне цикла for. Соответственно внутри цикла значение pin не меняется, так все параметры по которым он вычисляется внутри цикла неизменны.
     
  3. Oleg_duino

    Oleg_duino Нерд

    Да, спасибо! Теперь разобрался, действительно нужно было объявить переменную ms в цикле! И показать как её получить в условии. Эта строчка будет, выглядеть вот так:

    for (unsigned int pin = FIRST_LED_PIN, ms; pin <= LAST_LED_PIN, ms = millis(); pin = FIRST_LED_PIN + (ms / 120) % 10 )