Arduino прерывает функции - PullRequest
0 голосов
/ 01 мая 2018

Я хочу вызвать некоторые функции на переднем и заднем фронте прямоугольных импульсов. Я использовал attachInterrupt (digitalPinToInterrupt (interruptPin), udara, RISING) для нарастающего фронта и attachInterrupt (digitalPinToInterrupt (interruptPin), blank, FALLING) для падающего фронта. Но я не получал консервативных серийных выходов, которые поднимались и падали. каков ответ на проблему? Мой код написан следующим образом.

enter code here
const byte interruptPin = 2;

void setup() {
    Serial.begin(9600);
    pinMode(interruptPin, INPUT);

}

void loop() {
    attachInterrupt(digitalPinToInterrupt(interruptPin), udara, RISING);
    attachInterrupt(digitalPinToInterrupt(interruptPin), blank, FALLING);
}

void udara() {
    Serial.println("rise");

}`

void blank() {
    Serial.println("fall");
}

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Последовательный использует прерывания для выталкивания данных. Эти прерывания отключены во время вашего ISR. По этой причине лучше избегать использования Serial в ISR. Измените код, чтобы установить флаг в ISR, и выполните печать из цикла в ответ на флаг.

0 голосов
/ 01 мая 2018

attachInterrupt() должен быть частью setup(), а не loop(), так как он используется для настройки триггера и обратного вызова.

const byte interruptPin = 2;

void setup() {
    Serial.begin(9600);
    pinMode(interruptPin, INPUT);
    attachInterrupt(digitalPinToInterrupt(interruptPin), udara, RISING);
    attachInterrupt(digitalPinToInterrupt(interruptPin), blank, FALLING);
}

void loop() {

}

void udara() {
    Serial.println("rise");
}

void blank() {
    Serial.println("fall");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...