hey ich versuche momentan mithilfe eines ATmega644Pa und einem HC-SR04 eine LED zum leuchten zu bringen wenn eine gewisse Distanz unterschritten wird, bei durchgehender messung probiert hab ich es mit diesem Code im ergebnis findet er immer sofort ein Hindernis unabhängig davon ob nun irgendwo etwas zu finden ist oder auch nicht für hilfe wäre ich wirklich dankbar grüße biscuit #define F_CPU 16000000 #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #define ERROR -1 #define NO_OBSTACLE -2 void HCSR04Init() { } void HCSR04Trigger() { PORTC |= (1 << PC0); //high _delay_us(15); //wait 15uS PORTC &= ~(1<<PC0); //low } int GetPulseWidth() { int i, result; //Wait for rising edge for(i = 0; i < 60; i++) { if(!(PINC & (1 << PC1))) { continue; //Line is still low, so wait } else { break; //High edge detected, so break. } } if(i == 60) { return ERROR; //Indicates time out } //High Edge Found //Setup Timer1 TCCR1A = 0x00; TCCR1B = (1 << CS11); //Prescaler = Fcpu/8 TCNT1 = 0x00; //Init counter //Now wait for the falling edge for(i=0;i<60;i++) { if(PINC & (1<<PC1)) { if(TCNT1 > 60000) { break; } else { continue; } } else { break; } } if(i==60) { return NO_OBSTACLE; //Indicates time out } //Falling edge found
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.