Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich programmieren derzeit mit einem kleinen Roboter von Lego, der mit zwei Sensoren ausgestattet ist.
Einem Infrarotsensor, der den Abstand zur Wand mist an dem der Roboter entlang fährt und einem Touchsensor der überprüfen soll, ob sich vor dem Roboter ein(e) Wand/Hindernis befindet. Das mit dem Infrarotsensor funktioniert soweit, er korrigiert die Fahrtrichtung, sofern der Roboter zu stark von der geraden Linie der Wand abweicht. Jedoch schaffe ich es nicht den Touchsensor so zu implementieren, dass er dauerhaft (also in jeder millisekunde des Programms) überprüft, ob der Touchsensor gepressed ist.
Wie könnte man soetwas machen? Geht das? Gibt es so etwas wie einen Interrupt bei Microcontrollern?
so einen Roboter hab ich auch
kann man den echt über java (<- also wirklich pures java programmieren!?)
Oder meinst du das Programm(hab einmal was mit dem gemacht )? Also auf die schnelle beim überfliegen könnt ich dir nur einen sleep-block(try/catch) "empfehlen" und den auf 1 setzt, aber des würde glaub ich auch wenig Sinn ergeben
Du brauchst einen Thread der nebenläufig eine Schleife durchläuft, in der er immer eine bestimmte Zeit wartet (z.B. mit [c]sleep(100)[/c] für 0,1 sec) und dann die Sensordaten liest und mögliche Aktionen ausführt.
Busy waiting sollte man eigentlich vermeiden. Natürlich gibt es in Java etwas 'ähnliches' wie Interrupts. Die Grundidee dahinter ist eben, dass gewisse Aktionen erst ausgeführt werden wenn sich die betreffende Komponente meldet.
Schau dir in diesem Zusammenhang das Schlüsselwort
Code:
synchronized
an ( in der Doku oder einem der vielen Java Bücher). Für Sensoren gibt es ein
Code:
SensorEvent
. Mit dem event kannst du dann, wenn etwas passiert, die Daten weitergeben. Verarbeiten könntest du das dann mit
Code:
TimerTask
.
Als kurzer Leidfaden (kein ausführbarer Code!):
Code:
public void sensorChanges( SensorEvent event){
synchronized (this){
//wir machen etwas mit dem Sensor event
// wir fügen z.B. Sensordaten zu einem Datenfeld data hinzu
}
}
class doSomethingWithSensordata extends TimerTask {
public synchronized void run() {
for (Sensordata i: data) {
//Wir machen etwas mit den Daten, z.B. Änderung der Fahrtrichtung
}
}
}
Zu den Fragen, ja klar das geht, ich programmiere mit Eclipse. Ich stelle euch mal die Seite rein, wo ein Leidfaden vorhanden ist, wie man die Konfigurationen (sd card, ssh verbindung ...) einstellt. leJOS / EV3 Wiki / Home