Skip to content

hiroeorz/arduino-erlang

Repository files navigation

arduino-erlang

Goals

  • Provide Arduino controller from Erlang/OTP Application.

Getting Started

Fetch the latest version of arduino-erlang using git.

$ git clone https://github.com/hiroeorz/arduino-erlang.git $ cd arduino-elrang $ make 

Or add "deps" line to your app's rebar.conf.

{arduino, ".*",{git, "https://github.com/hiroeorz/arduino-erlang.git",{branch, "master"}}}, 

and get deps

$ ./rebar get-deps 

Running

You can read write Arduino I/O throuh the Firmata protocol. You need to send sketch 'Standard Firmata' to your Arduino or implementation Firmata Protocol your own, before start up the arduino-erlang.

In sample setting, gpio 0,1,2,3,4,5,6,7 is digital input mode, 8, 9 is digital output mode, 10,11 is pwm, 12,13 is servo.

Start Erlang/OTP node.

$ erl -boot start_sasl -pa ebin deps/*/ebin 
1> application:load(arduino). 2> arduino_sup:start_link(). 

When application started, receive analog values (pin 0 - 5) every 290msec, and When digital status changed, you receive digital change report like:

digitalchanged(port:0): [1,1,1,0,1,1,1,1]

arduino_sup:start_link/0 is start with sample setting, If you want to start supervisor with your setting, you can start supervisor with your own setting like:

Config= [{speed, 57600},{device, "/dev/ttyACM0"},{sampling_interval, 290},{digital_port_reporting, [1, 0]},{digital_port_offset, 1},{analog_offset, 0},{analog, [0, 1, 2, 3, 4, 5] },{digital, [{0, in, [{pull, up} ]},{1, in, [{pull, up} ]},{2, in, [{pull, up} ]},{3, in, [{pull, up} ]},{4, in, [{pull, up} ]},{5, in, [{pull, up} ]},{6, in, [{pull, up} ]},{7, in, [{pull, up} ]},{8, out},{9, out},{10, pwm},{11, pwm},{12, servo},{13, servo} ] } ], EventHandlers= [{your_handler, []} ], arduino_sup:start_link(Config, EventHandlers).

Get all digital state.

1> arduino:all_digital() [1,1,0,0,0,0,0,1] 

Get all analog value.

1> arduino:all_analog(). [343, 211, 375, 111, 0, 343] 

Write digital state.

PortNO is unit number of every 8 bit digital status.

1> arduino:digital_write(0, [1,1,1,1,1,1,1,1]). ok 

Add event handler of arduino

1> arduino_event:add_event_handler(sample_event_handler, []). ok 
  • First argument is module name.
  • Second argument is arguments of sample_event_handler:init/1.

The sample_event_handler is event handler befavior of gen_event. sample_event_handler.erl

About

Arduino handler for Erlang/OTP Application.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published