Как использовать часовой пояс при расчете времени?

Я пытаюсь получить предупреждение с помощью зуммера, в то время как я получаю те же значения через 3 секунды. Но первое предупреждение не ждет 3 секунд. Второе предупреждение верно. Код прилагается. Метод BlinkLED1() аналогичен методу BlinkLED2. Наверное, мне не хватает завершающего штриха. Вы не могли бы мне помочь? Заранее спасибо.

void initialsettings(double roll,double pitch){
  if(level==0){
    if(roll>=34 && timerstatus==false){

        Timer1.initialize(3000000);
        timerstatus=true;
        Timer1.attachInterrupt(blinkLED);
    } else{
         Timer1.stop();
         timerstatus=false;
         level=0;
    }

   }else if(level==1){
      if(roll<=-34 && timerstatus==false){

        Timer1.initialize(3000000);
        timerstatus=true;
         Timer1.attachInterrupt(blinkLED2);
      } else{
           Timer1.stop();
         timerstatus=false;

      }

  }else if(level==2){


  }
}

void blinkLED(void)
{
    noInterrupts();
    Timer1.stop();

    //Timer1.restart();
    digitalWrite(buzzerpin,HIGH);
    delay(7000);
    digitalWrite(buzzerpin,LOW);
    timerstatus=false;
    interrupts();
    if(level==0){
      level=1;
      Serial.println("level 1");
    }
  Serial.println("Sag ");
    //Serial.print("\n");

}

, 👍-1


1 ответ


0
    Timer1.attachInterrupt(blinkLED);

...

void blinkLED(void)
{
    noInterrupts();
    Timer1.stop();

    //Timer1.restart();
    digitalWrite(buzzerpin,HIGH);
    delay(7000);
    digitalWrite(buzzerpin,LOW);
    timerstatus=false;
    interrupts();
    if(level==0){
      level=1;
      Serial.println("level 1");
    }
  Serial.println("Sag ");

  • Не выполняйте последовательные печати внутри процедуры обслуживания прерываний (ISR).
  • Не используйте функцию delay() внутри ISR.
  • Не включайте и не выключайте прерывания внутри ISR.
  • Переменные, разделяемые между ISR и основным кодом, должны быть изменчивыми (из вашего фрагмента я не вижу, являются ли они таковыми или нет).

Ссылка: Прерывания

,