Nochmals hallo,
ich habe nun versucht mic's Code in mein Programm einzubauen:
Wenn sich von links oder rechts ein Gegenstand nähert, soll die linke oder rechte rote LED leuchten.Code:#include <nibobee/iodefs.h> #include <nibobee/delay.h> #include <nibobee/led.h> #include <stdlib.h> #define FALSE (1==0) #define TRUE (1==1) uint8_t objekt_sichtbar_rechts(uint8_t distance_r) { uint16_t j,z; PORTA |= (1 << PA0); // PA0 auf HIGH (LED einschalten) DDRA |= (1 << DDA1); // PA1 als Ausgang PORTA &= ~(1 << PA1); // PA1 auf LOW (andere LED ausschalten) OCR2 = 254-distance_r; // wenn OCR2=0xFE dann Objekt sehr nahe z=0; for(j=0;j<30;j++) // loop time: 5ms { if (PINA & (1 << PA3))z++; delay(1); } if (z>=29) return FALSE; // Objekt nicht gefunden else return TRUE; } uint8_t objekt_sichtbar_links(uint8_t distance_l) { uint16_t i,y; PORTA |= (1 << PA1); // PA1 auf HIGH (LED einschalten) DDRA |= (1 << DDA0); // PA0 als Ausgang PORTA &= ~(1 << PA0); // PA0 auf LOW (andere LED ausschalten) OCR2 = 254-distance_l; // wenn OCR2=0xFE dann Objekt sehr nahe y=0; for(i=0;i<30;i++) // loop time: 5ms { if (PINA & (1 << PA3))y++; delay(1); } if (y>=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) { led_init(); uint8_t n,m; delay(2000); // wait4programmer if(TRUE) led_set(0,1); // true-Test ;) sei(); // und los while(1) { // Timer2-Setup für 72kHz TCCR2 = (1 << WGM21) | (1 << CS20); // CTC-Mode, no prescaling, no OC2-PIN! OCR2 = 208; // 36kHz @15MHz DDRA |= (1<<PA1) | (1<<PA0); // Anoden der LEDs mit Vorwiderstand (??? Ohm) an PA0/1 PORTA &= ~((1<<PA1) | (1<<PA0)); // low = LEDs aus DDRA &= ~(1<<PA3); // keine 72kHz-Ansteuerung PORTA &= ~(1<<PA3); // deshalb Kathoden-Pin auf Ausgang ohne PullUp n=abstand_rechts(); m=abstand_links(); if ((n!=255) && (m!=255)) { if (n<2) led_set(LED_R_RD, 1); if (m<2) led_set(LED_L_RD, 1); delay(10); } } } ISR (TIMER2_COMP_vect) { static uint8_t status=0; if(status) { led_set(LED_R_YE, 1); // Kontroll-LED PORTA |= (1<<PA3); status=0; } else { led_set(LED_R_YE, 0); PORTA &= ~(1<<PA3); status=1; } }
Leider funktioniert der Code wieder nicht, was ist nun jetzt wieder falsch?







Zitieren
Lesezeichen