/* ----------------------------------------------------------------- */
/* Eyebot PSD-demo by Klaus Schmitt  (k_schmit@informatik.uni-kl.de) */
/*                                            last changes: 09/05/97 */
/* ----------------------------------------------------------------- */
/* This program displays graphically the raw-data of the FRONT-PSD   */
/* Furthermore it prints the distance (converted with table in HDT)  */
/* and the appropriate raw-value in the bottom-line.                 */
/* ----------------------------------------------------------------- */


#include "eyebot.h"

int main ()
{
	PSDHandle psd_handle;
	int disttab[128];
	int pointer=0;
	int i,j;

	/* setup display */
	LCDMode(SCROLLING|NOCURSOR);

	/* Init the FRONT-PSD */
	psd_handle = PSDInit(PSD_FRONT);
	if(psd_handle == 0)
	{
		LCDPrintf("\nPSDInit Error!\n");
		OSWait(200);
		return 1;
	}

	/* clear the graphic-array */
	for(i=0; i<128; i++)
	{
		disttab[i]=0;
	}

	/* Start PSD-measuring in continous-mode */
	if(PSDStart(psd_handle, TRUE))
	{
		LCDPrintf("\nPSD busy!\n");
		return 1;
	}

   	LCDSetPos(0,3);
	LCDPrintf("PSD-Demo");

	LCDMenu("","","","END");
	
	while (KEYRead() != KEY4)
	{
		/* get actual raw-data and scale it for the LCD */
		disttab[pointer] = 64 - (PSDGetRaw(psd_handle)/4);
		if(disttab[pointer] < 0)
			disttab[pointer] = 0;


		/* draw graphics */
		for(i=0; i<128; i++)
		{
			j = (i+pointer)%128;
		    LCDSetPixel(disttab[j],i, 1);
		}

		/* print actual distance and raw-data */
		LCDSetPos(7,0);
		LCDPrintf("D:%3d R:%3d",PSDGet(psd_handle), PSDGetRaw(psd_handle));

		/* clear LCD */
		for(i=0; i<128; i++)
		{
			j = (i+pointer)%128;
		    LCDSetPixel(disttab[j],i, 0);
		}

		/* scroll the graphics */
		pointer = (pointer+1)%128;

	}
	/* stop the continous measuring */
	PSDStop();

	/* release the used PSDs */
	PSDRelease();

	return 0;
}


