Вы на правильном пути, но некоторые детали неверны. Если я правильно понимаю, вы хотите поспать 5 минут, а затем передать сигнал 5 раз с задержкой в 5 секунд между передачами.
Если это так, я бы сделал что-то подобное на оболочке:
// part 1: wait until its time to transmit
t = 5.minutes.later // calculate time of transmission
addsleep t // schedule sleep from now until time t
while (t-time/1000 > 1) delay(1000) // wait until its time to transmit
// part 2: make your transmissions
plvl -30 // set power level
signal = load('sig.txt') // load your signal
5.times { // transmit it 5 times with 5 second delay
phy << new TxBasebandSignalReq(signal:signal, fc:0)
delay(5000)
}
Первая часть кода вычисляет время t
(в секундах эпохи), в которое должна быть сделана передача, и просит модем запланировать режим ожидания до тех пор. Перевод модема в спящий режим занимает несколько секунд, поэтому сценарий продолжит работать в течение этого времени. Следовательно, нам нужно, чтобы следующий оператор ожидал, пока пришло время для передачи, проверяя текущее время (time
дает текущее время в миллисекундах эпохи) против времени передачи каждую секунду.
Вторая часть кодатакой же, как у вас, но учтите, что после plvl
не должно быть =
.
PS Некоторые модемы (например, unet audio
на ноутбуке) могут не иметь спящего режима с низким энергопотреблением, поэтому на самом деле могут не спать,Цикл ожидания в части 1 также обеспечивает корректную работу этого кода на таких модемах.