Не получается написать условие

Fravahar
Offline
Зарегистрирован: 30.08.2017
Здравствуйте, уважаемые форумчане. Я новичек и пока только постигаю азы программирования ардуино.
Столкнулся с проблемой, с которой сам не могу справиться, потому прошу помощи у вас.
Понимаю что данная проблема должна решаться с помощью if...else, но что бы я не делал, какие бы примеры не рассматривал, все в пустую, то ли с синтаксисом косячу, то ли в принципе не то делаю.
{  
 radio.read( &recieved_data, sizeof(recieved_data) );//чиатем входящий
 //сигнал в "recieved_data", это 3 элемента массива, но в данном случае
 //нужен только элемент [1]

 //следующее не могу осилить:

 если recieved_data[1] имее значение от 0 до 500, то записать в переменную A логическую единицу для последующей ее отправки на группу цифровых пинов (либо сразу отправка, минуя запись в переменную)
 
 если recieved_data[1] имее значение от 510 до 1023, то записать в переменную B логическую единицу для последующей ее отправки на другую группу цифровых пинов (либо сразу отправка, минуя запись в переменную)
 
 в иных случаях в переменных A и B логический ноль
}

 

спасибо за ответы.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Не понял, Вы пишете ...

Fravahar пишет:

 что бы я не делал,

Так что Вы делали? Посмотреть можно?

CheS_66
CheS_66 аватар
Offline
Зарегистрирован: 08.02.2017
Fravahar
Offline
Зарегистрирован: 30.08.2017

Это на передатчике:

//таблица использованных пинов
//1 tx1 (pd1)- ----     //   vin     + питание 5V
//0 rx0 (pd0)- ----     //   gnd     + земля
//  rst      - ----     //   rst     - ----
//  gnd      + земля    //   5V      -
//2 d2       -          //   A7      + Ypot
//3 d3   PWM + button   //   A6      + Xpot
//4 d4       -          //19 A5(scl) -          
//5 d5   PWM -          //18 A4(sda) -          
//6 d6   PWM -          //17 A3      -          
//7 d7       -          //16 A2      -          
//8 d8       -          //15 A1      + slider ?          
//9 d9   PWM + CE Wifi  //14 A0      + potent ?          
//10 d10 PWM + SCN Wifi //   aref    - ----
//11 d11     + MOSI Wifi//   3v3     + питание 3.3в Wifi
//12 d12 PWM + MISO Wifi//13 d13     + SCK Wifi

//таблица использованных пинов Wifi
//земля +    //3,3в питание + 
//CE    +    //SCN          +
//SCK   +    //MOSI         +
//MISO  +    //IRQ          -

//подключаем библиотеки
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

RF24 radio(9, 10);//создаем WI FI модуль на пинах 9(CE) и 10(SCN)

byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"};//возможные номера труб

//создаем байты и назначаем им пины
byte button = 3;//кнопка на 3 цифровом
byte Xpot = A6;//X ось джойсика
byte Ypot = A7;//Y ось джойсика
byte potent = 0;//потенциометр на 0 аналоговом ?
byte slider = 1;//движковый потенциометр на 1 аналоговом пине ?

byte transmit_data[5];//массив, хранящий передаваемые данные
byte latest_data[5];//массив, хранящий последние переданные данные
boolean flag;//флажок отправки данных

