Beim Vibrationsmotor handelt es sich um einen sehr kleinen Motor, der über eine kleine Unwucht verfügt. Durch diesen Fehler im Rundlauf entsteht die gewünschte Vibration. Aufgrund des elektrischen Anschlusses beim CrowPi ist jedoch nur ein Ein- und Ausschalten des Motors möglich. Theoretisch wäre aber auch PWM denkbar. Jedoch verfügt der verwendete Pin über keine PWM Funktionalität.
Für diese Komponente muss einer der DIP-Switches auf die folgende Position eingestellt werden:
Nachfolgend wird die Verwendung der Klasse
com.pi4j.crowpi.components.RelayComponent
Javadoc
beschrieben.
Konstruktor | Bemerkung |
---|---|
VibrationMotorComponent(com.pi4j.context.Context pi4j) | Initialisiert einen Vibrationsmotor mit dem Standard-Pin für den CrowPi. |
VibrationMotorComponent(com.pi4j.context.Context pi4j, int address) | Initialisiert einen Vibrationsmotor mit einem benutzerdefinierten Pin. |
Methode | Bemerkung |
---|---|
void on() | Schaltet den Vibrationsmotor ein. |
void off() | Schaltet den Vibrationsmotor aus. |
boolean toggle() | Wechselt den Zustand des Vibrationsmotors abhängig vom aktuellen Zustand. Gibt den neuen Zustand als boolean zurück. |
void pulse(int interval) | Schaltet den Vibrationsmotor für die angegebene Zeit in Millisekunden ein. |
void setState(boolean on) | Setzt den aktuellen Zustand des Vibrationsmotors auf den Wert des boolean on . |
Die Beispielapplikation führt erst einen kleinen Test mit Ein- und Ausschalten dem Vibrationsmotor durch. Anschliessend wird durch gezielte
Variation der Pulslänge versucht einen möglichst nervigen Ton zu erstellen. Dadurch soll der Benutzer aufgeweckt werden, falls er vor dem PC
eingeschlafen ist. Sobald der Benutzer das Aufwachen mit YES
bestätigt wird die Applikation beendet.
src/main/java/com/pi4j/crowpi/applications/VibrationMotorApp.java
package com.pi4j.crowpi.applications;
import com.pi4j.context.Context;
import com.pi4j.crowpi.Application;
import com.pi4j.crowpi.components.VibrationMotorComponent;
import java.util.Scanner;
/**
* This example shows how to use the vibration motor. It basically represents a vibrating alarm clock which is going off and keeps making
* noises until the user confirms being awake by writing `yes` to the console / standard input. Please note that this example requires the
* DIP switch 2-1 to be activated for it to work.
*/
public class VibrationMotorApp implements Application {
@Override
public void execute(Context pi4j) {
VibrationMotorComponent vibrationMotor = new VibrationMotorComponent(pi4j);
// Short test if the component is working
vibrationMotor.on();
sleep(500);
vibrationMotor.off();
// Write to ask the user something
System.out.println("Are you awake? Answer with YES if you are...");
// Scanner is used to read the input from the commandline
Scanner scanner = new Scanner(System.in);
// Loops until YES is found
while (!scanner.nextLine().equalsIgnoreCase("YES")) {
// Do some pulses to create a strange noise
for (int i = 10; i < 100; i++) {
// As you see use pulse is a lot more comfortable than using .on -> sleep -> off
vibrationMotor.pulse(i);
sleep(i);
}
for (int i = 100; i > 10; i--) {
vibrationMotor.pulse(i);
sleep(i);
}
System.out.println("Are you awake? Answer with YES if you are...");
}
// User is awake, so we can turn off the vibration motor now.
vibrationMotor.off();
}
}