chottoshitahanashi’s diary

基本的に間違ったことばかり書いてるブログ。検索ひっかかるな

ピン変化割り込み

まだUNOでしか確認してない。

#ifdef ARDUINO_AVR_ATTINYX5
  #define PCINT_0_PIN 0
  #define PCINT_1_PIN 1
  #define PCINT_2_PIN 2
  #define LED_PIN 3
#else
  #define PCINT_0_PIN 8   // PB0: PCINT0
  #define PCINT_1_PIN 9   // PB1: PCINT1
  #define PCINT_2_PIN 10  // PB2: PCINT2
  #define LED_PIN 13
#endif


void setup()
{
  Serial.begin(9600);
  pinMode(PCINT_0_PIN, INPUT_PULLUP);
  pinMode(PCINT_1_PIN, INPUT_PULLUP);
  pinMode(PCINT_2_PIN, INPUT_PULLUP);
  pinMode(LED_PIN, OUTPUT);

  #ifdef ARDUINO_AVR_ATTINYX5
    byte a = GIMSK;
    Serial.println(a);
    PCMSK = 0b00000110; // - - PCINT5 PCINT4 PCINT3 PCINT2 PCINT1 PCINT0   
  #else
    byte a = PCICR;
    Serial.println(a);
    PCICR = 0b000000001; // - - - - - PCIE2	PCIE1	PCIE0
    PCMSK0= 0b00000111; // PCINT7 PCINT6 PCINT5 PCINT4 PCINT3 PCINT2 PCINT1 PCINT0
  #endif

  sei();
}

void loop()
{
}


ISR(PCINT0_vect)
{

  Serial.println("int0");
  digitalWrite(LED_PIN, HIGH);
  delay(500);
  digitalWrite(LED_PIN, LOW);
}

ISR(PCINT1_vect)
{
  Serial.println("int1");
  digitalWrite(LED_PIN, HIGH);
  delay(500);
  digitalWrite(LED_PIN, LOW);
}

ISR(PCINT2_vect)
{
  Serial.println("int2");
  digitalWrite(LED_PIN, HIGH);
  delay(500);
  digitalWrite(LED_PIN, LOW);
}

Arduinoのピン番号とAVRのピン番号PA*, PB*, ...の対応表あり
Arduino: Basic circuit, bootloader and programming - ElectroSoftCloud