Hallo,

wo ist der Denkfehler?

Mit diesem Programm wollte ich 3 verschiedene Abstände in Abhängigkeit von den distance-werten ermitteln. Aber irgendwie beeinflussen sich meine 3 Messungen gegenseitig.
siehe Kommentare im Quellcode:
Code:
//------------------------------------------------------------------
//ir_abstand_test
//------------------------------------------------------------------

#include "asuro.h"

/*************************************************************************

	uint8_t objekt_sichtbar(uint8_t abstand)

	return: TRUE falls Objekt gefunden
			FALSE wenn nicht

	Zeitbedarf: 5ms

	author: robo.fr, christoph ( ät ) roboterclub-freiburg.de
	date: 2008

*************************************************************************/
uint8_t objekt_sichtbar(uint8_t distance)
{
	uint16_t j,z;
	
   	DDRD |= (1 << DDD1);   // Port D1 als Ausgang
   	PORTD &= ~(1 << PD1);   // PD1 auf LOW

	OCR2  = 254-distance;   // wenn OCR2=0xFE dann Objekt sehr nahe 
	z=0;
	for(j=0;j<30;j++) // loop time: 5ms
	{
		if (PIND & (1 << PD0))z++;
		Sleep(6); // 6*Sleep(6)=1ms
	}
	if (z>=29) return FALSE; // Objekt nicht gefunden
	else return TRUE;
}


//------------------------------------------------------------------
//hauptprogramm

int main(void)
{
/*
                         // abstandsmessung weisses papier :
#define test_weit 10     // 70 cm
#define test_mittel 5    // 45 cm
#define test_nah 0       // 25 cm
*/

/*                       
#define test_weit 20     // 140 cm
#define test_mittel 5    // 70 cm
#define test_nah 0       // 30 cm
*/

                      
#define test_weit 0      // 8 cm
#define test_mittel 0    // 8 cm
#define test_nah 0       // 8 cm


Init();
StatusLED(OFF);
	
while(1)
{	
	if (objekt_sichtbar(test_weit) == 1)
	{
	StatusLED(GREEN);
	FrontLED(OFF);
	Msleep (200);
	}

	if (objekt_sichtbar(test_mittel) == 1)
	{
	StatusLED(YELLOW);
	FrontLED(OFF);
	Msleep (200);
	}

	if (objekt_sichtbar(test_nah) == 1)
	{
	StatusLED(RED);
	FrontLED(OFF);
	Msleep (200);
	}

	StatusLED(OFF);
	FrontLED(ON);
}	
	while (1);
  	return 0;
}
Kann mir jemand von euch weiterhelfen?

Gruss
M.