Как генерировать прерывание от радиомодуля при получении сообщения с Adafruit Feather 32u4 Lora

В качестве MCU для удаленного датчика и переключателя я использую Adraruit Feather 32u4 RFM95 Lora Radio. Я использую библиотеку RadioHead для взаимодействия с радиомодулем.

Моя цель состоит в том, чтобы мое перо отправляло данные датчика через регулярные интервалы. Я также хочу, чтобы он мог получать команды удаленно, которые включают и выключают подключенные устройства. Я подключил его к аккумулятору и солнечной панели. Решение, которое я имею до сих пор, состоит в следующем

void loop()
{

    if (rf95.available())
    {   
        handleRFInput();
    }

    unsigned long currentMillis = millis();
    if (currentMillis - previousMillis >= TIME_BETWEEN_PACKETS)
    {
        // Sends the data
        sendSensorData();

        // save the last time data was sent
        previousMillis = currentMillis;
    }
} 

Есть несколько проблем с этим. Первая и самая большая проблема заключается в том, что я могу легко потерять входящие данные. Во-вторых, процессор всегда работает, и я не могу уснуть из-за страха потерять входящие сообщения. Я хотел бы сохранить как можно больше энергии, позволяя ей спать как можно дольше.

Очевидное решение этой проблемы - запуск прерывания при появлении нового сообщения. Я не могу понять, как это сделать. В документации есть вывод № 7, в котором говорится, что это IRQ. Я старался

#define RFM95_INT 7

attachInterrupt(digitalPinToInterrupt(RFM95_INT), handleRFInput, CHANGE);

но когда я побежал, ничего не случилось. Данные датчика не были переданы или что-то еще. Что мне нужно сделать, чтобы получить прерывание при получении сообщения?

0 ответов

Другие вопросы по тегам