Slide 1

Slide 1 text

4XJGUͰ͸͡ΊΔ 3BTQCFSSZ1J ͜͹΍͠͞ͱ͠ !HVDDIJTL J04%$+BQBO-5

Slide 2

Slide 2 text

ࠓ೔͸ͳ͢͜ͱ w 3BTQCFSSZ1Jॳ৺ऀͷࢲ͕4XJGUͰ3BTQCFSSZ1Jʹೖ໳ ͨ͠࿩

Slide 3

Slide 3 text

3BTQCFSSZ1J w "3.ϓϩηοα౥ࡌͷ໊ࢗαΠζͷখܕίϯϐϡʔλ w ڭҭɾֶश༻ w ҆Ձͳ*P5ػثʢʙԁʣ

Slide 4

Slide 4 text

͸͡ΊΑ͏3BTQCFSSZ1J ඞཁͳ΋ͷ w3BTQCFSSZ1Jຊମ wిݯΞμϓλ wNJDSP4%Χʔυ w1$ wσΟεϓϨΠ w64#ΩʔϘʔυ w64#Ϛ΢ε

Slide 5

Slide 5 text

3BTCJBO  /00#4μ΢ϯϩʔυ  4%Χʔυʹίϐʔ  ը໘ͷࢦࣔʹैͬͯ
 Πϯετʔϧ  ׬ྃʂ IUUQTXXXSBTQCFSSZQJPSHEPXOMPBET

Slide 6

Slide 6 text

͙͢TTIͰ͖Δ TTISBTQCFSSZQJMPDBMMQJ QJ!SBTQCFSSZQJMPDBMTQBTTXPSE )PTUOBNF SBTQCFSSZQJMPDBM 6TFS QJ 1BTTXPSE SBTQCFSSZ ΋͏σΟεϓϨΠˍϚ΢εˍΩʔϘʔυ͸͍Βͳ͍ʂ TTIͰ͖Δ୺຤͕͋Ε͹0,

Slide 7

Slide 7 text

4XJGU μ΢ϯϩʔυղౚ

Slide 8

Slide 8 text

४උສ୺ʂ

Slide 9

Slide 9 text

·ͣ͸-νΧʂ

Slide 10

Slide 10 text

4XJGUZ(1*0 ͜ͷϐϯΛ੍ޚ IUUQTXXXSBTQCFSSZQJPSH (1*0(FOFSBMQVSQPTFJOQVUPVUQVU

Slide 11

Slide 11 text

(1*0 IUUQTQJOPVUYZ[

Slide 12

Slide 12 text

-νΧ1BDLBHFKTPO import PackageDescription let package = Package( name: "led", dependencies: [ .Package(url: "https://github.com/uraimo/ SwiftyGPIO.git", majorVersion: 1), ] )

Slide 13

Slide 13 text

-νΧNBJOTXJGU import SwiftyGPIO import Glibc let gpios = SwiftyGPIO.GPIOs(for:.RaspberryPi3) let gp = gpios[.P25]! gp.direction = .OUT gp.value = 1 repeat { gp.value = (gp.value == 0) ? 1 : 0 usleep(500 * 1000) } while (true)

Slide 14

Slide 14 text

-νΧ ?P?

Slide 15

Slide 15 text

5PHHMF4XJUDI w εΠονʹΑΓ0/0''͕ೖΕସΘΔ w ԡͨ͢ͼʹ-&%͕఺͍ͨΓফ͑ͨΓ

Slide 16

Slide 16 text

5PHHMF4XJUDI IUUQGSJU[JOHPSHIPNF 7 (/% (1*0 (1*0 4XJUDI ఍߅ -&%

Slide 17

Slide 17 text

let gpios = SwiftyGPIO.GPIOs(for: .RaspberryPi3) let gpo = gpios[.P25]! gpo.direction = .OUT gpo.value = 0 let gpi = gpios[.P24]! gpi.direction = .IN gpi.pull = .down var ledState = false gpi.onRaising({(gpio) -> Void in ledState = !ledState if ledState { gpo.value = 1 } else { gpo.value = 0 } })

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

TXJUDICPVODF ̍ճ໨ ̎ճ໨ 0/ 0'' 0/ 0'' ཧ૝ ݱ࣮

Slide 20

Slide 20 text

4PGUXBSFEFCPVODJOH w ࠷ॳͷΠϕϯτݕ஌ޙҰఆ࣌ؒ͸ಉ͡ΠϕϯτΛແࢹ ̍ճ໨ ̎ճ໨ ແࢹ͍ͨ͠ Ұఆ࣌ؒݕग़͠ͳ͍ 0/ 0''

Slide 21

Slide 21 text

CPVODFUJNF w31J(1*0 QZUIPO wHQJP[FSP QZUIPO # add rising edge detection on a channel, ignoring further edges for 200ms for switch bounce handling GPIO.add_event_detect(channel, GPIO.RISING, callback=my_callback, bouncetime=200) class gpiozero.Button(pin, *, pull_up=True, bounce_time=None, hold_time=1, hold_repeat=False, pin_factory=None)

Slide 22

Slide 22 text

4XJGUZ(1*0 w EFCPVDFػೳͳ͠ w ͳ͍ͳΒ࡞Ε͹ྑ͍

Slide 23

Slide 23 text

%J⒎ public class GPIO { + public var bounceTime: TimeInterval? - var intFuncFalling: ((GPIO) -> Void)? - var intFuncRaising: ((GPIO) -> Void)? - var intFuncChange: ((GPIO) -> Void)? + var intFalling: (func: ((GPIO) -> Void), lastCall: Date?)? + var intRaising: (func: ((GPIO) -> Void), lastCall: Date?)? + var intChange: (func: ((GPIO) -> Void), lastCall: Date?)? public func onRaising(_ closure: @escaping (GPIO) -> Void) { - intFuncRaising = closure + intRaising = (func: closure, lastCall: nil) if intThread == nil { intThread = makeInterruptThread() listening = true

Slide 24

Slide 24 text

func interrupt(type: inout (func: ((GPIO) -> Void), lastCall: Date?)?) { guard let itype = type else { return } if let interval = self.bounceTime, let lastCall = itype.lastCall, Date().timeIntervalSince(lastCall) < interval { return } itype.func(self) type?.lastCall = Date() }

Slide 25

Slide 25 text

while self.listening { let ready = poll(&pfd, 1, -1) if ready > -1 { … switch res { case “0": - self.intFuncFalling?(self) + self.interrupt(type: &(self.intFalling)) case “1": - self.intFuncRaising?(self) + self.interrupt(type: &(self.intRaising)) default: break } - self.intFuncChange?(self) + self.interrupt(type: &(self.intChange)) } }

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

υΩυΩɻɻɻ

Slide 29

Slide 29 text

ҰॠͰϚʔδ͞Εͨ

Slide 30

Slide 30 text

·ͱΊ w 3BTQCFSSZ1JͰ4XJGU͸௒؆୯ʹ࢝ΊΒΕΔʂ w 1VMM3FRVFTU͸ා͘ͳ͍ʂ w ͋͞͸͡ΊΑ͏ʂ

Slide 31

Slide 31 text

4XJGUͰ3BTQCFSSZ1JΛ੝Γ্͛·͠ΐ͏ʂ

Slide 32

Slide 32 text

͋Γ͕ͱ͏͍͟͝·ͨ͠