Übrigens, in einem eigenständigen Programm funktioniert meine Variante mit gpioTrigger auch.
C
#include <stdio.h>
#include <pigpio.h>
#define ECHO 18//Ultrasonic data
#define TRIGGER 23//Ultrasonic trigger
#define VAL_ECHO gpioRead(ECHO)//read Ultrasonic data
void ping()
{
double distanceUS=0,startUS,stopUS,timediffUS;
gpioTrigger(TRIGGER,10,1); //send pulse
startUS=gpioTick();
while (!VAL_ECHO)
{
startUS=gpioTick(); //wait until Echo rising edge
//printf("\nhier bleibe ich haengen :/\n");
gpioDelay(5);
}
while (VAL_ECHO)
{
stopUS=gpioTick(); //wait until Echo falling edge
gpioDelay(5);
}
timediffUS=stopUS-startUS; //calculate time difference
distanceUS=(timediffUS*343)/20000; //calculate distance
printf("\ndistance from obstacle= %.2lf cm\n",distanceUS);
}
//
// main loop
//
int main ()
{
if( gpioInitialise() > 0 )
{
//gpioSetMode(23, PI_INPUT); /* set gpio23 as input */
//gpioSetMode(24, PI_OUTPUT); /* set gpio18 as output */
//gpioSetPullUpDown(23, PI_PUD_OFF); /* clear pull-ups/downs on gpio23 */
//gpioSetPullUpDown(24, PI_PUD_OFF); /* clear pull-ups/downs on gpio24 */
for( ;; )
{
ping();
gpioSleep(PI_TIME_RELATIVE, 1, 0);
}
gpioTerminate(); /* cleanup library */
}
}
Alles anzeigen