// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// offset_t - offset time - смещённое время начала передачи пакета, от нулевой секунды. Для каждого AAA1, 2, 3 ... оно своё. Т.е. у каждого пакета свой таймслот.
// Эту переменную(offset_t) передаём/получаем, в библиотеке transmit([параметр]) в заданном параметре, из скетча пользователя.
// int flag_start;
// if (offset_t)my_timer = millis();
// minute = minute % 5;
// int prev_t = minute;
// int minute_ = minute % 5 ;
// uint32_t my_timer; // не стал использовать millis() на прямую, т.к. для неё потребовалось некоторое смещение(увеличение на 0.006 сек - что увеличивало интервал передачи между пакетами),
// if(second == 1){my_timer = millis();} // для того чтобы последующие инструкции успели "взять" это время.
// my_timer = millis();
// int delta_t; // delta_t дельта-тайм разница времени в мсек, между нулевой секундой и временем начала передачи пакета.
// int pointer = offset_t % 1000; // pointer нужен для нецелых чисел. т.к tinyGPS не отдаёт миллисекунды, промежуток между целыми числами считаю отдельно
//#################################
//byte f_time = second + 10;
//#################################
// if ((second ) >= offset_t){
// // if (((second * 1000) + pointer ) == offset_t){ // время получаю в секундах(использую как коэфициент), по этому, для приведения в нужную разрядность в миллисекундах, умножаю на 1000
// flag_start = 1; // и если секунды реального времени поровнялись со временем начального смещения, то устанавливаем флаг(1) разрешающий передачу
// second = second % 5; // %10 - эта процедура превращает секунды 00 - 59, полученные от tinyGPS в десятичном виде, в секунды от 0 до 9 (%5 => 0 ... 4),
// путем деления с остатком который и заносится в переменную. Важное замечание! переменную second необходимо представить типом byte!
// Это самый короткий путь чтобы отбросить старший разряд, тоесть отбросить десятки секунд и оставить только цикл от 0 до 9
falt=gps.f_altitude();// +/- altitude in meters
green_led();
green_led(modes[1]);// Включаем индикацию приёма GPS. LED постоянно горит - GPS приём есть.
//передача осуществляется по таймеру, который определяется типом датчика и номером канала
transmitter4.setType(AIRx);
transmitter4.setChannel(1);// tiimeslot. формируется номер транспондера(Сейчас этот параметр формирует номер канала - timeslot. 27.07.20 - флаг, пока, не принимает участия в формировании номера тайм-слота)
...
...
@@ -161,46 +106,32 @@ sync_with_time();
transmitter4.setLongitude(lon);
transmitter4.setAltitude(falt);
// if (transmitter.transmit()) PrintSentData(transmitter.SendBuffer);
// if (transmitter2.transmit())PrintSentData(transmitter2.SendBuffer);
// if (transmitter3.transmit()) PrintSentData(transmitter3.SendBuffer);
if(transmitter4.transmit(second_,offset_t))PrintSentData(transmitter4.SendBuffer);//параметры (second, offset_t) - текущее время(только секунды), и время смещения(таймслот)
if(tx_flag==true&&transmitter4.transmit(second_))PrintSentData(transmitter4.SendBuffer);//параметры (second, offset_t) - текущее время(только секунды), и время смещения(таймслот)
// second = second % 5; - эта процедура превращает секунды 00 - 59, полученные от tinyGPS в десятичном виде, в 5-ти секундные циклы 0,1,2,3,4,0,1,2,3,4,0, и.т.д.
// путем деления с остатком который и заносится в переменную. Важное замечание! переменную second необходимо представить типом byte!
// Это самый короткий путь чтобы отбросить старший разряд, тоесть отбросить десятки секунд и оставить только цикл от 0 до 4
_second_=second%5;// Секунды полученные от GPS 0 ... 59, переводим в 0,1,2,3,4,0,1,2,3,4,0.... и т.д..
if(newdata){// Если с GPS есть новая отметка времени, то:
tx_flag=true;
timer1=millis();// в этот момент(на переходе 0-ой отметки между секундами) СБРАСЫВАЕМ/устанавливаем timer1 = значению millis()
}else{// Впротивном случае выполняем:
// tx_flag = false;
timer2=millis()-timer1;// отсчёт millis() сразу после перехода через 0 (0,1,2,3,4,5,6,7,8,9,10,11, .... 999)
second_=_second_*1000+timer2;// Сращиваем секунды в диаппазоне - 0,1,2,3,4,0 и миллисекунды в диаппазоне от 0 до 999(если произошёл сброс timer1), или до бесконечности если сброса не было!
if(second_>=5000){// Если произошла рассинхронизация таймера, значит нет данных от GPS. Тогда:
// tx_flag = false;
second_=0;// Сбрасываем таймер в 0. Тем самым запрещаем циклическую передачу повторяющихся данных
green_led(modes[6]);// Частое мигание зелёным LED. 4 раза в секунду - "нет приёма GPS"
}
// if (second_ >= 32000){ // Если произошла рассинхронизация таймера, значит нет данных от GPS. Тогда:
// second_ = 10000; // Сбрасываем таймер в 0. Тем самым запрещаем циклическую передачу повторяющихся данных
// tx_flag = false;
// green_led(modes[0]); // Отсутствие индикации зелёного LED."нет приёма GPS более чем полминуты"