Lego-Robotik mit Java

English
Virtueller Campus Projekt, PHBern
HomeoopNXToopNXJlejosNXTlejosNXJLegoRCXDruckenJava-Online
Online-Editor starten

Soundsensor


Benötigter Roboter:

NXT mit Gear und Soundsensor


Beispiel 1:

Der Roboter bewegt sich vorwärts. Beim jedem lauten Geräusch macht er eine Linkskurve und fährt in der neuen Richtung weiter. Der Soundsenor wird der durch einen SoundListener überwacht. Wird ein Event (lautes Klatschen) registriert, so wird die Callbackmethode loud() aufgerufen.

 

Beispiel mit Online Editor testen

Programmcode:

// SoundSensorEx1.java

import ch.aplu.nxt.*;
import ch.aplu.util.*;

public class SoundSensorEx1 implements SoundListener
{
  private final int triggerLevel = 30;
  private Gear gear;
  
  public SoundSensorEx1()
  {
    NxtRobot robot = new NxtRobot();
    SoundSensor ss = new SoundSensor(SensorPort.S1);
    robot.addPart(ss);
    ss.addSoundListener(this, triggerLevel);

    gear = new Gear();
    gear.setSpeed(30);
    robot.addPart(gear);
    gear.forward();

    while (!QuitPane.quit());
    robot.exit();
  }
  
  public void loud(SensorPort port, int level)
  {
    gear.left(500);
    gear.forward();
  }  
  
  public void quiet(SensorPort port, int level)
  { 
  } 
    
  public static void main(String[] args)
  {
    new SoundSensorEx1();
  }
}

Erklärungen zum Programmcode:
implements SoundListener Analog wie beim Light- und Touchsensor wird der SoundListener implementiert.
Das Interface SoundListener hat zwei Callbackmethoden loud() und quiet()
private final int triggerLevel = 30
Der Triggerpegel wird auf 30 gesetzt. In einer lauten Umgebung muss dieser Wert vergrössert werden
ss.addSoundListener(this, triggerLevel) SoundListener wird mit der aktuellen Instanz und dem Triggerlevel registriert, damit der Soundsensor die Callbackmethoden aufrufen kann


Beispiel 2:

Der Roboter startet bei einem akustischen Signal (z.B. laut Klatschen oder Pfeifen). Er fähr bis der Quitbutton gedrückt wird. Das Starten einer Robotertätigkeit beim Klatschen wird vielfach bei Wetbewerben eingesetzt.
Ein Soundsensor gibt mit der Methode getValue() die Geräuschwerte zurück
(je grösser der Wert, um so lauter).

 

Beispiel mit Online Editor testen

Programmcode:

// SoundSensorEx2.java

import ch.aplu.nxt.*;
import ch.aplu.util.*;

class SoundSensorEx2 implements SoundListener
{
  private final int triggerLevel = 30;
  private Gear gear;
    
  SoundSensorEx2()
  {
    NxtRobot robot = new NxtRobot();
    gear = new Gear();
    robot.addPart(gear);
    SoundSensor ss = new SoundSensor(SensorPort.S1);
    robot.addPart(ss);
    ss.addSoundListener(this,triggerLevel);

    while (!QuitPane.quit())
    {} 
     
    robot.exit();
  }
  
  public void loud(SensorPort port, int level)
  {
    gear.forward();
  }  
  
  public void quiet(SensorPort port, int level)
  { 
  } 

  public static void main (String[] args)
  {
    new SoundSensorEx2();
  }
}

Erklärungen zum Programmcode:
while (!QuitPane.quit()) Das Hauptprogramm läuft in einer Endlosschleife
ss.addSoundListener(this,triggerLevel)
SoundListener wird mit der aktuellen Instanz und dem Triggerlevel registriert, damit der Soundsensor die Callbackmethoden aufrufen kann . in der Callbackmethode loud() wird der Roboter in Bewegung gesetzt