Slide 1

Slide 1 text

Austin Vance arduino the ruby way Monday, November 5, 12

Slide 2

Slide 2 text

Monday, November 5, 12

Slide 3

Slide 3 text

/austinbv @austinbv Monday, November 5, 12

Slide 4

Slide 4 text

arduino.. what now? Monday, November 5, 12

Slide 5

Slide 5 text

arduino.. what now? Monday, November 5, 12

Slide 6

Slide 6 text

arduino.. what now? Monday, November 5, 12

Slide 7

Slide 7 text

arduino.. what now? Monday, November 5, 12

Slide 8

Slide 8 text

arduino.. what now? Monday, November 5, 12

Slide 9

Slide 9 text

arduino.. what now? Monday, November 5, 12

Slide 10

Slide 10 text

arduino.. what now? Monday, November 5, 12

Slide 11

Slide 11 text

arduino.. what now? Monday, November 5, 12

Slide 12

Slide 12 text

arduino.. what now? Monday, November 5, 12

Slide 13

Slide 13 text

arduino.. what now? Monday, November 5, 12

Slide 14

Slide 14 text

what can you do with it? Monday, November 5, 12

Slide 15

Slide 15 text

can’t what can you do with it? Monday, November 5, 12

Slide 16

Slide 16 text

can’t What can you do with it? Monday, November 5, 12

Slide 17

Slide 17 text

can’t What can you do with it? Monday, November 5, 12

Slide 18

Slide 18 text

can’t What can you do with it? Monday, November 5, 12

Slide 19

Slide 19 text

can’t What can you do with it? Monday, November 5, 12

Slide 20

Slide 20 text

can’t What can you do with it? Monday, November 5, 12

Slide 21

Slide 21 text

the ide Monday, November 5, 12

Slide 22

Slide 22 text

the ide Monday, November 5, 12

Slide 23

Slide 23 text

the ide Monday, November 5, 12

Slide 24

Slide 24 text

Burn code to the arduino Monday, November 5, 12

Slide 25

Slide 25 text

•standalone •isolated •small Monday, November 5, 12

Slide 26

Slide 26 text

developed by Greg Borenstein Ruby Arduino Development RAD Monday, November 5, 12

Slide 27

Slide 27 text

Ruby class Blinky < ArduinoSketch output_pin 13, :as => :led def loop blink led, 100 end end Monday, November 5, 12

Slide 28

Slide 28 text

Ruby compiles to C #include #include void loop(); void setup(); int main(); int led(); void loop(); int _led = 13; int led() { return _led; } void setup() { pinMode(13, OUTPUT); } void blink(int pin, int ms) { digitalWrite( pin, HIGH ); delay( ms ); digitalWrite( pin, LOW ); delay( ms ); } int main() { init(); setup(); for( ;; ) { loop(); } return 0; } void loop() { blink(led(), 100); } class Blinky < ArduinoSketch output_pin 13, :as => :led def loop blink led, 100 end end Monday, November 5, 12

Slide 29

Slide 29 text

debugging outdated Monday, November 5, 12

Slide 30

Slide 30 text

Talk with the Arduino Monday, November 5, 12

Slide 31

Slide 31 text

•standalone •isolated •small Monday, November 5, 12

Slide 32

Slide 32 text

•standalone •isolated •small Monday, November 5, 12

Slide 33

Slide 33 text

•standalone •isolated •small Monday, November 5, 12

Slide 34

Slide 34 text

•standalone •isolated •small Monday, November 5, 12

Slide 35

Slide 35 text

•standalone •small Monday, November 5, 12

Slide 36

Slide 36 text

✓standalone •small Monday, November 5, 12

Slide 37

Slide 37 text

✓standalone ✓small Monday, November 5, 12

Slide 38

Slide 38 text

isolation is not import Monday, November 5, 12

Slide 39

Slide 39 text

Monday, November 5, 12

Slide 40

Slide 40 text

async Monday, November 5, 12

Slide 41

Slide 41 text

ecto/duino The Arduino listens for low-level signals over a serial port, while we abstract all of the logic on the Node side. “ ” Monday, November 5, 12

Slide 42

Slide 42 text

complex logic and problems Monday, November 5, 12

Slide 43

Slide 43 text

small C++ library complex logic and problems Monday, November 5, 12

Slide 44

Slide 44 text

message passing Monday, November 5, 12

Slide 45

Slide 45 text

? Monday, November 5, 12

Slide 46

Slide 46 text

dino introducing! Monday, November 5, 12

Slide 47

Slide 47 text

Goals • fully tested • easy to extend • great documentation • zero startup time • fun Monday, November 5, 12

Slide 48

Slide 48 text

