/*
基于树莓派3b+开发
*/
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;
import java.util.Scanner;
public class test
{
//获取全局Gpio 引脚控制器对象
public static final GpioController gpio = GpioFactory.getInstance();
//定义编号为00/01/02/03引脚为数字输出引脚,初始化为低电平
public static final GpioPinDigitalOutput pin1output = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_00, "" ,PinState.LOW);
public static final GpioPinDigitalOutput pin2output = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01, "" ,PinState.LOW);
public static final GpioPinDigitalOutput pin3output = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_02, "" ,PinState.LOW);
public static final GpioPinDigitalOutput pin4output = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_03, "" ,PinState.LOW);
public static void forward (int step)
{
switch (step)
{
case 0:
pin1output.high();
pin2output.low();
pin3output.low();
pin4output.low();
break;
case 1:
pin1output.low();
pin2output.high();
pin3output.low();
pin4output.low();
break;
case 2:
pin1output.low();
pin2output.low();
pin3output.high();
pin4output.low();
break;
case 3:
pin1output.low();
pin2output.low();
pin3output.low();
pin4output.high();
break;
default:
break;
}
}
public static void backward (int step)
{
switch (step)
{
case 0:
pin1output.low();
pin2output.low();
pin3output.low();
pin4output.high();
break;
case 1:
pin1output.low();
pin2output.low();
pin3output.high();
pin4output.low();
break;
case 2:
pin1output.low();
pin2output.high();
pin3output.low();
pin4output.low();
break;
case 3:
pin1output.high();
pin2output.low();
pin3output.low();
pin4output.low();
break;
default:
break;
}
}
public static void stoprun ()
{
pin1output.low();
pin2output.low();
pin3output.low();
pin4output.low();
}
private static boolean exit = false;
public static void main(String[] args) throws InterruptedException
{
final Scanner in = new Scanner(System.in);//input 0 1 or 2
System.out.println("Motor Test Program ... started.");
while (!exit) {
System.out.println(" SELECT TEST: ");
System.out.println("----------------------------------------");
System.out.println(" 0: 360°");
System.out.println(" 1: 180°");
System.out.println(" 2: 90°");
System.out.println(" X: EXIT");
System.out.println("----------------------------------------");
// get user input selection
String selection = in.next();
switch(selection.toUpperCase()){
case "0":{
System.out.println("forward 360°");
for (int i = 0; i < 512; i++) // 512 -> 360°
{
for (int step = 0; step < 4; step++)
{
forward(step);
Thread.sleep(3);
}
}
stoprun();
Thread.sleep(1000);
System.out.println("backward 360°");
for (int i = 0; i < 512; i++) // 512 -> 360°
{
for (int step = 0; step < 4; step++)
{
backward(step);
Thread.sleep(3);
}
}
stoprun();
break;
}
case "1":{
System.out.println("forward 180°");
for (int i = 0; i < 256; i++) // 256 -> 180°
{
for (int step = 0; step < 4; step++)
{
forward(step);
Thread.sleep(3);
}
}
stoprun();
Thread.sleep(1000);
System.out.println("backward 180°");
for (int i = 0; i < 256; i++) // 256 -> 180°
{
for (int step = 0; step < 4; step++)
{
backward(step);
Thread.sleep(3);
}
}
stoprun();
break;
}
case "2":{
System.out.println("forward 90°");
for (int i = 0; i < 128; i++) // 128 -> 90°
{
for (int step = 0; step < 4; step++)
{
forward(step);
Thread.sleep(3);
}
}
stoprun();
Thread.sleep(1000);
System.out.println("backward 90°");
for (int i = 0; i < 128; i++) // 128 -> 90°
{
for (int step = 0; step < 4; step++)
{
backward(step);
Thread.sleep(3);
}
}
stoprun();
break;
}
case "X":{
exit = true;
break;
}
default: {
System.err.println("Invalid Entry, Try Again!");
break;
}
}
}
//close scanner stream
in.close();
System.out.println();
System.out.println();
System.out.println("Goodbye!");
System.out.println();
System.out.println();
// stop all GPIO activity/threads by shutting down the GPIO controller
// (this method will forcefully shutdown all GPIO monitoring threads and scheduled tasks)
gpio.shutdown();
}
}
程序说明:
- 硬件连接
IN1:接11
IN2:接12
IN3:接13
IN4:接15
+ :接04
- :接06
- 安装pi4j
文件夹中有安装包:pi4j-1.2.deb
将安装包使用U盘,或者利用ssh上传到树莓派中,使用以下命令安装
sudo dpkg -i pi4j-1.2.deb
参考网站:https://www.jianshu.com/p/0584f8b01725
- 源程序:test.java
编译命令:
javac -classpath .:classes:/opt/pi4j/lib/'*' -d . test.java
执行命令:
sudo java -classpath .:classes:/opt/pi4j/lib/'*' test
- 程序操作说明
执行sudo java -classpath .:classes:/opt/pi4j/lib/'*' test后,屏幕会出现以下内容:
Motor Test Program ... started.
SELECT TEST:
----------------------------------------
0: 360°
1: 180°
2: 90°
X: EXIT
----------------------------------------
输入:0,按下“Enter”就会执行正向旋转360°,等待1s后,再反向旋转360°;
以此类推,输入:1,就旋转180°,输入:2,就旋转90°,输入:x,就推出程序