Hallo zusammen,
bin gerade neu in diesem Forum und habe schon direkt eine Frage.
Schon einmal danke für die vielen Tipps und Tricks, die dieses Forum bietet. Dennoch habe ich noch eine offene Frage.
Und zwar habe ich einen Ultraschallsensor (HC SR04) an meinen Raspberry Pi B angeschlossen und kann ihn problemlos mit Python auslesen.
Dafür nutze ich folgendes Script:
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
TRIG = 22
ECHO = 18
GPIO.setup(TRIG, GPIO.OUT)
GPIO.output(TRIG, 0)
GPIO.setup(ECHO, GPIO.IN)
time.sleep(0.1)
GPIO.output(TRIG, 1)
time.sleep(0.00001)
GPIO.output(TRIG, 0)
while GPIO.input(ECHO) == 0:
pass
start = time.time()
while GPIO.input(ECHO) == 1:
pass
stop = time.time()
TimeElapsed = stop - start
Distance = (TimeElapsed * 34300) / 2
print round(Distance)
GPIO.cleanup()
Alles anzeigen
Wenn ich jedoch nun versuche, die Distanz mit Java auszulesen, dann springt das Programm nicht in die erste while-Schleife, bei der ich prüfe, ob gpioecho low ist und auch nicht in die, in der ich prüfe, ob gpioecho auf high steht.
Scheinbar wird der Trigger nicht richtig ausgeführt, jedoch finde ich nicht die Ursache. Hier einmal der Code (Java mit pi4j und wiringpi ist installiert):
package roboter;
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalInput;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Distance {
public int getDistance() {
try {
final GpioController gpio = GpioFactory.getInstance();
final GpioPinDigitalOutput gpiotrigger = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_06, "Trigger", PinState.LOW);
final GpioPinDigitalInput gpioecho = gpio.provisionDigitalInputPin(RaspiPin.GPIO_05, "Echo");
double start = 0;
double stop = 0;
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
System.out.println("Oops!");
gpio.shutdown();
System.out.println("Exiting nicely.");
}
});
Thread.sleep(2000);
gpiotrigger.high();
Thread.sleep(10);
gpiotrigger.low();
while (gpioecho.isLow()) {
start = System.currentTimeMillis();
}
while (gpioecho.isHigh()) {
stop = System.currentTimeMillis();
}
return (int) Math.round(((stop - start) * 34300) / 2);
} catch (InterruptedException ex) {
Logger.getLogger(Distance.class.getName()).log(Level.SEVERE, null, ex);
}
return 2;
}
}
Alles anzeigen
Ich würde mich freuen, wenn mir jemand von euch mit ein paar Tipps oder sogar Code-Korrektur helfen kann.
Viele Grüße
Alex