``` var test = [[1100, 4], [1200, 4], [1100, 4], [1000, 2]]; var time =0.025; var ave=1; // Test repeat var repeat = 1; // set to 1 to run the sequence only once // ESC initialization var minVal = 1000; // ESC initialization value (us) var initDur = 4; // ESC initialization time (s) var filePrefix = "CustomSequence"; ///////////////// Beginning of the script ////////////////// // ESC initialization rcb.console.print("Initializing ESC..."); rcb.output.set("esc",minVal); rcb.wait(sequence, initDur); // hide console debug info rcb.console.setVerbose(false); // start new log file rcb.files.newLogFile({prefix: filePrefix}); // runs the sequence var index = -1; var total = repeat; var totalTime = 0; var steptimesum=0; //var utcTime = new Date().getTime(); function sequence(){ if(index > -1){ if(index === test.length){ // end of sequence index = -1; sequence(); }else{ var elapsed=0; var stepduration = test[index][1]; // get step info var pwm = test[index][0]; index ++; rcb.console.print("set esc time" +totalTime + " , " + pwm + " for " + stepduration + "s..."); // set the output rcb.output.set("esc",pwm); var recordStep=function (){ if(elapsed >= stepduration){ steptimesum+=stepduration; totalTime=steptimesum; sequence(); }else{ var remaining = stepduration - elapsed; //var waitTime = Math.min(time, remaining); var startTimestamp = new Date().getTime(); // take a sample rcb.sensors.read(function(data){ data.time.displayValue = totalTime; rcb.files.newLogEntry(data); //rcb.console.print("sample saved"); }, ave); var endTimestamp = new Date().getTime(); var functiontime=endTimestamp-startTimestamp; elapsed += time; totalTime +=time; rcb.console.print("sample time" +totalTime+" function time"+functiontime); if(time < (functiontime/1000)*1.1){ rcb.output.ramp("esc", pwm, minVal, 5 ); rcb.console.print("sample time < function time, sample time has to bigger than " +functiontime/1000+ " ms" ); rcb.wait(5); rcb.output.set("esc",minVal); rcb.endScript(); } rcb.wait(recordStep,Math.max(0,time-functiontime/1000)); } }; recordStep(); } }else{ if(repeat > 0){ rcb.console.print("Sequence " + (total-repeat+1) + " of " + total); repeat--; index++; sequence(); }else{ rcb.console.print("end time" +totalTime); rcb.endScript(); } } } ```