LinInterpol_F32

You are here:
Estimated reading time: 1 min
Go back to the VM operations list

Prototype

LinInterpol_F32 (rStart, rEnd, val)

Description

Linear interpolation. The array of points (8 bytes for each point, two floats, x and y) is determined by the positions rStart and rEnd (inclusive).

The x coords must be monotonically increasing and x1. . . xn must never be the same values.

r is the buffer position used for the interpolation location value and for the result.

Return
Nothing

Code Example

The following code example uses the LinInterpol_F32 function.

The SMK900.evi file used for this example can be downloaded at the bottom of this page.
/* Example Code
* LinInterpol_F32
*
* get buffer indexes r1, r2 and idx
* set buffer in memory
* interpol value at idx
* return 0x00 (lookup pas ok) or 0x01 (lookup ok)
*
* pas de mode avec commande parametrable car ça ne fit pas dans la limite des 20 bytes
*/

#include "SMK900.evi"

#define SENSORCODE 0x01

function exec_aircmd(){
	local rxLen;
	local useParams;
	local r1,r2,idx;
	local i;
	local result;

	rxLen=GetAirBuf(0, 0, 20);
	
	
	/*if(rxLen>=20){ // 1 byte for paketID + 19 bytes of payload (3 bytes for indexes and minimum 16 bytes for buffer)
		useParams=true;
		r1=GetBuffer_S8(1);
		r2=GetBuffer_S8(2);
		idx=GetBuffer_S8(3);
		for(i=4;i<rxLen;i++){
			SetBuffer(i-4,GetBuffer_S8(i),1);
		}
	}else{*/
		useParams=false;
		r1=4;
		r2=12;
		idx=0;
		
		SetBuffer_16(0,0x0000); // 2
		SetBuffer_16(2,0x4000);
		SetBuffer_16(4,0x0000); // 1
		SetBuffer_16(6,0x3F80);
		SetBuffer_16(8,0x0000); // -1
		SetBuffer_16(10,0xBF80);
		SetBuffer_16(12,0x0000); // 5
		SetBuffer_16(14,0x40A0);
		SetBuffer_16(16,0x0000); // -5
		SetBuffer_16(18,0xC0A0);
	/*}*/
	
	LinInterpol_F32(idx,r1,r2);

	/*if(useParams){
		SetBuffer_16(0,GetBuffer_16(idx));
		SetBuffer_16(2,GetBuffer_16(idx+2));
		Send(4);
	}else{*/
		if(GetBuffer_16(2)==0xC000&&GetBuffer_16(0)==0x0000){
			result = 1;
		}else{
			result = 0;
		}
		SetBuffer(0,result,1);
		Send(1);
	/*}*/
}

function main() 
{
	local execType;
	
	execType = GetExecType();
	if(execType==MESHEXECTYPE_AIRCMD_bm){
		exec_aircmd();
	}
}

Go back to the VM operations list

Attachments

Was this article helpful?
Dislike 0
Views: 63
Go to Top