Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Touchéの仕組みを理解 - ProcessingとArduinoの連携
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Atsushi Tadokoro
June 16, 2014
Technology
2.4k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Touchéの仕組みを理解 - ProcessingとArduinoの連携
Atsushi Tadokoro
June 16, 2014
More Decks by Atsushi Tadokoro
See All by Atsushi Tadokoro
デザイン言語総合講座 - クリエイティブ・コーディング
tado
0
2.8k
Tumblrを使う4 - Webサイトを構成する、固定ページとタグ
tado
0
1.8k
Tumblrを使う3- カスタムHTMLテーマの作成
tado
0
470
Processing.jsによるデータの可視化と生成的表現
tado
1
1.9k
Tumblrを使う2 - テーマをカスタマイズする
tado
0
380
Github Pagesで作品を公開、Automatic Page Generatorでサイトを生成
tado
0
1.7k
TumblrでWebサイトを作成
tado
0
730
bmaw14 第2回: Touchéセンサーを使う1 Touchéセンサーを作成する
tado
0
2.3k
Webサーバーの準備 - Github PagesでWebサイト開設
tado
0
1.6k
Other Decks in Technology
See All in Technology
今こそ知りたいAmplifyGen2
mkdev10
2
160
1万名の社員が使う認証基盤で どう信頼性を担保するか?
kairim0
0
220
AI時代だからこそ推したい!Gitコマンド再入門
munakata
0
160
Execution in the Kingdom of Agents: Reflections on Abstraction and Complexity
bcantrill
0
890
購入ドメインでの課題と取り組み
ykagano
0
150
全人類(ほぼ)AWS Organizations の上でAWSを利用している、その世界を知る話
htan
1
130
スキルを作る、その前に!複数人で使われるスキルを 作るためのプロセス
junkifurukawa
2
370
MCPゲートウェイを作って運用してわかったこと — Agent時代の権限管理の現在地
mtpooh
10
3.3k
分析の民主化を支えるメタデータ整備の実践
kakehashi
PRO
4
1.2k
go-sqletch
moznion
0
120
AI 時代の Azure エンジニアリング ~ 私たちは何を磨き、何を任せるのか ~
chack411
1
550
組み立てて楽しむ AWS Blocks 入門
kmiya84377
0
220
Featured
See All Featured
Joys of Absence: A Defence of Solitary Play
codingconduct
1
540
We Have a Design System, Now What?
morganepeng
55
8.4k
Making the Leap to Tech Lead
cromwellryan
135
10k
Site-Speed That Sticks
csswizardry
13
1.6k
HDC tutorial
michielstock
2
950
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
280
Technical Leadership for Architectural Decision Making
baasie
3
600
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
66k
WENDY [Excerpt]
tessaabrams
14
40k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
620
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Transcript
CNBXୈճ 5PVDIÉͷΈΛཧղ 1SPDFTTJOHͱ"SEVJOPͷ࿈ܞ ݄ ଟຎඒज़େֶใσβΠϯֶՊϝσΟΞܳज़ίʔε ాॴ३
ࠓͷ༰ ‣ 5PVDIÉͷதΛཧղ͢Δ ‣ ࠓճɺओʹιϑτΣΞଆͷΈΛཧղ ‣ 1SPDFTTJOHͱ"SEVJOPͲͷΑ͏ʹ࿈ܞ͍ͯ͠Δͷ͔ʁ
1SPDFTTJOHͱ"SEVJOPͷ࿈ܞ
"SEVJOPͱ1SPDFTTJOHͷ࿈ܞ ‣ 5PVDIÉͷ͓͓·͔ͳਤղ 5PVDIÉ "SEVJOP ෦ʹϓϩάϥϜΛଂ 1SPDFTTJOH ࿈ܞ 64#
"SEVJOPͱ1SPDFTTJOHͷ࿈ܞ ‣ 1SPDFTTJOHͱ"SEVJOPΛ࿈ܞ͢Δํ๏େ͖͚ͯͭ͘ ! ‣ طଘͷϥΠϒϥϦΛ༻͢Δํ๏ ‣ "SEVJOPଆʹ'JSNBUBϥΠϒϥϦ ‣ 1SPDFTTJOHଆʹ"SEVJOPϥΠϒϥϦ
‣ 1SPDFTTJOH͔Β"SEVJOPͷೖग़ྗΛૢ࡞͢Δ ! ‣ γϦΞϧ௨৴Λࣗ࡞͢Δํ๏ ‣ ֎෦ϥΠϒϥϦ༻͠ͳ͍ ‣ "SEVJOPͱ1SPDFTTJOHํͰɺγϦΞϧೖग़ྗͷϓϩάϥϛϯά
"SEVJOPͱ1SPDFTTJOHͷ࿈ܞ ‣ 1SPDFTTJOHͱ"SEVJOPΛ࿈ܞ͢Δํ๏େ͖͚ͯͭ͘ ! ‣ طଘͷϥΠϒϥϦΛ༻͢Δํ๏ ‣ "SEVJOPଆʹ'JSNBUBϥΠϒϥϦ ‣ 1SPDFTTJOHଆʹ"SEVJOPϥΠϒϥϦ
‣ 1SPDFTTJOH͔Β"SEVJOPͷೖग़ྗΛૢ࡞͢Δ ! ‣ γϦΞϧ௨৴Λࣗ࡞͢Δํ๏ ‣ ֎෦ϥΠϒϥϦ༻͠ͳ͍ ‣ "SEVJOPͱ1SPDFTTJOHํͰɺγϦΞϧೖग़ྗͷϓϩάϥϛϯά 5PVDIÉͪ͜Βͷํ๏
"SEVJOPͱ1SPDFTTJOHͷ࿈ܞ ‣ ͭͷํ๏Λॱ൪ʹհʂ
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ ͜ͷํ๏ͷΠϝʔδ ‣ "SEVJOPʹ'JSNBUBΛɺ1SPDFTTJOHʹ"SEVJOPϥΠϒϥϦΛɺͦΕͧΕΠϯε τʔϧ͢Δ
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ ·ͣɺ1SPDFTTJOHଆͷ४උ ‣ 1SPDFTTJOHΛىಈ͠ɺ4LFUDI*NQPSUMJCSBSZʜ"EEMJCSBSZʜ
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ -JCSBSZ.BOBHFSͷݕࡧ૭ʹʮ"SEVJOPʯΛೖྗ͠ݕࡧ ‣ "SEVJOP 'JSNBUB ͕ग़ͯ͘ΔͷͰɺબͯ͠ʮ*OTUBMMʯϘλϯΛԡ͢ ‣ 1SPDFTTJOHଆͷ४උྃʂ
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ ࣍ʹɺ"SEVJOPଆͷ४උ ‣ "SEVJOPʹɺ'JSNBUBͱ͍͏֎෦ͱͷίϛϡχέʔγϣϯͷͨΊͷ൚༻ιϑτΣ ΞΛೖΕΔ ‣ 'JSNBUBIUUQXXXpSNBUBPSH
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ "SEVJOPͰ'JSNBUBΛѻ͏ͨΊͷιϑτΣΞɺ"SEVJOPʹ࠷ॳ͔ΒೖͬͯΔ ‣ 0QFOMJCSBSJFT'JSNBUB4UBOEBSE'JSNBUBΛબ
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ 'JSNBUB͕ਖ਼ৗʹಈ࡞͢Δ͔࣮ݧ ‣ 'JSBNBUBͷςετ༻ϓϩάϥϜΛΠϯετʔϧ ‣ IUUQXXXpSNBUBPSHXJLJ.BJO@1BHF'JSNBUB@5FTU@1SPHSBN ! ‣ ༻͍ͯ͠Δ04ʹԠͯ͡બɺ.BD049ͳΒ
‣ IUUQXXXQKSDDPNUFFOTZpSNBUB@UFTUpSNBUB@UFTUENH
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ pSNBUB@UFTUBQQΛىಈ ‣ ϝχϡʔ͔Βɺ1PSUEFWVTCNPEFNʜΛબ ‣ %JUJUBM"OBMPHͷೖग़ྗ͕ҰཡͰ͖Δ ‣ ͜ΕͰɺ"SEVJOPଆͷ४උྃʂ
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ ࣍ʹɺ1SPDFTTJOHଆͰ"SEVJOPΛ༻͍ͯ͠Δ1PSU൪߸ΛௐΔ ‣ "SEVJOPͱ1SPDFTTJOHʹ64#έʔϒϧΛ༻͢Δ ‣ 64#6OJWFSTBM4FSJBM#VT൚༻తγϦΞϧόε ‣ ํͰ64#Λ༻͢Δʹɺਖ਼͍͠1PSU൪߸ʹଓ͢Δඞཁ͕͋Δ ‣
ిݯίϯηϯτʹܨ͙Α͏ͳΠϝʔδ
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ 1SPDFTTJOHଆͰ"SEVJOPΛ༻͍ͯ͠Δ1PSU൪߸ΛௐΔϓϩάϥϜ import processing.serial.*; import cc.arduino.*; ! println(Arduino.list());
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ ίϯιʔϧʹσόΠεͷҰཡ͕ग़ྗ͞ΕΔͣ ‣ EFWDVVTCNPEFNʜ͕͔Β͑ͯԿ൪͔Λ୳͢ ‣ ྫ /dev/cu.Bluetooth-Incoming-Port /dev/cu.Bluetooth-Modem /dev/cu.usbmodemfd131
/dev/tty.Bluetooth-Incoming-Port /dev/tty.Bluetooth-Modem /dev/tty.usbmodemfd131
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ ίϯιʔϧʹσόΠεͷҰཡ͕ग़ྗ͞ΕΔͣ ‣ EFWDVVTCNPEFNʜ͕͔Β͑ͯԿ൪͔Λ୳͢ ‣ ྫ͜ͷྫͩͱ൪ /dev/cu.Bluetooth-Incoming-Port /dev/cu.Bluetooth-Modem /dev/cu.usbmodemfd131
/dev/tty.Bluetooth-Incoming-Port /dev/tty.Bluetooth-Modem /dev/tty.usbmodemfd131 0 1 2 3 4 5
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ ͍Α͍Αɺ࿈ܞΛࢼ͠·͢ ‣ ҎԼͷΑ͏ʹɺ"SEVJOPͷ%JHJUBMʹɺ-&%ΛͱΓ͚ͭ
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ 1SPDFTTJOHଆͰҎԼͷίʔυΛ࡞ import processing.serial.*; import cc.arduino.*; ! Arduino arduino;
int ledPin = 13; int portNum = 2; color bgColor = color(0); ! void setup() { size(400, 200); arduino = new Arduino(this, Arduino.list()[portNum], 57600); arduino.pinMode(ledPin, Arduino.OUTPUT); } ! void draw() { background(bgColor); }
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ 1SPDFTTJOHଆͰҎԼͷίʔυΛ࡞ ! void mousePressed() { arduino.digitalWrite(ledPin, Arduino.HIGH); bgColor
= color(255,0,0); } ! void mouseReleased() { arduino.digitalWrite(ledPin, Arduino.LOW); bgColor = color(0); }
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ 1SPDFTTJOHͷը໘ΛΫϦοΫ͢Δͱɺ-&%͕౮͢Δͣʂ .PVTF$MJDL ౮ʂ
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ ࣍ʹɺ"SEVJOPͷೖྗΛ1SPDFTTJOHʹૹͬͯΈΔ ‣ Մม߅ʢݻఆ߅ʣͷΛૹͬͯΈΔʢѻ͍қ͍ͷͰʣ
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ ઢҎԼͷΑ͏ʹ
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ ·ͣɺ߅ΛจࣈͰදࣔ1SPDFTTJOHଆϓϩάϥϜ import processing.serial.*; import cc.arduino.*; Arduino arduino; int
input = 0; int portNum = 2; ! void setup() { size(400,200); arduino = new Arduino(this, Arduino.list()[portNum], 57600); } ! void draw() { background(0); fill(255); int analog = arduino.analogRead(input); text("input = " + analog, 10, 20); }
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ Մม߅ͷπϚϛΛճ͢ͱɺʙͷஈ֊ͰมԽ͢Δͣʂ
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ ྫ͑ɺ߅Ͱԁͷେ͖͞ΛมԽͤͯ͞ΈΔ import processing.serial.*; import cc.arduino.*; Arduino arduino; int
input = 0; int portNum = 2; ! void setup() { size(800,600); arduino = new Arduino(this, Arduino.list()[portNum], 57600); } ! void draw() { background(0); fill(31, 127, 255); int analog = arduino.analogRead(input); float diameter = map(analog, 0, 1023, 0, height); ellipse(width/2, height/2, diameter, diameter); fill(255); text("input = " + analog, 10, 20); }
࿈ܞ"SEVJOPϥΠϒϥϦͱ'JSNBUBΛ༻͢Δํ๏ ‣ Մม߅ͷπϚϛΛճ͢ͱɺԁͷେ͖͕͞มԽ͢Δʂ
࿈ܞγϦΞϧ௨৴ͷϓϩάϥϜΛࣗ࡞
࿈ܞγϦΞϧ௨৴ͷϓϩάϥϜΛࣗ࡞ ‣ "SEVJOPɺ1SPDFTTJOHํͰγϦΞϧ௨৴ͷͨΊͷίʔυΛࣗ࡞ ‣ 'JSNBUBΛ༻͢Δํ๏ʹൺ͖ͯΊࡉ͔͘ޮతͳ௨৴͕ՄೳͱͳΔ ! ‣ ࠓճͷγϦΞϧૹड৴ʹʮϋϯυγΣΠΩϯά IBOETIBLJOH ʯͱ͍͏ख๏Λ༻
‣ ؒͷ௨৴࿏Λཱ֬ͨ͠ޙɺຊ֨తʹ௨৴Λߦ͏લʹࣄલͷΓऔΓΛࣗಈతʹߦ͏ ‣ ϋϯυγΣΠΩϯάͨ͠ޙɺ௨ৗͷใͷసૹΛߦ͏
࿈ܞγϦΞϧ௨৴ͷϓϩάϥϜΛࣗ࡞ ‣ "SEVJOPɺ1SPDFTTJOHɺϋϯυγΣΠΩϯάΛਤղ
࿈ܞγϦΞϧ௨৴ͷϓϩάϥϜΛࣗ࡞ ‣ Մม߅ΛͭՃɺ"OBMPHʹ
࿈ܞγϦΞϧ௨৴ͷϓϩάϥϜΛࣗ࡞ ‣ "SEVJOPଆϓϩάϥϜ int firstSensor = 0; int secondSensor =
0; int inByte = 0; ! void setup(){ Serial.begin(9600); establishContact(); } ! void loop(){ if (Serial.available() > 0) { inByte = Serial.read(); firstSensor = analogRead(0)/4; delay(10); secondSensor = analogRead(1)/4; Serial.write(firstSensor); Serial.write(secondSensor); } }
࿈ܞγϦΞϧ௨৴ͷϓϩάϥϜΛࣗ࡞ ‣ "SEVJOPଆϓϩάϥϜ ! void establishContact() { while (Serial.available() <=
0) { Serial.print('A'); delay(300); } }
࿈ܞγϦΞϧ௨৴ͷϓϩάϥϜΛࣗ࡞ ‣ 1SPDFTTJOHଆϓϩάϥϜ import processing.serial.*; ! Serial myPort; int[] serialInArray
= new int[2]; int serialCount = 0; PVector pos; boolean firstContact = false; ! void setup() { size(800, 600); noStroke(); pos = new PVector(width/2, height/2); println(Serial.list()); String portName = Serial.list()[5]; myPort = new Serial(this, portName, 9600); } ! void draw() { background(0); fill(31, 127, 255); ellipse(pos.x, pos.y, 20, 20); }
࿈ܞγϦΞϧ௨৴ͷϓϩάϥϜΛࣗ࡞ ‣ 1SPDFTTJOHଆϓϩάϥϜ void serialEvent(Serial myPort) { int inByte =
myPort.read(); if (firstContact == false) { if (inByte == 'A') { myPort.clear(); firstContact = true; myPort.write('A'); } } else { serialInArray[serialCount] = inByte; serialCount++; if (serialCount > 1) { pos.x = map(serialInArray[0], 0, 255, 0, width); pos.y = map(serialInArray[1], 0, 255, 0, height); println(pos.x + "\t" + pos.y); myPort.write('A'); serialCount = 0; } } }
࿈ܞγϦΞϧ௨৴ͷϓϩάϥϜΛࣗ࡞ ‣ ͭͷՄม߅Ͱɺԁ͕ಈ͖·ΘΔʂ
5PVDIÉͷαϯϓϧϓϩάϥϜΛղ
5PVDIÉͷαϯϓϧϓϩάϥϜΛղ ‣ 5PVDIÉͷϓϩάϥϜɺͲͪΒͷํ๏͔ʁ ‣ ʮ࿈ܞγϦΞϧ௨৴ͷϓϩάϥϜΛࣗ࡞ʯͷԠ༻ ‣ ࣮ࡍʹϓϩάϥϜΛιʔείʔυΛݟͳ͕Βղੳͯ͠ΈΔ