Как определить, когда передатчик выключен?

Используя беспроводной модуль nrf24l01, я хочу управлять светодиодом с помощью приведенного ниже скетча. Передатчик автоматически непрерывно отправляет данные с интервалом в одну секунду, и когда счетчик приемника достигает 2, он включает светодиод в нужное время, а затем выключает его. но чего я хочу, так это когда я выключаю питание передатчика, когда от передатчика регистрируется 2 отсчета, светодиод не загорается.

Я хочу включать и выключать светодиод, когда я выключаю питание передатчика после отправки 2 сигналов от передатчика.

Спасибо вам за всю предоставленную информацию.

#include "nRF24L01.h" 
#include "RF24.h"
#include "SPI.h"
int ReceivedMessage[1] = {000}; //  NRF24L01 tarafından alınan değeri saklamak için kullanılır
RF24 radio(3, 4); //  NRF24L01 SPI pimleri. uno'daki Pin 8 ve 9
const uint64_t pipe = 0xE6E6E6E6E6E6; // 2 NRF24L01 arasındaki iletişim için aynı olması gerekir

int led = A7;

bool flag = false;
bool ledflag  = false;
unsigned long  previous1 = 0;
unsigned long  interval1 = 5000;

unsigned long  previous2 = 0;
unsigned long  interval2  = 2000;
int button1PushCounter = 0;


void setup () {


  radio.begin(); // NRF24L01'i başlatın

  radio.openReadingPipe(1, pipe); // NRF24L01'i almaya hazır hale getirin

  radio.startListening(); // Bilginin alınıp alınmadığını görmek için dinleyin

  Serial.begin(9600);

  pinMode(led, OUTPUT);


}

void loop () {

  unsigned long currentmillis = millis();
  while (radio.available())
  {
    radio.read(ReceivedMessage, 1); // NRF24L01'den bilgileri okuyun

    if (ReceivedMessage [0] == 111) //  switch'e basıldığını gösterir
    {

      button1PushCounter++;
      Serial.println( button1PushCounter);
      delay(700);
    }

    if ( button1PushCounter == 2) {

      flag = true;
      previous1 =  currentmillis;

    }

    if ( flag ) {
      if (currentmillis - previous1 >= interval1  ) {

        digitalWrite(led, HIGH);
        ledflag  = true;
        previous2 =  currentmillis;
        flag = false;
        button1PushCounter = 0;
      }
    }

    if ( ledflag && (currentmillis - previous2 >= interval2  )) {
      digitalWrite(led,  LOW);
      ledflag  = false;

    }
  }
}

, 👍1

Обсуждение

какую проблему вы видите?, @jsotola

@ -jsotola когда я выключаю питание передатчика, приемник не загорается светодиодом с данными обнаружения, @Sabri73

мне кажется, что вы использовали много слов, чтобы спросить: "Как определить, когда передатчик выключен?", @jsotola

Вот что происходит, когда проблема заключается в незнании языка, @Sabri73

у вас уже есть код ... просто немного переставьте его ... в основном реализуйте сторожевой таймер ... когда сигнал будет принят, сохраните значение в миллисекундах ... если разница между сохраненным значением и millis() составляет более 1 секунды, то сигнал не поступил, @jsotola

К сожалению, я не знаю, как это сделать с watchdog, @Sabri73

нет, не аппаратный сторожевой таймер ... просто используйте программное обеспечение, @jsotola

Я сделал, как ты сказал, но потерпел неудачу.Он работает, когда включен источник питания. Он не работает, когда я выключаю источник питания., @Sabri73

ваш код выполняется только в том случае, если " while (radio.available())` ... я предполагаю, что radio.available() может быть ложным, когда передатчик выключен, @jsotola

К сожалению, я не смог запустить его в соответствии с этой библиотекой., @Sabri73

Я исправил проблему с циклом for, @Sabri73


1 ответ


1

Я нашел решение, как показано ниже:-

if ( button1PushCounter == 3 ) {

  for (int i = 0; i < 5; i++)
  {
    delay(1000);
    Serial.println(i);
    a = HIGH;
  }
}

if ( a == HIGH ) {

  digitalWrite(led, HIGH);
  delay(1000);
  digitalWrite(led,  LOW);
  a = LOW;
  button1PushCounter = 0;
}
,