Вопрос новичка

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем nasharasssha, 3 авг 2013.

  1. nasharasssha

    nasharasssha Нуб

    Помогите начинающему: Буквально недавно приобрёл ардуино и сталкнулся с непонятной проблемой - Одна кнопка, 3 диода , нажатие кнопки сделал по туториолу (работает), и решил сделать чтобы диоды по разному мигали (гирлянда), сделал чтобы при нажатии уровень (вариант мигания) повышался на 1 и проверка - если 1 то такое мигание, если 2 то такое мигание .... (пока для начала просто горит один из диодов)
    Но проблемма - они все по очереди мигают, коофицент 0 в теории ничего гореть не должно, а всё равно выполняются все "if" ...
    Помогите !!!

    Код (C):
    int switchPin = 5;
    int ledPin1 = 9;
    int ledPin2 = 10;
    int ledPin3 = 11;
    int ledLevel = 0;

    boolean lastButton = LOW;  // может принимать только два значения
    boolean currentButton = LOW;


    void setup ()  // часть коа которая выполняется только один раз
    {
     pinMode(switchPin, INPUT); // инициализируем контакт как выход
     pinMode(ledPin1, OUTPUT);
     pinMode(ledPin2, OUTPUT);
     pinMode(ledPin3, OUTPUT);
    }

    boolean debounce(boolean last) // функция которая смягчает вкл\выкл
    {
      boolean current = digitalRead(switchPin);
      if(last != current)
      {
        delay(5);
        current = digitalRead(switchPin);
      }
      return current;
    }


    void loop()  // безконечно повторояющаяся часть кода
    {
     
     
      currentButton = debounce(lastButton);
     
      if (lastButton == LOW && currentButton == HIGH)
      {
        ledLevel = ledLevel;
        if (ledLevel > 3)
          {ledLevel = 0;}
      }
      lastButton = currentButton;

    if (ledLevel = 1)  
    {
       digitalWrite(ledPin1, HIGH);
       delay(200);
       digitalWrite(ledPin2, LOW);
       digitalWrite(ledPin3, LOW);
    }

    if (ledLevel = 2)  
    {
       digitalWrite(ledPin2, HIGH);
       delay(200);
       digitalWrite(ledPin1, LOW);
       digitalWrite(ledPin3, LOW);
    }

    if (ledLevel = 3)  
    {
       digitalWrite(ledPin3, HIGH);
       delay(200);
       digitalWrite(ledPin1, LOW);
       digitalWrite(ledPin2, LOW);
    }

    }
     
  2. Unixon

    Unixon Оракул Модератор

    Оператор сравнения в C/C++ это "==", а не "=". У вас в коде выполняется присваивание внутри условия if (). Да, так тоже можно писать! Но это не то, что вам в данном случае нужно.
     
    nasharasssha нравится это.
  3. Festour

    Festour Нерд

    Кстати, зачем вы присваиваете LedLevel'у его же значение?
     
  4. nasharasssha

    nasharasssha Нуб

    там был "ledLevel = ledLevel + 1;" потом я решил проверить не там ли ошибка... а потом забыл исправить обратно.

    Спасибо, как и думал какая-нибудь будет глупая ошибка, сейчас исправлю - проверю)
     
  5. nasharasssha

    nasharasssha Нуб

    Всё работает, как обидно допустить и не заметить такую ошибку, учитывая, что целый год учил "C"
     
  6. Unixon

    Unixon Оракул Модератор

    Можно короче: ledLevel++;