I came across the Pi4J Project today. The project is working on a library to allow Pi programming from Java. It is not at version 1 yet so still quiet new but the library lets you access the GPIO port on your Pi and join in some of the fun I thought you needed to use python for.
My Pi is currently connected to a stepper motor so I thought I would have ago at getting it to run from java,the below code is the result. Once I had the pi setup and proved the java setup was working correctly I used Eclipse on my Windows PC to write my code/compile and WinSCP to transfer it to the Pi.
The Pi4J project have a number of examples on their site and their control example (http://pi4j.com/example/control.html) was the starting point for my code.
I am using a 28BYJ-48 stepper motor and ULN 2003 driver board which I picked up from ebay awhile ago.
Update: The latest version of Pi4J now includes a dedicated stepper motor class and example code.
The eclipse project can be download from: http://github.com/qubecad/hmm-pi.git
package com.qubecad.pi.stepper; import java.util.HashMap; 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; public class PiStepper { /** * * Driving a Stepper Motor From Java * * @param args * @throws InterruptedException */ public static void main(String[] args) throws InterruptedException { // create gpio controller GpioController gpio = GpioFactory.getInstance(); // Set up the pins and set low to start System.out.print("Setting up GPIO Pins for ouput"); GpioPinDigitalOutput pina = gpio.provisionDigitalOuputPin(RaspiPin.GPIO_05, "Pin A", PinState.LOW); GpioPinDigitalOutput pinb = gpio.provisionDigitalOuputPin(RaspiPin.GPIO_06, "Pin B", PinState.LOW); GpioPinDigitalOutput pinc = gpio.provisionDigitalOuputPin(RaspiPin.GPIO_10, "Pin C", PinState.LOW); GpioPinDigitalOutput pind = gpio.provisionDigitalOuputPin(RaspiPin.GPIO_11, "Pin D", PinState.LOW); HashMap driveLogic=new HashMap(); driveLogic.put(0, "1001"); driveLogic.put(1, "0001"); driveLogic.put(2, "0011"); driveLogic.put(3, "0010"); driveLogic.put(4, "0110"); driveLogic.put(5, "0100"); driveLogic.put(6, "1100"); driveLogic.put(7, "1000"); System.out.print("Driving motor"); while (true) { for (int i = 1; i < driveLogic.size(); i++) { String grayCode = (String) driveLogic.get(i); setPin(pina,grayCode.charAt(0)); setPin(pinb,grayCode.charAt(1)); setPin(pinc,grayCode.charAt(2)); setPin(pind,grayCode.charAt(3)); Thread.sleep(10); } } } /** * * Sets the passed pin Low or High depending on the passed value. * * @param pin * @param value */ private static void setPin(GpioPinDigitalOutput pin,char value){ if (value == '0') { pin.low(); } else { pin.high(); } } }
2 comments:
Pretty cool you can do it in java now. Think a xmas money splurge on components might be in order :-)
Very cool demonstration! The Pi4J project is looking at also adding some device abstractions .. maybe stepper motor would be a good target to add.
Post a Comment