8 years ago.

How to detect both rise and fall state seperately of a pin with Interrupt?

I would like to port a SDI-12 protocol code from arduino to mbed for my SDI-12 based sensor, since i could not find a basic code or library for mbed. For this aim:

Is it possible to define two different functions for rise and fall edges of a pin?

For example;

DigitalIn pulse(PB_2);

InterruptIn pulse_interrupt(PB_2);

pulse_interrupt.fall(&pulse_fall_isr);
pulse_interrupt.rise(&pulse_rise_isr);

Thanks...

According to this link it is possible...

https://developer.mbed.org/questions/54957/InterruptIn-on-pin-change-on-Nucleo-F401/

Can you confirm it please again?

posted by Kamil M 26 Apr 2016

1 Answer

8 years ago.

Yes, I believe so please see example below, Regards etc.,

#include "mbed.h"
DigitalOut RED(D6);
DigitalOut GRN(D5);
DigitalOut AMB(D4);
DigitalOut myled(LED1);
InterruptIn pulse(D8);      //Pulse Monitoring Line
Ticker timer;

void red() {RED=1;GRN=0;}   //Rising Edge Detected

void grn() {RED=0;GRN=1;}   //Falling Edge Detected

void amb() {AMB=!AMB;}      //Blinking LED for Ticker Interrupt

int main(){
    timer.attach(&amb,1);   //Service Ticker Interrupt pointer &NAME in 1 second intervals
    pulse.rise(&red);       //Service RISING EDGE Interrupt to pointer &NAME
    pulse.fall(&grn);       //Service FALLING EDGE Interrupt to pointer &NAME

    while(1){
        sleep();            //Sleep to save power, Interrupted by Ticker and Pulse events
    }
}

Accepted Answer