An sich ist das relatif einfach : Der servo von Sharp IR fahrt verschieden positionen an. Dan wirt der ADC Wert eingelesen und gespeichert in eine Array. Am ende von Servoweg (pos 0 = 1 mS, pos 10 = 2 mS) wird der Array untersucht auf min. Werte. Das gibt dan 2 min. Variabelen : Eine ist der minimale Abstand das die Sharp IR hat gesehen, das andere ist die Servopos. die hiermit zusammen hangt. Mit diesen Werten wird dan der RP6 in die Richtung gesteuert wo das ein coladose sein soll . Hiebei die code von scanning :
Code:
int8_t Blik[14]={80,80,80,80,80,80,80,80,80,80,80,80,80,80,}; //meetwaarden Sharp IR onder
int8_t BlikMax=80;	//hoogst gemeten waarde Blik sensor
uint8_t imaxR=0;	//positie hoogste gemeten waarde Blik

int8_t Wand[14]={80,80,80,80,80,80,80,80,80,80,80,80,80,80,}; //meetwaarden Sharp IR boven
int8_t WandMax=80;	//hoogst gemeten waarde Wand sensor
uint8_t imaxL=0;	//positie hoogste gemeten waarde Wand

int16_t SharpVoor=0 ; //ADC2 ingang van M32
int16_t SharpAchter=0; //ADC3 ingang van M32

uint8_t up=1;
uint8_t i=0;
uint8_t state=0;	//toestand blik zoeken
uint8_t refresh=2;	//Data volledige scan beschikbaar : refresh==2
void ScanR(uint8_t min,uint8_t max,uint8_t time)
{ 
	if (getStopwatch3()>time)
		{
		getAllSensors(); //ADC ingangen via I2C van basis halen
		SharpVoor = readADC(ADC_3);//ADC3 ingang van M32 lezen
		SharpAchter = readADC(ADC_2);//ADC2 ingang van M32 lezen
		
		//if(((adc0-adc1)>25)&((adc0-adc1)<500)) Blik[i]=adc0;else Blik[i]=0; //Blik detectie
		if (adc0<100)adc0=100;
		if (adc1<100)adc1=100;
		Blik[i]=7500/adc0;
		Wand[i]=7500/adc1;	//Wand detectie
		
		statusLEDs.byte=0b000000;
		if (Blik[i]<70) statusLEDs.LED1=1;
		if (Blik[i]<50) statusLEDs.LED2=1;
		if (Blik[i]<40) statusLEDs.LED3=1;
		if (Wand[i]<70) statusLEDs.LED4=1;
		if (Wand[i]<50) statusLEDs.LED5=1;
		if (Wand[i]<40) statusLEDs.LED6=1;
		updateStatusLEDs();	
		clearLCD();
		writeStringLCD("Blik   Wand");
		setCursorPosLCD(1,0);
		writeIntegerLengthLCD(BlikMax,DEC,2);
		setCursorPosLCD(1,5);
		writeIntegerLengthLCD(imaxR,DEC,2);	
		setCursorPosLCD(1,9);
		writeIntegerLengthLCD(WandMax,DEC,2);
		setCursorPosLCD(1,14);
		writeIntegerLengthLCD(imaxR,DEC,2);	
		
		
		if (min==max) i=min;
		else
			{
		     if (up)i++ ; 
			 else i--;
			}
		servo(2,(10+i));//Servo 2 = stekker 4
		setStopwatch3(0);
		if(i<=min) up=1;
		if(i>=max)up=0; 
		Wand[max+1]=Wand[max];	 //waarde invoeren  uiterste stand +1 
		
		
		if((i==min)|(i==max))//Alleen update van Max waarden indien einde scanbereik
			{
			if (refresh<2) refresh++;
			BlikMax=100;
		
			imaxR=0;
			WandMax=100;
			imaxL=0;
			writeString_P("Blik RAW :");
			for(uint8_t j=min;j<=max;j++)
					{
					writeInteger(Blik[j],DEC);
					writeChar(',');
					}
			writeChar('\n');		
			for(uint8_t j=0;j<=12;j++)
					{
					if((j<min)|(j>max)){Blik[j]=100;Wand[j]=100;}
					if ((abs(Blik[j]-Wand[j+1])<18)) Blik[j]=90;
					if (Blik[j]<BlikMax) {BlikMax=Blik[j];imaxR=j;}
					if (Wand[j]<WandMax) {WandMax=Wand[j];imaxL=j;}
					}
			writeString_P("Blik DET :");		
			for(uint8_t j=min;j<=max;j++)
					{
					writeInteger(Blik[j],DEC);
					writeChar(',');
					}
			writeChar('\n');
			writeString_P("Wand RAW:");
			for(uint8_t j=min;j<=max;j++)
					{
					writeInteger(Wand[j],DEC);
					writeChar(',');
					}
			writeChar('\n');
			
			
			//writeInteger(BlikMax,DEC);
			//writeChar(',');
			//writeInteger(imaxR,DEC);
			//writeChar(',');	
			//writeInteger(state,DEC);
			//writeChar(',');
			//writeInteger(WandMax,DEC);
			//writeChar(',');
			//writeInteger(imaxL,DEC);
			
			}
		}
}