Main Site Documentation

Cobra 2 interupt buttons


#1

Hi all, I have 2 interrupt buttons that I have plugged into a breakout board. the buttons are the same as the ones on the board itself that I stole out of an old DVD drive. They look to have a single power in and a ground.
What pins should I use to connect these buttons? I have tried AD5/6 and P1_1+P1_0 via the breakout board.


//slot 4 pin 6 and 7
private InterruptPort leftButton = new InterruptPort(Pin.P1_0, true, Port.ResistorMode.PullDown,
                                                                         Port.InterruptMode.InterruptEdgeBoth);
        
        private InterruptPort rightButton = new InterruptPort(Pin.P1_1, true, Port.ResistorMode.PullUp,
                                                                           Port.InterruptMode.InterruptEdgeBoth);
//above throws an System.ArgumentException



I have also tried it on PWM/AD pins.
My question is what type of pin should I be connecting them to? I2C? COM? PWM? Analog?


#2

Physically, if you want to use InterruptPorts, then they need to be connected to a socket type that has interrupt capable pins, and you need to connect to those interrupt capable pins.

Check out this https://www.ghielectronics.com/docs/120/gadgeteer-sockets
to help you identify the sockets that you have access to and their pins. I haven’t found a definitive list that says what other pins on the long-edge connector are interrupt capable; that might be something GHI’s documentation guru has sitting on a sideline somewhere, or that he can magic together for us :wink:


#3

Thanks Brett.
Looks like I need one of the pins with a “!” however I tried it on one and when I call leftButton.Read() its always true.
any ideas?
cheers
Craig


#4

yep. InterruptPort is best handled when using an interrupt handler. Don’t be too hung up on using Read(). If you’re not already doing that, then I suggest looking at the joystick or button module driver code on http://gadgeteer.codeplex.com and follow their pattern.

Other thought, just trigger on one edge not both. See if that helps.


#5

That worked, both Read() and the leftButton_OnInterrupt works now:


 private InterruptPort leftButton = new InterruptPort(Pin.P2_21, true, Port.ResistorMode.PullUp,
                                                                         Port.InterruptMode.InterruptEdgeLow);