Заставьте один Arduino сработать прерывание на другом

Проблема

У меня есть Arduino Duemilanove, которому нужно взаимодействовать с Ardiuno Mega. Единственный доступный вывод на Duemilanove — D13. Duemilanove отвечает за состояние привода моего робота, а Mega отвечает за показания датчиков и навигацию. Mega должен отправлять обновления состояния привода на Duemilanove. I2C, PWM, Serial, все, что требует других выводов на Duemilanove, на данный момент не рассматривается.

Идея Я планирую, чтобы Duemilanove отправлял вывод "pipe" на высокий уровень, вызывая прерывание на Mega. ISR отправит текущее состояние привода в Duemilanove, который изменит режим вывода и прочитает цифровой импульс. Длина импульса — это состояние привода.

Препятствие У меня возникли проблемы с поиском примера того, как это настроить. Я не могу заставить ISR сработать, и я не уверен, почему.

Мегакод

int pipe = 18;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(pipe, INPUT);
  attachInterrupt(digitalPinToInterrupt(pipe), driveStateISR, CHANGE);
}

void loop() {
  // put your main code here, to run repeatedly:

}

void driveStateISR(){

  Serial.println("ISR fired");
  pinMode(pipe, OUTPUT);

  digitalWrite(pipe, HIGH);
  delay(50);
  digitalWrite(pipe, LOW);

  Serial.println("Pulse sent!");

  pinMode(pipe, INPUT);

}

Код Дуэмиланове

int pipe = 13;

void setup() {
  // put your setup code here, to run once:
  pinMode(pipe, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(pipe, HIGH);
  delay(30);
  pinMode(pipe, INPUT);

  unsigned long duration = pulseIn(pipe, HIGH);

  Serial.println(duration);

  delay(3000);
}

Вообще ничего не происходит. Я думаю, что основная структура здесь, но поскольку примеров не так много, я бы хотел, чтобы другие посмотрели на проблему. Спасибо!

, 👍1