Заставьте один 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);
}
Вообще ничего не происходит. Я думаю, что основная структура здесь, но поскольку примеров не так много, я бы хотел, чтобы другие посмотрели на проблему. Спасибо!
@trademark, 👍1
0
- Использование millis() и micros() внутри процедуры прерывания
- Подсчет импульсов с прерыванием
- Устранение дребезга кнопки с помощью прерывания
- Программа arduino выдаёт ошибку expected //primary-expression before ')' token error: //expected ';' before '}' token E
- Почему необходимо использовать ключевое слово volatile для глобальных переменных при обработке прерываний в ардуино?
- Как сгенерировать аппаратное прерывание в mpu6050 для пробуждения Arduino из режима SLEEP_MODE_PWR_DOWN?
- Использование поворотных энкодеров с прерываниями смены контактов
- Arduino непрерывно считывает значение АЦП с помощью прерывания