hi Dirk,
die blockierende variante funktioniert nun (auch für zwei HC-SR04), an der nicht blockierenden variante arbeite ich noch...(ist die eigentlich vorteilhaft, oder halt nur eine variante?)
Code:
#include "RP6ControlLib.h"
#include "RP6Control_MultiIOLib.h"
double dauer_1, dauer_2, distanz_schleife_1, distanz_schleife_2;
void trig_schleife(void)
{
PORTC |= (1<<PC6);//Trig high
_delay_us(12);
PORTC &= ~(1<<PC6);//TRIG auf low
}
int main(void)
{
initRP6Control();
multiio_init();
initLCD();
DDRC |= (1 << PC6);//Trig als Ausgang
PORTC &= ~(1<<PC6);//TRIG auf low
DDRC &= ~(1<<PC5);//Echo_1 als Eingang
PORTC &= ~(1<<PC5);//ECHO_1 pullup AUS (Echo auf LOW)
DDRC &= ~(1<<PC3);//Echo_2 als Eingang
PORTC &= ~(1<<PC3);//ECHO_2 pullup AUS (Echo auf LOW)
dauer_1 = 0;
distanz_schleife_1 = 0;
dauer_2 = 0;
distanz_schleife_2 = 0;
startStopwatch2();
startStopwatch3();
while(1)
{
trig_schleife();
loop_until_bit_is_set(PINC, PC5);
setStopwatch2(0);
loop_until_bit_is_clear(PINC, PC5);
dauer_1 = getStopwatch2();
distanz_schleife_1 = (dauer_1*34.3)/2;
//Werte ausgeben
writeString(" dauer_1: ");
writeDouble(dauer_1, DEC, 2, 2);
writeString(" ms");
writeString(" distanz_1: ");
writeDouble(distanz_schleife_1, DEC, 3, 2);
writeString(" cm");
writeChar('\n');
mSleep(500);
trig_schleife();
loop_until_bit_is_set(PINC, PC3);
setStopwatch3(0);
loop_until_bit_is_clear(PINC, PC3);
dauer_2 = getStopwatch3();
distanz_schleife_2 = (dauer_2*34.3)/2;
//Werte ausgeben
writeString(" dauer_2: ");
writeDouble(dauer_2, DEC, 2, 2);
writeString(" ms");
writeString(" distanz_2: ");
writeDouble(distanz_schleife_2, DEC, 3, 2);
writeString(" cm");
writeChar('\n');
mSleep(500);
}
return 0;
}
Lesezeichen