Belegung:
- Anoden beider IR-LEDs auf PIN21 (PD7)
- Kathode rechte IR-LED auf PIN2 (PB1)
- Kathode linke IR_LED auf PIN3(PB2)
- OUT vom SFH5110 auf PIN1 (PB0)
Spannungen:
- VCC von SFH5110 - 4,2V
- OUT von SFH5110 - 0V
- beide IR-LEDs - 2,2V
Testcode:
Wenn du bei diesem Programm eine der beiden IR-LEDs abdeckst, sollte die STATUS-LED grün oder rot leuchten.Code:#include "asuro.h" #include <stdlib.h> uint8_t objekt_sichtbar_rechts(uint8_t distance) { uint16_t j,z; PORTB |= (1 << PB1); // PB1 auf HIGH (LED ausschalten) DDRB |= (1 << DDB2); // PB2 als Ausgang PORTB &= ~(1 << PB2); // PB2 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 << PB0))z++; Sleep(6); // 6*Sleep(6)=1ms } if (z>=29) return FALSE; // Objekt nicht gefunden else return TRUE; } uint8_t objekt_sichtbar_links(uint8_t distance) { uint16_t j,z; PORTB |= (1 << PB2); // PB2 auf HIGH (LED ausschalten) DDRB |= (1 << DDB1); // PB1 als Ausgang PORTB &= ~(1 << PB1); // PB1 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 << PB0))z++; Sleep(6); // 6*Sleep(6)=1ms } if (z>=29) return FALSE; // Objekt nicht gefunden else return TRUE; } uint8_t abstand_rechts() { uint8_t k,n; k=255; for(n=0;n<8;n++) { if (!objekt_sichtbar_rechts(n)) k=n; // solange kein Objekt, Distanz erhoehen } return k; } uint8_t abstand_links() { uint8_t l,m; l=255; for(m=0;m<8;m++) { if (!objekt_sichtbar_links(m)) l=m; // solange kein Objekt, Distanz erhoehen } return l; } /************************************************************************* Hauptprogramm *************************************************************************/ int main(void) { uint8_t n,m; Init(); FrontLED(ON); while(1) { n=abstand_rechts(); m=abstand_links(); StatusLED(OFF); BackLED(OFF,OFF); if ((n!=255) || (m!=255)) { if (n<2) StatusLED(GREEN); if (m<2) StatusLED(RED); Msleep(10); } else StatusLED(YELLOW); } }







Zitieren

Lesezeichen