JAVA版树莓派UNL2003驱动28BYJ-48步进电机完整程序

/*
基于树莓派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();
	}

}

程序说明:

  1. 硬件连接

IN1:接11

IN2:接12

IN3:接13

IN4:接15

+  :接04

-   :接06

  1. 安装pi4j

文件夹中有安装包:pi4j-1.2.deb

将安装包使用U盘,或者利用ssh上传到树莓派中,使用以下命令安装

sudo dpkg -i pi4j-1.2.deb

参考网站:https://www.jianshu.com/p/0584f8b01725

  1. 源程序:test.java

编译命令:

javac -classpath .:classes:/opt/pi4j/lib/'*' -d . test.java

执行命令:

sudo java -classpath .:classes:/opt/pi4j/lib/'*' test

  1. 程序操作说明

执行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,就推出程序

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值