also ich habs jetzt mit meinen bescheidenen möglichkeiten versucht:
Code:
#include "RP6ControlLib.h"
#include "RP6Control_MultiIOLib.h"
uint16_t anfang, ende, dauer, distanz_schleife;
void trig_schleife(void)
{
PORTC |= (1<<PC6);//Trig high
_delay_us(12);
PORTC &= ~(1<<PC6);//TRIG auf low
}
void messung_SR_04_schleife (void)
{
startStopwatch2();
anfang=getStopwatch2();
DDRC |= (1 << PC6);//Trig als Ausgang
PORTC &= ~(1<<PC6);//TRIG auf low
DDRC &= ~(1<<PC5);//Echo als Eingang
PORTC &= ~(1<<PC5);//ECHO pullup AUS (Echo auf LOW)
// PORTC |= (1<<PC5);//Echo auf high
while(1)
{
if ( PINC & (1<<PC5) )
{
ende = getStopwatch2();
dauer = (ende - anfang);
distanz_schleife = (dauer*4)/58; //das stimmt noch nicht!
break;
}
}
}
int main(void)
{
initRP6Control();
multiio_init();
initLCD();
while(1)
{
//Messung starten
messung_SR_04_schleife ();
//Signal auslösen
trig_schleife();
_delay_ms(50);
//Werte ausgeben
writeString("anfang: ");
writeIntegerLength(anfang, DEC, 4);
writeString(" ende: ");
writeIntegerLength(ende, DEC, 4);
writeString(" dauer: ");
writeIntegerLength(dauer, DEC, 4);
writeString(" distanz: ");
writeIntegerLength(distanz_schleife, DEC, 4);
writeChar('\n');
mSleep(200);
}
return 0;
}
der code läuft einmal durch und gibt vier mal "0000" aus. Ich habe es bereits mit zeitmessung mit stopwatch zu ergründen versucht, danach bleibt der code in der " if ( PINC & (1<<PC5) )" abfrage hängen...
Habe ich einen logischen fehler eingebaut, stimmt die reihenfolge der programmteile nicht, oder ist schlicht die abfrage des ports falsch? Ich wüsste nicht wo ich noch nachlesen soll, oder was ich noch probieren kann...
Lesezeichen