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.
Lesezeichen