Hi everyone, I just started trying to play with a raspberry pi for a 
variety of reasons, and given that java runs on it, I decided to use this 
as an opportunity to learn clojure.  I'm playing with a blinkIo example 
which looks like this: 

public class BlinkGpioExample {


 public static void main(String[] args) throws InterruptedException {


 System.out.println("<--Pi4J--> GPIO Blink Example ... started.");


 // create gpio controller

 final GpioController gpio = GpioFactory.getInstance();


 // provision gpio pin #01 & #03 as an output pins and blink

 final GpioPinDigitalOutput resevoirPumpLine = gpio

  .provisionDigitalOutputPin(RaspiPin.GPIO_01);

 final GpioPinDigitalOutput troughFillLine = gpio

  .provisionDigitalOutputPin(RaspiPin.GPIO_03);


 // provision gpio pin #02 as an input pin with its internal pull down

 // resistor enabled

 final GpioPinDigitalInput resevoirSwitch = gpio.provisionDigitalInputPin(

  RaspiPin.GPIO_14, "Resevoir Switch", PinPullResistance.PULL_DOWN);

 final GpioPinDigitalInput trougSwitch = gpio.provisionDigitalInputPin(

  RaspiPin.GPIO_13, "Trough Switch", PinPullResistance.PULL_DOWN);

 resevoirSwitch.setShutdownOptions(true);

 // create and register gpio pin listener

 resevoirSwitch.addListener(new GpioPinListenerDigital() {

 @Override

 public void handleGpioPinDigitalStateChangeEvent(

  GpioPinDigitalStateChangeEvent event) {

  // when button is pressed, speed up the blink rate on LED #2

  if (event.getState().isHigh()) {

  System.out.println(event.getPin().getName() + " do nothing");

  } else {

  resevoirPumpLine.blink(1000);

     }

 }

 });


 trougSwitch.addListener(new GpioPinListenerDigital() {


  @Override

 public void handleGpioPinDigitalStateChangeEvent(

  GpioPinDigitalStateChangeEvent event) {

  if (event.getState().isHigh()) {

  System.out.println(event.getPin().getName() + "  do nothing");

  } else {

  //stick value into a flat file or in mem database;

  troughFillLine.blink(1000);

  }


  }

 });


 System.out

  .println(" ... the LED will continue blinking until the program is 
terminated.");

 System.out.println(" ... PRESS <CTRL-C> TO STOP THE PROGRAM.");


 // keep program running until user aborts (CTRL-C)

 for (;;) {

 Thread.sleep(500);

 }


 }

}

 

Since I am quite new to clojure, i attempted to do a straight port to 
clojure (as opposed to writing the blinkio in a more functional manner) and 
came up with :

(def factory (GpioFactory/getInstance) )


(def pumpOutput (.provisionDigitalOutputPin factory RaspiPin/GPIO_01))

(def troughOutput (.provisionDigitalOutputPin factory RaspiPin/GPIO_03))



(def pumpInput (.provisionDigitalInputPin factory RaspiPin/GPIO_13 
"troughSwitch" PinPullResistance/PULL_DOWN))

(def resevoirInput (.provisionDigitalInputPin factory RaspiPin/GPIO_14 
"resevoirSwitch" PinPullResistance/PULL_DOWN))



(def resevoirListener (reify com.pi4j.io.gpio.event.GpioPinListenerDigital (
handleGpioPinDigitalStateChangeEvent [this event] (printf "resevoir here")))
)

(.addListener resevoirInput [^com.pi4j.io.gpio.event.GpioPinListenerDigital 
resevoirListener] )


(def troughListener (reify com.pi4j.io.gpio.event.GpioPinListenerDigital (
handleGpioPinDigitalStateChangeEvent [this event] (printf "trough here"))))

(.addListener resevoirInput [^com.pi4j.io.gpio.event.GpioPinListenerDigital 
troughListener] )


(defn infinite    [f seconds]    (future (loop []      (f)     (Thread/sleep 
(* seconds 1000))      (recur))))


(infinite (printf "\nlooping") 10)


**********

My question:  This compiles, and runs, but doesn't actually do anything 
when I manipulate the PI io.  I am thinking I have to do something 
regarding defining my inputIOs as atoms, but I'm still trying to get my 
head wrapped around that concept. Could someone please point me in the 
right direction to get my (printf "trough /resevoir here") messages to 
display?  Mind you that there isn't a problem with any of the wiring on the 
PI, it is verified in the java version of this program.  I am just having 
trouble porting this code.  


Thanks for any help!

Andre

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to