31
Plumbing the Arduino Adam Sampson University of Kent (and a cast of thousands, including Matt Jadud, Christian Jacobsen, Omer Kilic, Carl Ritson...)

Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

Plumbing the Arduino

Adam SampsonUniversity of Kent

(and a cast of thousands, including Matt Jadud, Christian Jacobsen, Omer Kilic, Carl Ritson...)

Page 2: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

A brief history lesson● In the 1980s, INMOS created the Transputer● … and an unusual programming language, called

occam● Further developed at Kent in the 1990s and

2000s: occam-pi● Here's what it looks like...

Page 3: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

C++:

doThing(); doOtherThing();

occam:

SEQ doThing() doOtherThing()

Page 4: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

PROC main () WHILE TRUE SEQ digitalWrite (13, HIGH) delay (200) digitalWrite (13, LOW) delay (200):

Page 5: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

PROC blink (VAL INT pin, period) WHILE TRUE SEQ digitalWrite (pin, HIGH) delay (period) digitalWrite (pin, LOW) delay (period):PROC main () blink (13, 200):

Page 6: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

PROC main () blink (13, 200):

Page 7: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program
Page 8: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

occam:

PAR x y

C++:

??!?!!!?

Page 9: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

PROC main () PAR blink (13, 300) blink (14, 500):

Page 10: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program
Page 11: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

This is a channel.

Page 12: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

sender receiver

Page 13: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

inputPin outputPin

Page 14: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

inputPin outputPininvert

Page 15: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

Concurrency in action● We call this “process-oriented programming”● Build your program out of little, isolated

components, and connect them together● Plumbing is a library of ready-made components

(like inputPin, invert and blink) for the Arduino

Page 16: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

64 LEDs (well, 128, actually...)

Page 17: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

One

Page 18: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

How does that work?

buffer buffer buffer buffer...

Page 19: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

How does that work?

buffer buffer buffer buffer...

column column column column...

Page 20: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

How does that work?

buffer buffer buffer buffer...

column column column column...

sourceblack.hole

Page 21: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program
Page 22: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

Distributed embedded system

buffer buffer buffer buffer...

column column column column...

sourceblack.hole

Page 23: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

First node

buffer buffer buffer buffer...

column column column column...

source serial.txserial.tx

Page 24: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

Other nodes

buffer buffer buffer buffer...

column column column column...

serial.rx serial.txserial.tx

Page 25: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program
Page 26: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program
Page 27: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program
Page 28: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program
Page 29: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

The RepRap● X, Y and Z axes with steppers and endstops● Print head with heater, temperature sensor and

extruder motor● Serial interface to accept commands from a host

computer

Page 30: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

Plumbing the RepRap

serial.port

temp.sensor

heater

thermostat

command.parsermotor.control

motor

endstop

motor.control

motor

endstop

motor.control

motor

endstop

motor.control

motor

endstop

motor.control

motor

endstop

axis.control

motor

endstop

x

y

z

extruder

Page 31: Plumbing the Arduino - Adam Sampsonoffog.org/publications/oshug201007-arduino-slides.pdf · Concurrency in action We call this “process-oriented programming” Build your program

How do I learn more?● Read the book!● Available from our web site

along with the software (all open source):http://concurrency.cc/

● For more about occam-pi:http://occam-pi.org/

● Thanks – any questions?