Ви не увійшли.
передатчик без умолку шлет команды по 433.
как сделать что бы он отправлял команду только один раз после изменения положения?
Сенсоры наклона стоят под угом 45 градусов к плате и дают 6 точных позиций (сенсоры наклона выступают как кнопки).
если знаете как перевести систему на акселерометр, буду благодарен за помощь
#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;
}
}
Остання редакція Vic22 (2017-07-19 12:22:20)
Неактивний