//ниже настройки программы
void setup() 
{
  Serial.begin(9600);//инициализация ком порта
  pinMode(button, INPUT_PULLUP);//настроим пин кнопки

  radio.begin();//активируем модуль Wifi
  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() 
{
  //для Wifi 
  transmit_data[0] = !digitalRead(button);//инвертированный (!) сигнал с кнопки на 0 место в массиве
  transmit_data[1] = map(analogRead(potent), 0, 1023, 0, 180);//получить значение в диапазоне 0..1023, перевести в 0..180, и записать на 1 место в массиве
  transmit_data[2] = map(analogRead(slider), 0, 1023, 0, 255);//получить значение в диапазоне 0..1023, перевести в 0..255, и записать на 2 место в массиве
  transmit_data[3] = map(analogRead(Xpot), 0, 1023, 0, 1023);//получить значение в диапазоне 0..1023, перевести в 0..1023, и записать на 3 место в массиве
  transmit_data[4] = map(analogRead(Ypot), 0, 1023, 0, 1023);//получить значение в диапазоне 0..1023, перевести в 0..1023, и записать на 4 место в массиве

  for (int i = 0; i < 3; i++) 
  { //в цикле от 0 до числа каналов
    if (transmit_data[i] != latest_data[i]) 
    { //если есть изменения в transmit_data
      flag = 1; //поднимаем флаг отправки по радио
      latest_data[i] = transmit_data[i]; //запоминаем последнее изменение
    }
  }
  if (flag == 1) 
  {
    radio.powerUp();//включаем передатчик
    radio.write(&transmit_data, sizeof(transmit_data));//отправляем по радио
    flag = 0;//опускаем флаг
    radio.powerDown();//выключаем передатчик
  }
}

Это на приемнике:

//таблица использованных пинов
//1 tx1 (pd1)- ----     //   vin     + питание 5V
//0 rx0 (pd0)- ----     //   gnd     + земля
//  rst      - ----     //   rst     - ----
//  gnd      + земля    //   5V      - 
//2 d2       + LUV      //   A7      - (фоторезистор для освещения)
//3 d3   PWM + LUN      //   A6      - (светодиоды для освещения)
//4 d4       + LDV      //19 A5(scl) + echoPin
//5 d5   PWM + servo    //18 A4(sda) + trigPin
//6 d6   PWM + potenciom//17 A3      + relay
//7 d7       + LDN      //16 A2      + RDN
//8 d8       + RUV      //15 A1      + RDV
//9 d9   PWM + CE Wifi  //14 A0      + RUN
//10 d10 PWM + SCN Wifi //   aref    - ----
//11 d11     + MOSI Wifi//   3v3     + питание 3.3в Wifi
//12 d12 PWM + MISO Wifi//13 d13     + SCK Wifi

//таблица использованных пинов Wifi
//земля +    //3,3в питание + 
//CE    +    //SCN          +
//SCK   +    //MOSI         +
//MISO  +    //IRQ          -

//подключаем библиотеки
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <Servo.h>

RF24 radio(9, 10);//создаем WI FI модуль на пинах 9(CE) и 10(SCN)

//создаем байты и назначаем им пины
byte recieved_data[5];//массив принятых данных
byte relay = 17;//реле на 17 цифровом
byte servo = 5;//сервопривод на 5 цифровом (ШИМ)
byte potenciom = 6;//регулятор на 6 цифровом (ШИМ)
//создаем переменные и присваиваем им дефолтное значение
int Xpot = 505;//создаем переменную для хранения данных X положения джойситка
int Ypot = 505;//создаем переменную для хранения данных Y положения джойситка

Servo myservo;//создаем объект серводвигателя myservo
byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"};//возможные номера труб

//инициируем пины ардуино на оба драйвера мотор-редукторов
//пины D1 и D2 работают совместно с TX и RX, при их использовании мигают светодиоды на плате. Пин D13 завязан еще на один светодиод. Поэтому их я решил использовать только в крайнем случае.
//L-левый R-правый U-верхний D-нижний V-вперед N-назад
int LUV = 2;//пин D2
int LUN = 3;//пин D3
int LDV = 4;//пин D4
int LDN = 7;//пин D7
int RUV = 11;//пин D11
int RUN = 14;//пин A0
int RDV = 15;//пин A1
int RDN = 16;//пин A2
//инициируем пины ардуино эхолокатор
int echoPin = 19;//пин 19 ШИМ эхо локатор
int trigPin = 18;//пин 18 ШИМ триг локатор

//ниже настройки программы
void setup() 
{
//настройка для пинов движения
pinMode (LUV, OUTPUT);//задаем пину тип на вывод
pinMode (LUN, OUTPUT);//задаем пину тип на вывод
pinMode (LDV, OUTPUT);//задаем пину тип на вывод
pinMode (LDN, OUTPUT);//задаем пину тип на вывод
pinMode (RUV, OUTPUT);//задаем пину тип на вывод
pinMode (RUN, OUTPUT);//задаем пину тип на вывод
pinMode (RDV, OUTPUT);//задаем пину тип на вывод
pinMode (RDN, OUTPUT);//задаем пину тип на вывод
//инициализация ком порта
Serial.begin (9600); 
//настройка для пинов сонара
pinMode(trigPin, OUTPUT);//задаем триг на передачу
pinMode(echoPin, INPUT);//задаем эхо на прием
//настройка для пинов реле и мосфета
pinMode(relay, OUTPUT);//задаем пин реле как выход
pinMode(potenciom, OUTPUT);//задаем пин регулятора как выход

myservo.attach(servo);//подключаем сервопривод на servo

radio.begin();//активируем модуль Wifi
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() 
{
  {
  //для сонара
  int duration, cm;//инициализируем две переменные duration и cm
  digitalWrite(trigPin, LOW);//триг отключен
  delayMicroseconds(2);//ждем 2 милисекунды
  digitalWrite(trigPin, HIGH);//триг включен
  delayMicroseconds(10);//ждем 10 милисекунд
  digitalWrite(trigPin, LOW);//отключаем триг
  duration = pulseIn(echoPin, HIGH);//присваиваем переменной duration принятое эхо
  cm = duration / 58;//высчитываем переменную cm
  Serial.print(cm);//строки для ком порта нам не нужны
  Serial.println(" cm");//строки для ком порта нам не нужны
  delay(100);//ждем 0,1сек или 100 милисекунд
  }
  {
  //для Wifi 
  byte pipeNo;
  while ( radio.available(&pipeNo)) //слушаем эфир со всех труб
    {  
    radio.read( &recieved_data, sizeof(recieved_data) );//чиатем входящий сигнал
    digitalWrite(relay, recieved_data[0]);//подаем на реле сигнал с 0 места массива (0 или 1) переключения робота с ручного в автономный режим
    myservo.write(recieved_data[1]);//поверем серво на угол 0..180 (значение получено с 1 элемента массива) сервопривод управления эхолокатором
    analogWrite(potenciom, recieved_data[2]);//подаем на регулятор ШИМ сигнал (в соответствии с принятыми данными со 2 места массива, диапазон 0...255 ) IRda или регулятор скорости
    analogWrite(Xpot, recieved_data[3]);//записываем массив 3 в переменную Xpot
    analogWrite(Ypot, recieved_data[4]);//записываем массив 4 в переменную Ypot
    
//Управление мотор-редукторами джойстиком по оси Y (вперед и назад)  
    if (Ypot < 500)//движение назад
    {
       digitalWrite(LUN, HIGH);//сигнал LU мотор-редуктору на движение назад
       digitalWrite(LDN, HIGH);//сигнал LD мотор-редуктору на движение назад
       digitalWrite(RUN, HIGH);//сигнал RU мотор-редуктору на движение назад
       digitalWrite(RDN, HIGH);//сигнал RD мотор-редуктору на движение назад
    }
    else if (Ypot > 512)//движение вперед
    {
       digitalWrite(LUV, HIGH);//сигнал LU мотор-редуктору на движение вперед
       digitalWrite(LDV, HIGH);//сигнал LD мотор-редуктору на движение вперед
       digitalWrite(RUV, HIGH);//сигнал RU мотор-редуктору на движение вперед
       digitalWrite(RDV, HIGH);//сигнал RD мотор-редуктору на движение вперед
    }
    else//остановка всех мотор-редукторов
    {
       digitalWrite(LUN, LOW);//сигнал LU мотор-редуктору на остановку1
       digitalWrite(LDN, LOW);//сигнал LD мотор-редуктору на остановку1
       digitalWrite(RUN, LOW);//сигнал RU мотор-редуктору на остановку1
       digitalWrite(RDN, LOW);//сигнал RD мотор-редуктору на остановку1
       digitalWrite(LUV, LOW);//сигнал LU мотор-редуктору на остановку2
       digitalWrite(LDV, LOW);//сигнал LD мотор-редуктору на остановку2
       digitalWrite(RUV, LOW);//сигнал RU мотор-редуктору на остановку2
       digitalWrite(RDV, LOW);//сигнал RD мотор-редуктору на остановку2
    }
    
//Управление мотор-редукторами джойстиком по оси X (влево и вправо) 
    if (Xpot < 500)//поворот налево
    {
       digitalWrite(LUN, HIGH);//сигнал LU мотор-редуктору на движение назад
       digitalWrite(LDN, HIGH);//сигнал LD мотор-редуктору на движение назад
       digitalWrite(RUV, HIGH);//сигнал RU мотор-редуктору на движение вперед
       digitalWrite(RDV, HIGH);//сигнал RD мотор-редуктору на движение вперед
    }
    else if (Xpot > 512)//поворот направо
    {
       digitalWrite(LUV, HIGH);//сигнал LU мотор-редуктору на движение вперед
       digitalWrite(LDV, HIGH);//сигнал LD мотор-редуктору на движение вперед
       digitalWrite(RUN, HIGH);//сигнал RU мотор-редуктору на движение назад
       digitalWrite(RDN, HIGH);//сигнал RD мотор-редуктору на движение назад
    }
    else//остановка всех мотор-редукторов
    {
       digitalWrite(LUN, LOW);//сигнал LU мотор-редуктору на остановку1
       digitalWrite(LDN, LOW);//сигнал LD мотор-редуктору на остановку1
       digitalWrite(RUN, LOW);//сигнал RU мотор-редуктору на остановку1
       digitalWrite(RDN, LOW);//сигнал RD мотор-редуктору на остановку1
       digitalWrite(LUV, LOW);//сигнал LU мотор-редуктору на остановку2
       digitalWrite(LDV, LOW);//сигнал LD мотор-редуктору на остановку2
       digitalWrite(RUV, LOW);//сигнал RU мотор-редуктору на остановку2
       digitalWrite(RDV, LOW);//сигнал RD мотор-редуктору на остановку2
    }
    }
  }
}

Не работает код со строки 129

Попробовал  switch, тоже ноль реакции

int value = Ypot;
switch (value) 
{
         case 0 ... 500:
           {
            digitalWrite(LUN, HIGH);//сигнал LU мотор-редуктору на движение назад
            digitalWrite(LDN, HIGH);//сигнал LD мотор-редуктору на движение назад
            digitalWrite(RUN, HIGH);//сигнал RU мотор-редуктору на движение назад
            digitalWrite(RDN, HIGH);//сигнал RD мотор-редуктору на движение назад
            break;
           }
            
         case 512 ... 1023:
           {
            digitalWrite(LUV, HIGH);//сигнал LU мотор-редуктору на движение вперед
            digitalWrite(LDV, HIGH);//сигнал LD мотор-редуктору на движение вперед
            digitalWrite(RUV, HIGH);//сигнал RU мотор-редуктору на движение вперед
            digitalWrite(RDV, HIGH);//сигнал RD мотор-редуктору на движение вперед
            break;
           }
           
        default:
           {
            digitalWrite(LUN, LOW);//сигнал LU мотор-редуктору на остановку1
            digitalWrite(LDN, LOW);//сигнал LD мотор-редуктору на остановку1
            digitalWrite(RUN, LOW);//сигнал RU мотор-редуктору на остановку1
            digitalWrite(RDN, LOW);//сигнал RD мотор-редуктору на остановку1
            digitalWrite(LUV, LOW);//сигнал LU мотор-редуктору на остановку2
            digitalWrite(LDV, LOW);//сигнал LD мотор-редуктору на остановку2
            digitalWrite(RUV, LOW);//сигнал RU мотор-редуктору на остановку2
            digitalWrite(RDV, LOW);//сигнал RD мотор-редуктору на остановку2
           }                 
 }

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Передатчик не смотрел. О приёмнике.

Для начала просто поставьте печать Ypot и Xpot перед строкой 130 и посмотрите, чему они равны. Как же все новички любят вслепую работать!

Ваш Ypot очень странная переменная

В строке 39 он у Вас получет значение 505 и больше нигде и никогда не изменяется
В строке 127 Вы его испольуете как номер пина (хрена-се у Вас пинов!)
В строке 130 Вы его сравниваене на <500 (false)
В строке137 Вы его сравниваете на >512 (снова false)
 
Значит у Вас всегда отрабатывают строки 146-153
 
С переменной Xpot та же самая хрень, только номера строк другие - разбирайтесь, исправляйте.
Fravahar
Offline
Зарегистрирован: 30.08.2017

Спасибо за совет с печатью, как то не догадался смотреть ей, очень дельный совет на самом деле.

Понял что проблемма в переменной, висит на одном значении и не меняется.

Но понять, почему строка

analogWrite(Ypot, recieved_data[4]);

не верна - не могу, т.к. аналогичная ей

digitalWrite(relay, recieved_data[0]);

вполне работает.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Я тем более не могу понять, поскольку я не знаю чего Вы ожидаете от этой строки. Если она делает не то, чего Вы от неё ждёте, значит чего-то не того ждёте. Почитайте на всякий случай описание функции analogWrite, может разберётесь. А нет, так объясняйте что Вы имеете в виду под этой строкой.  Если Вы ожидаете, что она поменяете значение Ypot, таки нет - не поменяет и не должна этого делать.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Я все перемные указывающие на ноги сделал с суффуксом Pin. Может так поймете

//таблица использованных пинов
//1 tx1 (pd1)- ----     //   vin     + питание 5V
//0 rx0 (pd0)- ----     //   gnd     + земля
//  rst      - ----     //   rst     - ----
//  gnd      + земля    //   5V      -
//2 d2       + LUVpin      //   A7      - (фоторезистор для освещения)
//3 d3   PWM + LUNpin      //   A6      - (светодиоды для освещения)
//4 d4       + LDVpin      //19 A5(scl) + echoPin
//5 d5   PWM + servo    //18 A4(sda) + trigPin
//6 d6   PWM + potenPin//17 A3      + relayPin
//7 d7       + LDNpin      //16 A2      + RDNpin
//8 d8       + RUVpin      //15 A1      + RDVpin
//9 d9   PWM + CE Wifi  //14 A0      + RUNpin
//10 d10 PWM + SCN Wifi //   aref    - ----
//11 d11     + MOSI Wifi//   3v3     + питание 3.3в Wifi
//12 d12 PWM + MISO Wifi//13 d13     + SCK Wifi

//таблица использованных пинов Wifi
//земля +    //3,3в питание +
//CE    +    //SCN          +
//SCK   +    //MOSI         +
//MISO  +    //IRQ          -

//подключаем библиотеки
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <Servo.h>

RF24 radio(9, 10);//создаем WI FI модуль на пинах 9(CE) и 10(SCN)

//создаем байты и назначаем им пины
byte recieved_data[5];//массив принятых данных
byte relayPin = 17;//реле на 17 цифровом
byte servoPin = 5;//сервопривод на 5 цифровом (ШИМ)
byte potenPin = 6;//регулятор на 6 цифровом (ШИМ)
//создаем переменные и присваиваем им дефолтное значение
int Xpot = 505;//создаем переменную для хранения данных X положения джойситка
int Ypot = 505;//создаем переменную для хранения данных Y положения джойситка

Servo myservo;//создаем объект серводвигателя myservo
byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"};//возможные номера труб

//инициируем пины ардуино на оба драйвера мотор-редукторов
//пины D1 и D2 работают совместно с TX и RX, при их использовании мигают светодиоды на плате. Пин D13 завязан еще на один светодиод. Поэтому их я решил использовать только в крайнем случае.
//L-левый R-правый U-верхний D-нижний V-вперед N-назад
const byte LUVpin = 2;//пин D2
const byte LUNpin = 3;//пин D3
const byte LDVpin = 4;//пин D4
const byte LDNpin = 7;//пин D7
const byte RUVpin = 11;//пин D11
const byte RUNpin = 14;//пин A0
const byte RDVpin = 15;//пин A1
const byte RDNpin = 16;//пин A2
//инициируем пины ардуино эхолокатор
const byte echoPin = 19;//пин 19 ШИМ эхо локатор
const byte trigPin = 18;//пин 18 ШИМ триг локатор

//---------main-------------------------------
void setup() {
  //инициализация ком порта
  Serial.begin (9600);
  //настройка для пинов движения
  pinMode (LUVpin, OUTPUT);//задаем пину тип на вывод
  pinMode (LUNpin, OUTPUT);//задаем пину тип на вывод
  pinMode (LDVpin, OUTPUT);//задаем пину тип на вывод
  pinMode (LDNpin, OUTPUT);//задаем пину тип на вывод
  pinMode (RUVpin, OUTPUT);//задаем пину тип на вывод
  pinMode (RUNpin, OUTPUT);//задаем пину тип на вывод
  pinMode (RDVpin, OUTPUT);//задаем пину тип на вывод
  pinMode (RDNpin, OUTPUT);//задаем пину тип на вывод
  //настройка для пинов сонара
  pinMode(trigPin, OUTPUT);//задаем триг на передачу
  pinMode(echoPin, INPUT);//задаем эхо на прием
  //настройка для пинов реле и мосфета
  pinMode(relayPin, OUTPUT);//задаем пин реле как выход
  pinMode(potenPin, OUTPUT);//задаем пин регулятора как выход

  myservo.attach(servoPin);//подключаем сервопривод на servo

  radio.begin();//активируем модуль Wifi
  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() {
  {
    //для сонара
    int duration, cm;//инициализируем две переменные duration и cm
    digitalWrite(trigPin, LOW);//триг отключен
    delayMicroseconds(2);//ждем 2 милисекунды
    digitalWrite(trigPin, HIGH);//триг включен
    delayMicroseconds(10);//ждем 10 милисекунд
    digitalWrite(trigPin, LOW);//отключаем триг
    duration = pulseIn(echoPin, HIGH);//присваиваем переменной duration принятое эхо
    cm = duration / 58;//высчитываем переменную cm
    Serial.print(cm);//строки для ком порта нам не нужны
    Serial.println(" cm");//строки для ком порта нам не нужны
    delay(100);//ждем 0,1сек или 100 милисекунд
  }
  {
    //для Wifi
    byte pipeNo;
    while ( radio.available(&pipeNo)) //слушаем эфир со всех труб
    {
      radio.read( &recieved_data, sizeof(recieved_data) );//чиатем входящий сигнал
      digitalWrite(relayPin, recieved_data[0]);//подаем на реле сигнал с 0 места массива (0 или 1) переключения робота с ручного в автономный режим
      myservo.write(recieved_data[1]);//поверем серво на угол 0..180 (значение получено с 1 элемента массива) сервопривод управления эхолокатором
      analogWrite(potenPin, recieved_data[2]);//подаем на регулятор ШИМ сигнал (в соответствии с принятыми данными со 2 места массива, диапазон 0...255 ) IRda или регулятор скорости
      analogWrite(Xpot, recieved_data[3]);//записываем массив 3 в переменную Xpot //<---вот про этот бред вам и говорят
      analogWrite(Ypot, recieved_data[4]);//записываем массив 4 в переменную Ypot //<---

      //Управление мотор-редукторами джойстиком по оси Y (вперед и назад)
      if (Ypot < 500)//движение назад
      {
        digitalWrite(LUNpin, HIGH);//сигнал LU мотор-редуктору на движение назад
        digitalWrite(LDNpin, HIGH);//сигнал LD мотор-редуктору на движение назад
        digitalWrite(RUNpin, HIGH);//сигнал RU мотор-редуктору на движение назад
        digitalWrite(RDNpin, HIGH);//сигнал RD мотор-редуктору на движение назад
      }
      else if (Ypot > 512)//движение вперед
      {
        digitalWrite(LUVpin, HIGH);//сигнал LU мотор-редуктору на движение вперед
        digitalWrite(LDVpin, HIGH);//сигнал LD мотор-редуктору на движение вперед
        digitalWrite(RUVpin, HIGH);//сигнал RU мотор-редуктору на движение вперед
        digitalWrite(RDVpin, HIGH);//сигнал RD мотор-редуктору на движение вперед
      }
      else//остановка всех мотор-редукторов
      {
        digitalWrite(LUNpin, LOW);//сигнал LU мотор-редуктору на остановку1
        digitalWrite(LDNpin, LOW);//сигнал LD мотор-редуктору на остановку1
        digitalWrite(RUNpin, LOW);//сигнал RU мотор-редуктору на остановку1
        digitalWrite(RDNpin, LOW);//сигнал RD мотор-редуктору на остановку1
        digitalWrite(LUVpin, LOW);//сигнал LU мотор-редуктору на остановку2
        digitalWrite(LDVpin, LOW);//сигнал LD мотор-редуктору на остановку2
        digitalWrite(RUVpin, LOW);//сигнал RU мотор-редуктору на остановку2
        digitalWrite(RDVpin, LOW);//сигнал RD мотор-редуктору на остановку2
      }

      //Управление мотор-редукторами джойстиком по оси X (влево и вправо)
      if (Xpot < 500)//поворот налево
      {
        digitalWrite(LUNpin, HIGH);//сигнал LU мотор-редуктору на движение назад
        digitalWrite(LDNpin, HIGH);//сигнал LD мотор-редуктору на движение назад
        digitalWrite(RUVpin, HIGH);//сигнал RU мотор-редуктору на движение вперед
        digitalWrite(RDVpin, HIGH);//сигнал RD мотор-редуктору на движение вперед
      }
      else if (Xpot > 512)//поворот направо
      {
        digitalWrite(LUVpin, HIGH);//сигнал LU мотор-редуктору на движение вперед
        digitalWrite(LDVpin, HIGH);//сигнал LD мотор-редуктору на движение вперед
        digitalWrite(RUNpin, HIGH);//сигнал RU мотор-редуктору на движение назад
        digitalWrite(RDNpin, HIGH);//сигнал RD мотор-редуктору на движение назад
      }
      else//остановка всех мотор-редукторов
      {
        digitalWrite(LUNpin, LOW);//сигнал LU мотор-редуктору на остановку1
        digitalWrite(LDNpin, LOW);//сигнал LD мотор-редуктору на остановку1
        digitalWrite(RUNpin, LOW);//сигнал RU мотор-редуктору на остановку1
        digitalWrite(RDNpin, LOW);//сигнал RD мотор-редуктору на остановку1
        digitalWrite(LUVpin, LOW);//сигнал LU мотор-редуктору на остановку2
        digitalWrite(LDVpin, LOW);//сигнал LD мотор-редуктору на остановку2
        digitalWrite(RUVpin, LOW);//сигнал RU мотор-редуктору на остановку2
        digitalWrite(RDVpin, LOW);//сигнал RD мотор-редуктору на остановку2
      }
    }
  }