Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SHA2017 - Coffee Machines && JavaScript - Intro...

SHA2017 - Coffee Machines && JavaScript - Intro to Nodebots

These are the slides for a workshop given at SHA 2017

Dominik Kundel

August 06, 2017
Tweet

More Decks by Dominik Kundel

Other Decks in Programming

Transcript

  1. About me Developer Evangelist at Get in touch with me!

    ! @dkundel " [email protected] # github/dkundel Dominik Kundel | @dkundel | #sha2017 #coffeejs
  2. Why JS? 1. The last +me I wrote C++ was

    in university 2. I know JavaScript well which makes coding faster 3. Wri+ng a web server is easy 4. It's more challenging 5. Hardware === eventDriven && JS === eventDriven Dominik Kundel | @dkundel | #sha2017 #coffeejs
  3. What We Knew • 8 cables/pins • 6 switches •

    7 LEDs Dominik Kundel | @dkundel | #sha2017 #coffeejs
  4. Assump&ons 1. One cable is ⚡ 2. We need at

    least 3 pins + power controlling the " 3. We need at least 3 pins + power controlling the # 4. What is the 8th cable for? Dominik Kundel | @dkundel | #sha2017 #coffeejs
  5. The Naive Approach const five = require('johnny-five'); const Tessel =

    require('tessel-io'); const board = new five.Board({ io: new Tessel() }); board.on('ready', () => { const p1 = new five.Pin({ pin: 'b0', mode: 2 }); //... const p8 = new five.Pin({ pin: 'b7', mode: 2 }); const pins = [p1, /* ... */, p8]; board.repl.inject({ pins: pins }); }); Dominik Kundel | @dkundel | #sha2017 #coffeejs
  6. The Naive Approach II const five = require('johnny-five'); const Tessel

    = require('tessel-io'); const board = new five.Board({ io: new Tessel() }); board.on('ready', () => { const p2 = new five.Pin({ pin: 'b1' /*, mode: 2 */ }); //... const p8 = new five.Pin({ pin: 'b7'/*, mode: 2 */ }); const pins = [p2, /* ... */, p8]; board.repl.inject({ pins: pins }); }); Dominik Kundel | @dkundel | #sha2017 #coffeejs
  7. Bu#ons? How About Bu#ons! board.on('ready', () => { // PIN

    declaration ... const b2 = new five.Button('b1'); const b3 = new five.Button('b2'); const b7 = new five.Button('b6'); const b8 = new five.Button('b7'); const buttons = [b2, b3, b7, b8]; buttons.forEach(btn => { btn.on('press', () => console.log('Pressed button no.%d', btn.pin)); btn.on('release', () => console.log('Released button no.%d', btn.pin)); }); }); Dominik Kundel | @dkundel | #sha2017 #coffeejs
  8. We Are On To Something ! • Pin 1 is

    ⚡ (turns on LED4, LED5, LED7) • Pin 4-6 can turn off " LED4, " LED5, " LED7 • Pin 7-8 react on # • Pin 2 can manipulate # S3 && # S4 • Pin 3 can manipulate # S1 && # S2 Dominik Kundel | @dkundel | #sha2017 #coffeejs
  9. ! Progress! ! Pin 1-3 === ⚡ Pin 4-6 ===

    ! Pin 7-8 === !??? Dominik Kundel | @dkundel | #sha2017 #coffeejs
  10. It All Makes Sense! ! S1 = P3 ➡ P7

    ! S2 = P3 ➡ P8 ! S3 = P2 ➡ P7 ! S4 = P2 ➡ P8 ! S5 = P1 ➡ P7 ! S6 = P1 ➡ P8 " LED7 (Power) = P1 ➡ P6 Dominik Kundel | @dkundel | #sha2017 #coffeejs
  11. const espresso = new five.Relay({ pin: 'a4', type: 'NO' });

    const grande = new five.Relay({ pin: 'a5', type: 'NO' }); const power = new five.Relay({ pin: 'a6', type: 'NO' }); espresso.close(); grande.close(); power.close(); board.repl.inject({ espresso, grande, power }); Dominik Kundel | @dkundel | #sha2017 #coffeejs
  12. Hyper Text Coffee Pot Control Protocol • Built on top

    of HTTP • Adds BREW method • Safe and Accept-Additions Headers • HTTP code 418 • coffee:// URI scheme • many more things Dominik Kundel | @dkundel | #sha2017 #coffeejs
  13. What's Next? ! • Programma(cally determine state • Add more

    relays • Sugges(ons??? Dominik Kundel | @dkundel | #sha2017 #coffeejs
  14. Any Ques)ons? Get in touch with me! ! Dominik Kundel

    " @dkundel # [email protected] $ github/dkundel Dominik Kundel | @dkundel | #sha2017 #coffeejs