Now I also found the TX part where the calculation is done ...
//Для расчета курса и направления
#include <TinyGPS++.h>
//*******************************
//Variabile EEPROM
#include <EEPROM.h>
double read_Latitude_EEPROM //переменная для чтения из памяти общая для расчетов пути
double read_Longitude_EEPROM //переменная для чтения из памяти общая для расчетов пути
double read_Latitude_EEPROM_p1; //переменная для чтения из памяти
double read_Longitude_EEPROM_p1; //переменная для чтения из памяти
double read_Latitude_EEPROM_p2; //переменная для чтения из памяти
double read_Longitude_EEPROM_p2; //переменная для чтения из памяти
double read_Latitude_EEPROM_p3; //переменная для чтения из памяти добавил для увеличения количества точек сохранения
double read_Longitude_EEPROM_p3; //переменная для чтения из памяти добавил для увеличения количества точек сохранения
double read_Latitude_EEPROM_p4; //переменная для чтения из памяти добавил для увеличения количества точек сохранения
double read_Longitude_EEPROM_p4; //переменная для чтения из памяти добавил для увеличения количества точек сохранения
//**************************
//Для вывода значений на экран
// include the library code:
#include <LiquidCrystal.h>
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 8, en = 7, d4 = 6, d5 = 5, d6 = 3, d7 = 4;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
//***********************
//Для радиомодуля
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно
byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
//****************
byte pin_potent1 = 2; // потенциометр на 0 аналоговом - 2 канал пульта
byte pin_potent2 = 3; // потенциометр на 1 аналоговом - 1 канал пульта
int transmit_data[4]; // массив, хранящий передаваемые данные
double telemetry[4]; // массив принятых от приёмника данных телеметрии
byte rssi;
int trnsmtd_pack = 1, failed_pack;
unsigned long RSSI_timer;
//VARIABILE PENTRU GPS
//long lalitude_nach;
double lalitude_prod;
//long longitude_nach;
double longitude_prod;
//byte day_moy;
//byte month_moy;
//int year_moy;
//byte hour_moy;
//byte minute_moy;
//byte second_moy;
//long speed_kmph_moy;
//float speed_mps_moy;
double course_moy;
//long visota_moy;
double sputniki_moy;
//float hdop_moy;
//****************************************
//для рассчета направления движения
float koef_asimut;
//*********************************
//Для автопилота
byte autopilot_on = 0; // начальное положение автопилота выключенное
byte avtotormoz_l = 0; //автотормоз при автопилоте для левого мотора
byte avtotormoz_r = 0; //автотормоз при автопилоте для правого мотора
byte avtotormoz = 50; // ИЗМЕНЯЕМОЕ ЗНАЧЕНИЕ АВТОТОРМОЗА ПРИ АВТОПИЛОТЕ
//**************
//переменные для моторов с разнотягом
int motor_l; //переменная шим левого мотора
int motor_r; //переменная шим правого мотора
int motor_z; //переменная шим заднего хода обоих моторов
//********************************
byte punkt_menu = 1; //выбор экрана меню
int sbros = 0; //начальное положение кнопки сброса
//RESET
void setup() {
//Для вывода значений на экран
lcd.begin(16, 2);
//****************************
// Serial.begin(9600); //открываем порт для связи с ПК
//Строки для радиомодуля
radio.begin(); //активировать модуль
// radio.setAutoAck(0); //режим подтверждения приёма, 1 вкл 0 выкл закомментировано для вставки обратной связи
//вставка для обратной связи
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_HIGH); //уровень мощности передатчика. На выбор 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 (autopilot_on == 0) {; // если автопилот выключен, то автотормоза обнуляются
byte avtotormoz_l = 0; //автотормоз при автопилоте для левого мотора
byte avtotormoz_r = 0; //автотормоз при автопилоте для правого мотора
}
int in_ch1 = analogRead(pin_potent1); //чтение аналоговых пинов
int in_ch2 = analogRead(pin_potent2); //чтение аналоговых пинов
//Подпрограмма "Если джойстик газа вверх, то движение вперед"
if (in_ch1 <= 504) {
in_ch1 = constrain(in_ch1,0,504); //ограничение канала газа от середины до верха
in_ch1 = map(in_ch1, 0, 504, 255-0, 0); //масштабирование канала газа в шим формат. МИНУСУЕТСЯ ПРОЦЕНТ ОБЩЕГО ХОДА. расходы газа есть еще в строках ограничения отдельных моторов (ниже).
int in_ch2_l = constrain(in_ch2,508,1023); //делаю ограничения по сторонам
int in_ch2_r = constrain(in_ch2,0,506);
in_ch2_l = (map(in_ch2_l, 507, 1023, 0, 255))/3; //масштабирую стороны от 0 до 255. ПОСЛЕ ДРОБИ РАСХОДЫ РУЛЕНИЯ
in_ch2_r = (map(in_ch2_r, 506, 0, 0, 255))/3; //масштабирую стороны от 0 до 255. ПОСЛЕ ДРОБИ РАСХОДЫ РУЛЕНИЯ
//формулы для моторов с разнотягом
motor_l = in_ch1 - in_ch2_l + in_ch2_r - 15; // -15 ЭТО ОБЩИЙ ТРИММЕР ХОДА ПРЯМО
motor_r = in_ch1 - in_ch2_r + in_ch2_l;
//********************************
motor_l = constrain(motor_l,0,255-avtotormoz_l-0); //ограничиваю цифры моторов. МИНУСУЕТСЯ ПРОЦЕНТ ОБЩЕГО ХОДА И АВТОТОРМОЗ АВТОПИЛОТА. расходы газа есть еще в масштабировании канала газа (выше).
motor_r = constrain(motor_r,0,255-avtotormoz_r-0); //ограничиваю цифры моторов. МИНУСУЕТСЯ ПРОЦЕНТ ОБЩЕГО ХОДА И АВТОТОРМОЗ АВТОПИЛОТА. расходы газа есть еще в масштабировании канала газа (выше).
motor_z = 0; //канал задней скорости отключен
}
//Конец подпрограммы "Если джойстик газа вверх, то движение вперед"
//Подпрограмма "Если джойстик газа вниз, то движение назад"
if (in_ch1 >= 510) {
in_ch1 = constrain(in_ch1,510,1023); //ограничение канала газа от середины до низа
motor_z = map(in_ch1, 510, 1023, 0, 255-0); //масштабирование канала газа заднего хода в шим формат. МИНУСУЕТСЯ РАСХОД ОБЩЕГО ХОДА.
motor_l = 0; //передний левый мотор стоит
motor_r = 0; //передний правый мотор стоит
}
//Конец подпрограммы "Если джойстик газа вниз, то движение назад"
//Создание массива для передачи
transmit_data[0] = motor_l; //канал передней скорости левого мотора
transmit_data[1] = motor_r; //канал передней скорости правого мотора
transmit_data[2] = sbros; // канал сброса груза
transmit_data[3] = motor_z; //канал задней скорости на оба мотора
//Строки для радиомодуля
radio.powerUp(); // включить передатчик
//radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио
//вставка отправки с обратной связью и RSSI
if (radio.write(&transmit_data, sizeof(transmit_data))) { // отправка пакета transmit_data
trnsmtd_pack++;
if (!radio.available()) { // если получаем пустой ответ
} else {
while (radio.available() ) { // если в ответе что-то есть
radio.read(&telemetry, sizeof(telemetry)); // читаем
// получили забитый данными массив telemetry ответа от приёмника
}
}
} else {
failed_pack++;
}
if (millis() - RSSI_timer > 1000) { // таймер RSSI
// расчёт качества связи (0 - 100%) на основе числа ошибок и числа успешных передач
rssi = (1 - ((float)failed_pack / trnsmtd_pack)) * 100;
// сбросить значения
failed_pack = 0;
trnsmtd_pack = 0;
RSSI_timer = millis();
}
//конец вставки передачи с обратной связью и RSSI
radio.powerDown(); // выключить передатчик
//**********************
//Для расчета курса и направления
// Pentru a calcula cursul și direcția
double distanceToLondon =
TinyGPSPlus::distanceBetween(
telemetry[0],
telemetry[1],
read_Latitude_EEPROM,
read_Longitude_EEPROM);
double courseToLondon =
TinyGPSPlus::courseTo(
telemetry[0],
telemetry[1],
read_Latitude_EEPROM,
read_Longitude_EEPROM);
// Serial.print(distanceToLondon, 2);
// Serial.print(" m Course-to=");
// Serial.println(courseToLondon, 0);
//*******************************
//Для вывода значений на экран
// Pentru a afișa valorile pe ecran
//Выбор экрана меню
if (analogRead(1)>1000 && analogRead(0)<1000) {
punkt_menu = punkt_menu+1;
if (punkt_menu >= 13) {
punkt_menu = 1;
}
}
lcd.clear();
lcd.setCursor(0, 0); lcd.print(punkt_menu);
lcd.setCursor(0, 1); lcd.print(rssi);
//Экран №1
if (punkt_menu == 1){
lcd.setCursor(2, 0); lcd.print("RC FPV Aviator");
lcd.setCursor(3, 1); lcd.print(" Autopilot");
}
//Экран №0
if (punkt_menu == 0){
// lcd.setCursor(2, 0); lcd.print("*");
// lcd.setCursor(3, 0); lcd.print(read_Latitude_EEPROM, 6); lcd.print(" "); lcd.print(read_Longitude_EEPROM, 6);
//верхняя строка с координатами
lcd.setCursor(7, 0); lcd.print(read_Longitude_EEPROM, 6);
lcd.setCursor(0, 0); lcd.print(read_Latitude_EEPROM, 6); lcd.print(" ");
lcd.setCursor(0, 0); lcd.print(punkt_menu);
lcd.setCursor(1, 0); lcd.print(" *");
//-----------------------------
//нижняя строка с координатами
lcd.setCursor(7, 1); lcd.print(telemetry[1], 6);
lcd.setCursor(0, 1); lcd.print(telemetry[0], 6); lcd.print(" ");
lcd.setCursor(0, 1); lcd.print(rssi);
lcd.setCursor(2, 1); lcd.print(" ");
//-----------------------------
}
//Экран №2
if (punkt_menu == 2){
if (analogRead(1)>1000 && analogRead(0)>1000){ //если нажимаются клавиши правая и левая, то значение включения автопилота меняется
autopilot_on = !autopilot_on;
}
//Подпрограмма расчета направления движения
course_moy = telemetry[3]; //присваиваются переменной действующего курса данные с телеметрии
koef_asimut = (course_moy - courseToLondon)/180; //дельта курсов делится на 180. если больше 1-направо, если меньше 1-налево
if (koef_asimut > 1.005){
lcd.setCursor(4, 0); lcd.print(">>>>>>>"); lcd.setCursor(13, 0); lcd.print(course_moy,0); //показывает действующий курс
if (autopilot_on == 1){ //Если автопилот включен, то
avtotormoz_l = 0; //левый мотор не тормозит
avtotormoz_r = avtotormoz; //то тормозит правый мотор
lcd.setCursor(4, 0); lcd.print(">>AUTO>>");
}else{
avtotormoz_l = 0; //левый мотор не тормозит
avtotormoz_r = 0; //правый мотор не тормозит
}
}
if (koef_asimut < -0.005){
lcd.setCursor(4, 0); lcd.print(">>>>>>>"); lcd.setCursor(13, 0); lcd.print(course_moy,0); //показывает действующий курс
if (autopilot_on == 1){ //Если автопилот включен, то
avtotormoz_l = 0; //левый мотор не тормозит
avtotormoz_r = avtotormoz; //то тормозит правый мотор
lcd.setCursor(4, 0); lcd.print(">>AUTO>>");
}else{
avtotormoz_l = 0; //левый мотор не тормозит
avtotormoz_r = 0; //правый мотор не тормозит
}
}
if (koef_asimut > 0.005 && koef_asimut < 0.994){
lcd.setCursor(4, 0); lcd.print("<<<<<<<"); lcd.setCursor(13, 0); lcd.print(course_moy,0); //показывает действующий курс
if (autopilot_on == 1){ //Если автопилот включен, то
avtotormoz_l = avtotormoz+10; //то тормозит левый мотор // +10 ЭТО УСКОРЕНИЕ РУЛЕНИЯ В ЛЕВО ПРИ АВТОПИЛОТЕ. БЕЗ НЕГО ВЛЕВО РУЛИТ МЕДЛЕННЕЕ ЧЕМ В ПРАВО!!!!!!!!!
avtotormoz_r = 0; //правый мотор не тормозит
lcd.setCursor(4, 0); lcd.print("<<AUTO<<");
}else{
avtotormoz_l = 0; //левый мотор не тормозит
avtotormoz_r = 0; //правый мотор не тормозит
}
}
if (koef_asimut >= 0.994 && koef_asimut <= 1.005){
lcd.setCursor(4, 0); lcd.print("<<< >>>"); lcd.setCursor(13, 0); lcd.print(course_moy,0); //показывает действующий курс
if (autopilot_on == 1){ //Если автопилот включен, то
avtotormoz_l = 0; //левый мотор не тормозит
avtotormoz_r = avtotormoz; //то тормозит правый мотор
lcd.setCursor(4, 0); lcd.print(">>AUTO>>");
}else{
avtotormoz_l = 0; //левый мотор не тормозит
avtotormoz_r = 0; //правый мотор не тормозит
}
}
if (koef_asimut >= -0.005 && koef_asimut <= 0.005){
lcd.setCursor(4, 0); lcd.print(">>>o<<<"); lcd.setCursor(13, 0); lcd.print(course_moy,0); //показывает действующий курс
if (autopilot_on == 1){ //Если автопилот включен, то
avtotormoz_l = 0; //левый мотор не тормозит
avtotormoz_r = 0; //правый мотор не тормозит
lcd.setCursor(4, 0); lcd.print(">>AUTO<<");
}else{
avtotormoz_l = 0; //левый мотор не тормозит
avtotormoz_r = 0; //правый мотор не тормозит
}
}
//*****************************************
//lcd.setCursor(4, 0); lcd.print("Course:"); lcd.setCursor(13, 0); lcd.print(telemetry[3],0); //показывает действующий курс
lcd.setCursor(4, 1); lcd.print(distanceToLondon, 2); lcd.print("m" ); lcd.setCursor(12, 1); lcd.print(" "); lcd.print(courseToLondon, 0); //показывает расстояние и курс до нужной точки
}
//Экран №3
if (punkt_menu == 3){
lcd.setCursor(4, 0); lcd.print("SBROS???"); //RESET
lcd.setCursor(7, 1); lcd.print(sbros);
if (analogRead(1)>1000 && analogRead(0)>1000){
sbros = 1;
}else{
sbros = 0;
}
}
//Экран №4
if (punkt_menu == 4){
lcd.setCursor(4, 0); lcd.print("Satellites:");
lcd.setCursor(4, 1); lcd.print(telemetry[2],0);
}
//Экран №5
if (punkt_menu == 5){
lcd.setCursor(3, 0); lcd.print("Save point 1?");
//нижняя строка с координатами
// linia de jos cu coordonatele
lcd.setCursor(7, 1); lcd.print(telemetry[1], 6);
lcd.setCursor(0, 1); lcd.print(telemetry[0], 6); lcd.print(" ");
lcd.setCursor(0, 1); lcd.print(rssi);
lcd.setCursor(2, 1); lcd.print(" ");
//----------------------------
if (analogRead(1)>1000 && analogRead(0)>1000){
EEPROM_double_write (0, telemetry[0]); //запись в память. обращение к функции
// scrie în memorie. apel de funcție---adresa 0
EEPROM_double_write (10, telemetry[1]); //запись в памяь. обращение к функции
// scrie în memorie. apel de funcție---adresa 10
}
}
//Экран №6
if (punkt_menu == 6){
lcd.setCursor(3, 0); lcd.print("Read point 1?");
//нижняя строка с координатами
lcd.setCursor(7, 1); lcd.print(read_Longitude_EEPROM_p1, 6);
lcd.setCursor(0, 1); lcd.print(read_Latitude_EEPROM_p1, 6); lcd.print(" ");
lcd.setCursor(0, 1); lcd.print(rssi);
lcd.setCursor(2, 1); lcd.print(" ");
//----------------------------
if (analogRead(1)>1000 && analogRead(0)>1000){
read_Latitude_EEPROM_p1 = EEPROM_double_read(0); //чтение из памяти. обращение к функции
read_Longitude_EEPROM_p1 = EEPROM_double_read(10); //чтение из памяти. обращение к функции
read_Latitude_EEPROM = read_Latitude_EEPROM_p1;// для расчетов пути применяется именно это значение
read_Longitude_EEPROM = read_Longitude_EEPROM_p1;// для расчетов пути применяется именно это значение
}
}
//Экран №7
if (punkt_menu == 7){
// lcd.setCursor(2, 1); lcd.print(" ");
lcd.setCursor(3, 0); lcd.print("Save point 2?");
// lcd.setCursor(3, 1); lcd.print(telemetry[0]/1000); lcd.print(" "); lcd.print(telemetry[1]/1000);
//нижняя строка с координатами
lcd.setCursor(7, 1); lcd.print(telemetry[1], 6);
lcd.setCursor(0, 1); lcd.print(telemetry[0], 6); lcd.print(" ");
lcd.setCursor(0, 1); lcd.print(rssi);
lcd.setCursor(2, 1); lcd.print(" ");
//----------------------------
if (analogRead(1)>1000 && analogRead(0)>1000){
EEPROM_double_write (20, telemetry[0]); //запись в память. обращение к функции
EEPROM_double_write (30, telemetry[1]); //запись в памяь. обращение к функции
}
}
//Экран №8
if (punkt_menu == 8){
// lcd.setCursor(2, 1); lcd.print(" ");
lcd.setCursor(3, 0); lcd.print("Read point 2?");
// lcd.setCursor(3, 1); lcd.print(read_Latitude_EEPROM_p2/1000); lcd.print(" "); lcd.print(read_Longitude_EEPROM_p2/1000);
//нижняя строка с координатами
lcd.setCursor(7, 1); lcd.print(read_Longitude_EEPROM_p2, 6);
lcd.setCursor(0, 1); lcd.print(read_Latitude_EEPROM_p2, 6); lcd.print(" ");
lcd.setCursor(0, 1); lcd.print(rssi);
lcd.setCursor(2, 1); lcd.print(" ");
//----------------------------
if (analogRead(1)>1000 && analogRead(0)>1000){
read_Latitude_EEPROM_p2 = EEPROM_double_read(20); //чтение из памяти. обращение к функции
read_Longitude_EEPROM_p2 = EEPROM_double_read(30); //чтение из памяти. обращение к функции
read_Latitude_EEPROM = read_Latitude_EEPROM_p2;// для расчетов пути применяется именно это значение
read_Longitude_EEPROM = read_Longitude_EEPROM_p2;// для расчетов пути применяется именно это значение
}
}
//Далее для увеличения количества сохраняемых точек с 2-х до 4-х добавляю еще 4 экрана меню, аналогичные для первых двух точек, но изменяю параметры памяти и названия переменных
//Экран №9
if (punkt_menu == 9){
lcd.setCursor(3, 0); lcd.print("Save point 3?");
//нижняя строка с координатами
lcd.setCursor(7, 1); lcd.print(telemetry[1], 6);
lcd.setCursor(0, 1); lcd.print(telemetry[0], 6); lcd.print(" ");
lcd.setCursor(0, 1); lcd.print(rssi);
lcd.setCursor(2, 1); lcd.print(" ");
//----------------------------
if (analogRead(1)>1000 && analogRead(0)>1000){
EEPROM_double_write (40, telemetry[0]); //запись в память. обращение к функции
EEPROM_double_write (50, telemetry[1]); //запись в памяь. обращение к функции
}
}
//Экран №10
if (punkt_menu == 10){
lcd.setCursor(3, 0); lcd.print("Read point 3?");
//нижняя строка с координатами
lcd.setCursor(7, 1); lcd.print(read_Longitude_EEPROM_p3, 6);
lcd.setCursor(0, 1); lcd.print(read_Latitude_EEPROM_p3, 6); lcd.print(" ");
lcd.setCursor(0, 1); lcd.print(rssi);
lcd.setCursor(2, 1); lcd.print(" ");
//----------------------------
if (analogRead(1)>1000 && analogRead(0)>1000){
read_Latitude_EEPROM_p3 = EEPROM_double_read(40); //чтение из памяти. обращение к функции
read_Longitude_EEPROM_p3 = EEPROM_double_read(50); //чтение из памяти. обращение к функции
read_Latitude_EEPROM = read_Latitude_EEPROM_p3;// для расчетов пути применяется именно это значение
read_Longitude_EEPROM = read_Longitude_EEPROM_p3;// для расчетов пути применяется именно это значение
}
}
//Экран №11
if (punkt_menu == 11){
// lcd.setCursor(2, 1); lcd.print(" ");
lcd.setCursor(3, 0); lcd.print("Save point 4?");
// lcd.setCursor(3, 1); lcd.print(telemetry[0]/1000); lcd.print(" "); lcd.print(telemetry[1]/1000);
//нижняя строка с координатами
lcd.setCursor(7, 1); lcd.print(telemetry[1], 6);
lcd.setCursor(0, 1); lcd.print(telemetry[0], 6); lcd.print(" ");
lcd.setCursor(0, 1); lcd.print(rssi);
lcd.setCursor(2, 1); lcd.print(" ");
//----------------------------
if (analogRead(1)>1000 && analogRead(0)>1000){
EEPROM_double_write (60, telemetry[0]); //запись в память. обращение к функции
EEPROM_double_write (70, telemetry[1]); //запись в памяь. обращение к функции
}
}
//Экран №12
if (punkt_menu == 12){
// lcd.setCursor(2, 1); lcd.print(" ");
lcd.setCursor(3, 0); lcd.print("Read point 4?");
// lcd.setCursor(3, 1); lcd.print(read_Latitude_EEPROM_p2/1000); lcd.print(" "); lcd.print(read_Longitude_EEPROM_p2/1000);
//нижняя строка с координатами
lcd.setCursor(7, 1); lcd.print(read_Longitude_EEPROM_p4, 6);
lcd.setCursor(0, 1); lcd.print(read_Latitude_EEPROM_p4, 6); lcd.print(" ");
lcd.setCursor(0, 1); lcd.print(rssi);
lcd.setCursor(2, 1); lcd.print(" ");
//----------------------------
if (analogRead(1)>1000 && analogRead(0)>1000){
read_Latitude_EEPROM_p4 = EEPROM_double_read(60); //чтение из памяти. обращение к функции
read_Longitude_EEPROM_p4 = EEPROM_double_read(70); //чтение из памяти. обращение к функции
read_Latitude_EEPROM = read_Latitude_EEPROM_p4;// для расчетов пути применяется именно это значение
read_Longitude_EEPROM = read_Longitude_EEPROM_p4;// для расчетов пути применяется именно это значение
}
}
delay (100);
//****************************
// Serial.print(in_ch1); Serial.print(" "); Serial.print(in_ch2); Serial.print(" l_"); Serial.print(in_ch2_l); Serial.print(" r_"); Serial.print(in_ch2_r);
// Serial.print(" M_l_"); Serial.print(motor_l); Serial.print(" M_r_"); Serial.print(motor_r);
// Serial.print(" "); Serial.print(analogRead(pin_potent1)); Serial.print(" "); Serial.println(analogRead(pin_potent2));
// Serial.print(" "); Serial.print(telemetry[0]); Serial.print(" "); Serial.print(telemetry[1]); Serial.print(" "); Serial.println(rssi);
} //КОНЕЦ LOOP ***********************
// Функция записи в EEPROM
// Scrieți funcția în EEPROM
void EEPROM_double_write(int addr, double num) {
byte raw[4];
(double&)raw = num;
for(byte i = 0; i < 4; i++) EEPROM.write(addr+i, raw[i]);
}
//*************************
// Функция чтения из EEPROM
// Citiți funcția din EEPROM
double EEPROM_double_read(int addr) {
byte raw[4];
for(byte i = 0; i < 4; i++) raw[i] = EEPROM.read(addr+i);
double &num = (double&)raw;
return num;
}
//**************************