Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Touchéの仕組みを理解 - ProcessingとArduinoの連携
Search
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.6k
TumblrでWebサイトを作成
tado
0
730
bmaw14 第2回: Touchéセンサーを使う1 Touchéセンサーを作成する
tado
0
2.2k
Webサーバーの準備 - Github PagesでWebサイト開設
tado
0
1.5k
Other Decks in Technology
See All in Technology
DMM.com 購入改善推進チーム におけるCodeRabbitを用いた レビューフロー改善の一例
ysknsid25
2
670
ガバナンスの「ちょうどいい落とし所」を探れ!開発スピードを妨げない運用判断の勘所 / SRE NEXT 2026
genda
1
260
AIコード生成×サプライチェーン攻撃 — PHPが直面する“二重の信頼問題
shinyasaita
0
220
Claude Code公式skillで 自分の仕事を少しずつ手放そう!(Claude Code開発ノウハウ大公開スペシャル by クラスメソッド)
kaym
1
500
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.4k
凡エンジニアがこの先生きのこるためには。〜TypeScript完全に理解したい〜
alchemy1115
2
310
カードゲーム作りが教えてくれた プロダクトオーナーシップ
moritamasami
0
110
SoccerMaster: A Vision Foundation Model for Soccer Understanding
kzykmyzw
0
150
Amplify Gen2でbackend.tsにCDKを定義する/しない事によるCDKの挙動の違いとユースケース
smt7174
1
430
ruby.wasmとPicoRuby.wasmに対応した仮想DOMライブラリを作ってる話 #kaigieffect_kaigi
sue445
PRO
0
150
知らん間に、回ってる
ming_ayami
0
740
SRE Next 2026 何でも屋からの脱却
bto
0
1k
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
900
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
260
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
550
Leo the Paperboy
mayatellez
8
1.9k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
390
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
980
Designing Experiences People Love
moore
143
24k
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ÉͷϓϩάϥϜɺͲͪΒͷํ๏͔ʁ ‣ ʮ࿈ܞγϦΞϧ௨৴ͷϓϩάϥϜΛࣗ࡞ʯͷԠ༻ ‣ ࣮ࡍʹϓϩάϥϜΛιʔείʔυΛݟͳ͕Βղੳͯ͠ΈΔ