передатчик без умолку шлет команды по 433. как сделать что бы он отправлял команду только один раз после изменения положения?
- Войдите на сайт для отправки комментариев
Ср, 19/07/2017 - 11:23
#include <SPI.h> #include "nRF24L01.h" #include "RF24.h" #include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); int cases = 0; int t = 150; RF24 radio(9, 10); byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб byte button = 3; // кнопка на 3 цифровом byte potent = 0; // потенциометр на 0 аналоговом byte slider = 1; // движковый потенциометр на 1 аналоговом пине byte transmit_data; // массив, хранящий передаваемые данные byte latest_data; // массив, хранящий последние переданные данные boolean flag; // флажок отправки данных void setup() { Serial.begin(9600); //открываем порт для связи с ПК pinMode(3, INPUT_PULLUP); pinMode(6, INPUT_PULLUP); pinMode(7, INPUT_PULLUP); pinMode(4, INPUT_PULLUP); // настроить пины датчика mySwitch.enableTransmit(8); radio.begin(); //активировать модуль radio.setAutoAck(1); //режим подтверждения приёма, 1 вкл 0 выкл radio.setRetries(0, 15); //(время между попыткой достучаться, число попыток) radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал radio.setPayloadSize(32); //размер пакета, в байтах radio.openWritingPipe(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.stopListening(); //не слушаем радиоэфир, мы передатчик } void loop() { if (digitalRead(3) == LOW && digitalRead(4) == LOW && digitalRead(6) == LOW && digitalRead(7) == LOW) { delay(t); if (digitalRead(3) == LOW && digitalRead(4) == LOW && digitalRead(6) == LOW && digitalRead(7) == LOW) { cases = 0; // blue } } if (digitalRead(3) == 0 && digitalRead(4) == 0 && digitalRead(6) == 1 && digitalRead(7) == 1) { delay(t); if (digitalRead(3) == 0 && digitalRead(4) == 0 && digitalRead(6) == 1 && digitalRead(7) == 1) { cases = 1; // green } } if (digitalRead(3) == 1 && digitalRead(4) == 1 && digitalRead(6) == 0 && digitalRead(7) == 0) { delay(t); if (digitalRead(3) == 1 && digitalRead(4) == 1 && digitalRead(6) == 0 && digitalRead(7) == 0) { cases = 2; // violet } } if (digitalRead(3) == LOW && digitalRead(4) == 1 && digitalRead(6) == LOW && digitalRead(7) == 1) { delay(t); if (digitalRead(3) == LOW && digitalRead(4) == 1 && digitalRead(6) == LOW && digitalRead(7) == 1) { cases = 3; // yellow } } if (digitalRead(3) == 1 && digitalRead(4) == LOW && digitalRead(6) == 1 && digitalRead(7) == LOW) { delay(t); if (digitalRead(3) == 1 && digitalRead(4) == LOW && digitalRead(6) == 1 && digitalRead(7) == LOW) { cases = 4; // red } } if (digitalRead(3) == 1 && digitalRead(4) == 1 && digitalRead(6) == 1 && digitalRead(7) == 1) { delay(t); if (digitalRead(3) == 1 && digitalRead(4) == 1 && digitalRead(6) == 1 && digitalRead(7) == 1) { cases = 5; // orange } } transmit_data = cases; if (transmit_data != latest_data) { // если есть изменения в transmit_data flag = 1; // поднять флаг отправки по радио latest_data = transmit_data; // запомнить последнее изменение } if (flag == 1) { radio.powerUp(); // включить передатчик radio.write(&transmit_data, sizeof(transmit_data));// отправить по радио flag = 0; //опустить флаг radio.powerDown(); // выключить передатчик } switch (cases) {// для 433 МГц case 0: //Синий for (int i = 0; i <= 1; i++) { mySwitch.send(5594115, 24); delay(2); } break; case 1: //Зеленый for (int i = 0; i <= 1; i++) { mySwitch.send(5591811, 24); delay(2); } break; case 2: //Фиолетовый for (int i = 0; i <= 1; i++) { mySwitch.send(5591280, 24); delay(2); } break; case 3: //Желтый for (int i = 0; i <= 1; i++) { mySwitch.send(5591820, 24); delay(2); } break; case 4: //Красный for (int i = 0; i <= 1; i++) { mySwitch.send(5591235, 24); delay(2); } break; case 5: //Оранжевый for (int i = 0; i <= 1; i++) { mySwitch.send(5591244, 24); delay(2); } break; } }
передатчик без умолку шлет команды по 433 ((((((
как сделать что бы он отправлял команду только один раз после изменения положения?
Сенсоры наклона стоят под угом 45 градусов к плате и дают 6 точных позиций (сенсоры наклона выступают как кнопки).
если знаете как перевести систему на акселерометр, буду благодарен за помощь