Мигание светодиода

Тема в разделе "Arduino & Shields", создана пользователем gaara, 25 июн 2015.

  1. gaara

    gaara Нуб

    Коллеги-друзья, Помогите пожалуйста, смысл такой, нужно мигать светодиодом бед delay по нажатию кнопки и так, чтобы он помигал скажим пять раз и потом горел, я кнопку отпустил, он опять помигал и горит пока я кнопку не отпущу, я сделал так, чтобы он мигал, а, как сделать так, чтобы он потом горел?
     
  2. Megakoteyka

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

    Для начала распишите задачу более внятно.
    "отпустил, он помогал и горит, пока не отпущу" - это как понимать?
     
  3. gaara

    gaara Нуб

    Окай))) Есть кнопка, есть светодиод, нужно сделать так, чтобы при нажатии на кнопку и её дольнейшем удерживание удерживании светодиод проморгал пять раз, а дальше продолжал гореть постоянно, пока я не отпущу кнопку, если же я нажал кнопку и отпустил, то он просто поморгал
     
  4. gaara

    gaara Нуб

    Код (Text):
    int ledPin = 13;        
    int value = LOW;        
    long previousMillis = 0;  
    long interval = 120;      // интервал мигания в миллисекундах
    int inPin;
    bool _count1I = 0;
    int _count1P = 0;
    bool post;

    void setup()
    {
      Serial.begin(9600);
      pinMode (2,INPUT);
      pinMode(ledPin, OUTPUT);
    }

    void loop()
    {
       
      inPin = digitalRead(2);
      if (inPin){led;}
      }
           
     


    void led(){
      inPin = digitalRead(2);
      if (inPin && millis() - previousMillis > interval) {
        previousMillis = millis();
         
        if (value == LOW)
          value = HIGH;
        else
          value = LOW;
         
       
        digitalWrite(ledPin, value);
             
      }
    }
     
  5. gaara

    gaara Нуб

    я захриначил вот так, но он естественно не будет гореть, он просто мигает пока я не отпущу кнопку
     
  6. Megakoteyka

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

    Добавьте счетчик морганий. Если счетчик больше 5, просто зажигайте. Если кнопка не нажата - гасите.
     
  7. gaara

    gaara Нуб

    В том то и дело, не получается добавить так, что бы было хорошо, подправте пожалуйста если не трудно, бьюсь уже двое суток, при добавлении счётчика, он начинает просто гореть после первого промаргивания
     
  8. vvr

    vvr Инженерище

    дафай свой код со счётчиком - будем помогать...
     
  9. Megakoteyka

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

    Вот так попробуйте. Набросал на скорую руку, не проверял.

    Код (Text):
    int ledPin = 13;      
    int value = LOW;      
    long previousMillis = 0;
    long interval = 120;
    int counter = 0;

    void setup()
    {
      Serial.begin(9600);
      pinMode (2, INPUT);
      pinMode(ledPin, OUTPUT);
    }

    void loop()
    {
      if (digitalRead(2))
      {
        if(counter < 5)
        {
          if(millis() - previousMillis > interval)
          {
            previousMillis = millis();
            value = (value == LOW) ? HIGH : LOW;
            digitalWrite(ledPin, value);
            if(value == LOW)
              counter++;
          }
        }
        else
          digitalWrite(ledPin, HIGH);
      }
      else
      {
        digitalWrite(ledPin, LOW);
        counter = 0;
      }
    }
     
  10. gaara

    gaara Нуб

    Спасибище огромное, завтра попробую отпишусь, а по счёт моего кода, я к сожалению его потери, оставил этот как наверняка работающий, но если время будет, дак я его ещё раз думаю смогу повторить :)
     
  11. Faberge

    Faberge Administrator Администратор

    Тернарный оператор? Зачем так сложно? Синтаксис С позволяет заменить это строчкой:
    Код (Text):
    value = !value;
     
  12. gaara

    gaara Нуб

    Всё робит, спасибище огромное!!!