Как определить, когда передатчик выключен?
Используя беспроводной модуль 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;
}
}
}
@Sabri73, 👍1
Обсуждение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;
}
,
@Sabri73
Смотрите также:
- Как отправить данные датчика с Arduino через NRF24L01 на Raspberry Pi
- nRF24L01 - пропускает конечные символы во время передачи
- NRF24L01 PA+LNA с Arduino
- nRF24L01+ Невозможно установить адрес
- Отправка строк из NRF24L01 в приложение
- Состояние цифрового вывода Arduino не передается через NRF24L01, тогда как состояние аналогового вывода передается, почему?
- Несколько условий оператора if
- Светодиоды: разница между общим анодом и общим катодом
какую проблему вы видите?, @jsotola
@ -jsotola когда я выключаю питание передатчика, приемник не загорается светодиодом с данными обнаружения, @Sabri73
мне кажется, что вы использовали много слов, чтобы спросить: "Как определить, когда передатчик выключен?", @jsotola
Вот что происходит, когда проблема заключается в незнании языка, @Sabri73
у вас уже есть код ... просто немного переставьте его ... в основном реализуйте сторожевой таймер ... когда сигнал будет принят, сохраните значение в миллисекундах ... если разница между сохраненным значением и millis() составляет более 1 секунды, то сигнал не поступил, @jsotola
К сожалению, я не знаю, как это сделать с watchdog, @Sabri73
нет, не аппаратный сторожевой таймер ... просто используйте программное обеспечение, @jsotola
Я сделал, как ты сказал, но потерпел неудачу.Он работает, когда включен источник питания. Он не работает, когда я выключаю источник питания., @Sabri73
ваш код выполняется только в том случае, если " while (radio.available())` ... я предполагаю, что radio.available() может быть ложным, когда передатчик выключен, @jsotola
К сожалению, я не смог запустить его в соответствии с этой библиотекой., @Sabri73
Я исправил проблему с циклом for, @Sabri73