Использование прерывания для обработки логического значения в Arduino

Я немного покопался и наткнулся на пару примеров того, как кнопки используются в качестве прерываний. Однако в проекте, который я пытаюсь реализовать, используются аналоговые датчики. Прямо сейчас я хочу, чтобы мои аналоговые датчики помечали логическое значение, чтобы прерывание выполнялось, а не кнопку. Как мне это сделать?

Вот что я придумал на основе того, что я исследовал:

    boolean isWall;

    attachInterrupt(isWall, interruptFunction, RISING);

    void loop() {
        if(analogSensor.response > 450) {
                isWall = true;
        }
        normalExecution();  // what it normally does if isWall is false 
    }

    void interruptFunction() {
          // code implementation
          isWall = false;  // set isWall back to false after executing interruptFunction
    }

    void normalExecution() {
          // foo
    }

Кто-нибудь может проверить?


person tomato    schedule 07.12.2012    source источник
comment
я думаю, что должен иметь "volatile" перед логическим объявлением   -  person tomato    schedule 07.12.2012


Ответы (1)


Возможно, я совершенно не прав, но я всегда понимал, что прерывания в Arduino основаны на напряжении, которое видит вывод, т.е. это аппаратные прерывания. Следовательно, хотя ваш код корректен для аппаратного прерывания, он не будет работать для изменения переменной.

При этом эта ссылка и эта ссылка обсудить Методы аналогового компаратора для достижения того, что вы пытаетесь сделать.

person spring    schedule 07.12.2012
comment
О, так что я думаю, что я пытаюсь найти что-то, что будет опрашивать мои датчики каждые 10 секунд в фоновом режиме, а не всякий раз, когда отвечает(). И затем, когда мои датчики достигают определенного определенного значения, они должны перейти к моей функции прерывания. - person tomato; 09.12.2012