beginning development and use what’s there thank you duino && node.js Monday, November 5, 12

Slide 49

Slide 49 text

Asynchronous in a synchronous world Monday, November 5, 12

Slide 50

Slide 50 text

Event Machine Monday, November 5, 12

Slide 51

Slide 51 text

EM.run do board = RubyDuino::Board.new board.callback do board.send_message '0013001' do EM::add_periodic_timer 0.5 do board.send_message “0013#{blink}” end end end end Monday, November 5, 12

Slide 52

Slide 52 text

Monday, November 5, 12

Slide 53

Slide 53 text

roll our own •developer control •specific to the gem •zero dependencies Monday, November 5, 12

Slide 54

Slide 54 text

How did it turn out? Monday, November 5, 12

Slide 55

Slide 55 text

class Board Monday, November 5, 12

Slide 56

Slide 56 text

== Monday, November 5, 12

Slide 57

Slide 57 text

♥ Monday, November 5, 12

Slide 58

Slide 58 text

class TxRx Monday, November 5, 12

Slide 59

Slide 59 text

Monday, November 5, 12

Slide 60

Slide 60 text

finds the arduino Monday, November 5, 12

Slide 61

Slide 61 text

injected into the board Monday, November 5, 12

Slide 62

Slide 62 text

oh the possibilities Monday, November 5, 12

Slide 63

Slide 63 text

don’t panic Monday, November 5, 12

Slide 64

Slide 64 text

module Components Monday, November 5, 12

Slide 65

Slide 65 text

class < BaseComponent Monday, November 5, 12

Slide 66

Slide 66 text

class Led Monday, November 5, 12

Slide 67

Slide 67 text

def initialize(options={}) super(options) set_pin_mode(:out) digital_write(Board::LOW) end def on digital_write(Board::HIGH) end def off digital_write(Board::LOW) end Monday, November 5, 12

Slide 68

Slide 68 text

board = Board.new(Dino::TxRx.new) led = Led.new(pin: 2, board: board) led.on sleep 2 led.off Monday, November 5, 12

Slide 69

Slide 69 text

class Button Monday, November 5, 12

Slide 70

Slide 70 text

def initialize(options={}) self.board.add_digital_hardware(self) self.board.start_read end #... def update(data) case data when UP button_up when DOWN button_down end end Monday, November 5, 12

Slide 71

Slide 71 text

Monday, November 5, 12

Slide 72

Slide 72 text

down = proc { led.on } up = proc { led.off } button.down(down) button.up(up) Monday, November 5, 12

Slide 73

Slide 73 text

class Sensor Monday, November 5, 12

Slide 74

Slide 74 text

def initialize(options={}) @data_callbacks = [] @board.add_analog_hardware(self) @board.start_read end def update(data) @data_callbacks.each do |callback| callback.call(data) end end Monday, November 5, 12

Slide 75

Slide 75 text

on_data = proc { |data| puts data } sensor .when_data_received(on_data) Monday, November 5, 12

Slide 76

Slide 76 text

class Stepper Monday, November 5, 12

Slide 77

Slide 77 text

def step_cc digital_write(Board::HIGH, pins[:dir]) digital_write(Board::HIGH, pins[:step]) digital_write(Board::LOW, pins[:step]) end def step_cw digital_write(Board::LOW, pins[:dir]) digital_write(Board::HIGH, pins[:step]) digital_write(Board::LOW, pins[:step]) end Monday, November 5, 12

Slide 78

Slide 78 text

1600.times do stepper.step_cc sleep 0.001 end 1600.times do stepper.step_cw sleep 0.001 end Monday, November 5, 12

Slide 79

Slide 79 text

and many more Monday, November 5, 12

Slide 80

Slide 80 text

and many more Monday, November 5, 12

Slide 81

Slide 81 text

and many more Monday, November 5, 12

Slide 82

Slide 82 text

and many more Monday, November 5, 12

Slide 83

Slide 83 text

and many more Monday, November 5, 12

Slide 84

Slide 84 text

Lets see it in action Monday, November 5, 12

Slide 85

Slide 85 text

use it with any ruby script reporter = proc { if system('./build') green.on && red.off else green.off && red.on end } button.down(reporter) Monday, November 5, 12

Slide 86

Slide 86 text

Monday, November 5, 12

Slide 87

Slide 87 text

initializer Monday, November 5, 12

Slide 88

Slide 88 text

sinatra board = Board.new(Dino::TxRx.new) cannon = Led.new(pin: 2, board: board) put ‘/launch‘ do cannon.on end Monday, November 5, 12

Slide 89

Slide 89 text

/austinbv/dino @austinbv Thank You! Monday, November 5, 12