Кнопка.

Тема в разделе "Arduino & Shields", создана пользователем dndv279, 25 янв 2016.

  1. dndv279

    dndv279 Нерд

    Написал код, чтоб если кнопка была нажата дольше 2 сек то светодиод выключался и если кнопка горела меньше 2х сек то он загорался. Не работает. Не могу понять в чем ошибка.

    Код (C++):
    int pk = 5;
    int pl = 13;
    int kt = 0;

    void setup() {
      pinMode(pk, INPUT_PULLUP);
     
    }

    void loop() {
      int pki = digitalRead(pk);
      if( pki == LOW){
        delay(10);
        int pki = digitalRead(pk);
        if( pki == LOW){
          for(int i = 0; digitalRead(pk) == LOW; ++i){
             kt = millis();
             digitalWrite(pl, HIGH);
             delay(200);
             digitalWrite(pl, LOW);
             delay(200);
          }
         
          }
       
      }
    if (kt>2000){
            digitalWrite(pl, HIGH);
          }else{
          digitalWrite(pl, LOW);
    }
     
     
  2. vvr

    vvr Инженерище

  3. DrProg

    DrProg Вечный нерд

    Если программа больше ничего не делает, то:
    Код (C++):
      timerPK = millis();
      while (digitalRead(pk));
      delay(5);
      while (!digitalRead(pk));
      delay(5);
      digitalWrite(pl, ((millis() - timerPK) > 2000));
    Понятное дело, что до setup объявить переменную:
    Код (C++):
    unsigned long timerPK;
    Возможно придется поменять условия нажатия и отпускания кнопки, то есть передвинуть "!" из второй функции в первую. Ну и вкл-выкл если наоборот надо, то последняя строка:
    Код (C++):
    digitalWrite(pl, !((millis() - timerPK) > 2000));
     
    ИгорьК нравится это.
  4. dndv279

    dndv279 Нерд

    Не работает(

    Код (C++):
    int pk = 2;
    int pl = 13;
    int kt = 0;
    unsigned long timerPK;

    void setup() {
      pinMode(pk, INPUT_PULLUP);
    }

    void loop() {
    timerPK = millis();
      while (digitalRead(pk));
      delay(5);
      while (!digitalRead(pk));
      delay(5);
      digitalWrite(pl, ((millis() - timerPK) > 2000));
    }
     
  5. DrProg

    DrProg Вечный нерд

    Код (C++):
    int pk = 2;
    int pl = 13;
    int kt = 0;
    unsigned long timerPK;

    void setup() {
      pinMode(pk, INPUT_PULLUP);
      pinMode(pl, OUTPUT);
    }

    void loop() {
      while (digitalRead(pk));
      timerPK = millis();
      delay(5);
      while (!digitalRead(pk));
      delay(5);
      digitalWrite(pl, ((millis() - timerPK) > 2000));
    }
     
    ИгорьК нравится это.