добрый вечер .что исправить в коде приемника ?при потери связи остается работать последняя задача ,а хотелось бы чтоб прекращалась выполнение кода Код (C++): ? -------------------------приемник ------------------ #include <SPI.h> #include "nRF24L01.h" #include "RF24.h" #include <Servo.h> RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно //RF24 radio(9,53); // для Меги byte recieved_data[12]; // массив принятых данных byte relay61 = 6; byte relay51 = 5; byte relay = 2; byte relay1= 4; byte relay3 = 7; byte mosfet = 8; byte relay4 = 14; byte relay5 = 15; byte relay6 = 16; byte relay2 = 17; byte relay7 = 18; byte relay8 = 19; byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб void setup() { Serial.begin(9600); //открываем порт для связи с ПК pinMode(relay, OUTPUT); // настроить пин реле как выход pinMode(mosfet, OUTPUT); // настроить пин мосфета как выход pinMode(relay1, OUTPUT); pinMode(relay2, OUTPUT); pinMode(relay3, OUTPUT); pinMode(relay4, OUTPUT); pinMode(relay5, OUTPUT); pinMode(relay6, OUTPUT); pinMode(relay7, OUTPUT); pinMode(relay8, OUTPUT); pinMode(relay61, OUTPUT); pinMode(relay51, OUTPUT); radio.begin(); //активировать модуль radio.setAutoAck(1); //режим подтверждения приёма, 1 вкл 0 выкл radio.setRetries(0, 15); //(время между попыткой достучаться, число попыток) radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал radio.setPayloadSize(32); //размер пакета, в байтах radio.openReadingPipe(1, address[0]); //хотим слушать трубу 0 radio.setChannel(0x60); //выбираем канал (в котором нет шумов!) radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS //должна быть одинакова на приёмнике и передатчике! //при самой низкой скорости имеем самую высокую чувствительность и дальность!! radio.powerUp(); //начать работу radio.startListening(); //начинаем слушать эфир, мы приёмный модул } void loop() { byte pipeNo; while ( radio.available(&pipeNo)) { // слушаем эфир со всех труб radio.read( &recieved_data, sizeof(recieved_data) ); // чиатем входящий сигнал analogWrite(relay, recieved_data[0]); //то бишь 0 или 1 analogWrite(relay3, recieved_data[1]); analogWrite(mosfet, recieved_data[2]); analogWrite(relay1, recieved_data[3]); analogWrite(relay5, recieved_data[4]); analogWrite(relay4, recieved_data[5]); analogWrite(relay6, recieved_data[6]); analogWrite(relay2, recieved_data[7]); analogWrite(relay7, recieved_data[8]); analogWrite(relay8, recieved_data[9]); digitalWrite(relay51, recieved_data[11]); analogWrite(relay61, recieved_data[10]); } }
к примеру я нажал кнопку на передачики ,на приемники включается реле -отошел на расстояние(отключил питание ) где не ловит nrf 24 реле не отключается
nrf24 может измерять расстояние? Если она может показывать есть ли подключенные устройства, то можно по этому параметру проверять.
http://amperka.ru/product/nRF24L01-wireless-module Я думал это блютус, а это просто радиоканал. Он не умеет фиксировать коннект/разрыв, а значит нужно придумать свой критерий я бы сделал так: один приборчик постоянно шлет команду "я тут", второй следит. Если какое-то время второй не слышит "я тут", то значит "потеря связи".
Или так:кнопка нажата действие выполняется какое то время(задается програмно в коде)кнопка отжата/связь потеряна все выключается.Неудобство-надо постоянно жать кнопку.
Для цЫфры Digitalwrite(pin,0);Digitalwrite(pin,LOW); Digitalwrite(pin,FALSE); Для ШИМ Analogwrite(pin,0);
Можно как и сказал Данил-каждую секунду отправлять строб импульс например с какой то командой и если он не принят допустим в течении 3х-5 секунд то все выключать нах.
while ( radio.available(&pipeNo)) { // слушаем эфир со всех труб Процессор должен читать в loop-е таймер и радио, а не крутиться на этой строке (ожидания радио) бесконечно. Если сигнал из радио пришел - сбрасывать таймер и выполнять . А если сигнала нет - выключать релюхи по превышению времени ожидания таймера.
Этот алгоритм и так совсем зеленый. Скажите, в чем трудность в его реализации? Если совсем ничего непонятно, то гугл, вики, книжки и практика вам помогут. Советую прорабатывать алгоритмы на бумажке и выполнять его по шагам - так вы сможете понять алгоритм и быстро соображать новые необходимые вам.