if

Тема в разделе "Arduino & Shields", создана пользователем Vstarodubov, 28 июн 2012.

  1. Vstarodubov

    Vstarodubov Нуб

    как создать вот такой вот цикл


    if (someVariable > 50 * на протяжении 50 милисекунд*)
    {
    // do something here
    }



    просто у меня стоит фоторезистор, положение ХАЙ где то около 1010, в то время когда на него светит лазерная указка, но в промежутках бывают вспышки, длина их где то 10 милисекунд но фоторезистор улавливает их, что крайне не желательно...
     
  2. Unixon

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

    Код (Text):

    const int SENS_PIN = A0;
    const int SENS_THRESHOLD = 1000;
    const int SENS_PERIOD = 50;
     
    bool sens_state = false;
    unsigned long timer = 0;
     
    void setup()
    {
    Serial.begin(9600);
    //pinMode(A0, INPUT); // do we really need this ?
    }
     
    void loop()
    {
     if (sens_state)
     {
      if (analogRead(SENS_PIN)>SENS_THRESHOLD)
      {
       if ((millis()-timer)>SENS_PERIOD)
       {
        Serial.println("OMG!!! Anybody... SOS!!!");
       }
       else
       {
        Serial.println("Warning! We're under attack!");
       }
      }
      else
      {
       Serial.println("Oh, they've missed :phew:");
       sens_state = false;
      }
     }
     if (!sens_state) // not an if-else branch, on purpose!
     {
      timer = millis(); // save the time when the world is at peace
      sens_state = (analogRead(SENS_PIN)>SENS_THRESHOLD);
     }
     delay(1); // it was a long long loop, let's take a nap
    }
     
     
  3. Корней

    Корней Гик

  4. Unixon

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

    Debounce иногда можно проще сделать, прадва немного халтурно - просто после первого срабатывания дать паузу той же длительности и после нее еще раз проверить. Хотя для шумного сенсора и честный ардуиновский debounce не сработает, придется интегрировать сигнал по времени.
     
  5. Корней

    Корней Гик

    Именно интегрировать сигнал по времени или достаточно недовычисленного (то есть без деления на ширину окна) скользящего среднего?
     
  6. Unixon

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

    А это неважно, вы просто определяете интегральную величину из соображений удобства и минимума вычислений. Все равно в итоге получается неравенство, которое можно умножить на любую константу >0 .