Ok, die letzte Erkenntnis:
1. ) Die IR-Dioden (Front und seitlich) arbeiten. Mit UartPutc wird was gesendet.
2.) Die Zeichen auf der Gegenseite lassen sich nicht rekonstruieren (empfange mit dem IR-Programmer) - scheint wohl Takt irgendwo noch nicht zu stimmen
3.) Die Abstandsmessung sendet keine IR-Signale
Meine Modifizierung (wegen ATMega16
Code:
uint8_t objekt_sichtbar(uint8_t distance)
{
uint16_t j,z;
DDRD |= (1 << DDD1); // Port D1 als Ausgang
PORTD &= ~(1 << PD1); // PD1 auf LOW
#if defined(__AVR_ATmega168__)
OCR2A = 254-distance; //OCR2=0xFE ( sehr nahe )
#else
OCR2 = 254-distance; //OCR2=0xFE ( sehr nahe )
#endif
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;
}
// der Rest ist unveraendert, denke ich
uint8_t abstand()
{
uint8_t k,n;
k=255;
for(n=0;n<8;n++)
{
if (!objekt_sichtbar(n)) k=n; // solange kein Objekt, Distanz erhoehen
}
return k;
}
int main(void){
uint8_t n;
Init();
FrontLED(ON);
StatusLED(OFF);
n = 0;
while(1)
{
n=abstand();
if(n!=255)
{
if (n<6) StatusLED(GREEN);
if (n<4) StatusLED(YELLOW);
if (n<3) StatusLED(RED);
if (n<2) BackLED(ON,ON);
}
Msleep(10);
}
}
Ich muss ehrlich sein: ich hab noch nicht geschaut, welcher Befehl einen "Beep" über IR-Diode sendet und welcher empfängt. Bin jetzt auch zu müde ...
Lesezeichen