From fc95d96823e37739dbff04029ceeb334b8960d25 Mon Sep 17 00:00:00 2001 From: mjbrown Date: Thu, 30 Jul 2015 13:39:03 -0500 Subject: [PATCH] Fix digital pin mapping to pin change interrupt registers, update test sketch with more pins. --- .../ChangeInterrupts/ChangeInterrupts.ino | 21 +++++++++++++++++++ .../bean/avr/variants/bean+/pins_arduino.h | 4 ++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/examples/LightBlueBean/01.Basics/ChangeInterrupts/ChangeInterrupts.ino b/examples/LightBlueBean/01.Basics/ChangeInterrupts/ChangeInterrupts.ino index 89abea7..c93c241 100644 --- a/examples/LightBlueBean/01.Basics/ChangeInterrupts/ChangeInterrupts.ino +++ b/examples/LightBlueBean/01.Basics/ChangeInterrupts/ChangeInterrupts.ino @@ -31,13 +31,34 @@ void twoChangeDetected( void ) blue += 16; } +void threeChangeDetected( void ) +{ + red = 0; +} + +void fourChangeDetected( void ) +{ + green = 0; +} + +void fiveChangeDetected( void ) +{ + blue = 0; +} + void setup() { pinMode(0, INPUT); pinMode(1, INPUT); pinMode(2, INPUT); + pinMode(3, INPUT); + pinMode(4, INPUT); + pinMode(5, INPUT); PCintPort::attachInterrupt(0, zeroChangeDetected, CHANGE); PCintPort::attachInterrupt(1, oneChangeDetected, CHANGE); PCintPort::attachInterrupt(2, twoChangeDetected, CHANGE); + PCintPort::attachInterrupt(3, threeChangeDetected, CHANGE); + PCintPort::attachInterrupt(4, fourChangeDetected, CHANGE); + PCintPort::attachInterrupt(5, fiveChangeDetected, CHANGE); Bean.setLed(0xFF, 0xFF, 0xFF); // Flash to show the sketch is running Bean.sleep(250); } diff --git a/hardware/bean/avr/variants/bean+/pins_arduino.h b/hardware/bean/avr/variants/bean+/pins_arduino.h index f718cf6..904c3e8 100644 --- a/hardware/bean/avr/variants/bean+/pins_arduino.h +++ b/hardware/bean/avr/variants/bean+/pins_arduino.h @@ -54,8 +54,8 @@ static const uint8_t CC_INTERRUPT_PIN = 16; // TODO - I don't know what this stuff is #define digitalPinToPCICR(p) (((p) >= 0 && (p) <= 21) ? (&PCICR) : ((uint8_t *)0)) #define digitalPinToPCICRbit(p) (((p) <= 7) ? 2 : (((p) <= 13) ? 0 : 1)) -#define digitalPinToPCMSK(p) (((p) <= 7) ? (&PCMSK2) : (((p) <= 13) ? (&PCMSK0) : (((p) <= 21) ? (&PCMSK1) : ((uint8_t *)0)))) -#define digitalPinToPCMSKbit(p) (((p) <= 7) ? (p) : (((p) <= 13) ? ((p) - 8) : ((p) - 14))) +#define digitalPinToPCMSK(p) (((p) <= 3) ? (&PCMSK2) : (&PCMSK0)) +#define digitalPinToPCMSKbit(p) (((p) >= 4) ? (p - 4) : (((p) <= 2) ? (2*p+2) : (7))) #ifdef ARDUINO_MAIN