亀田○毅 (Processing Report.2)
2015/11/09
Processingに慣れることをテーマに作成した問題作「黒板五郎」。あれから10か月。懸案事項となっていたProcessingとArduinoのリンクにお正月休みを利用して挑戦することにした。 今回のテーマはとりあえず「1種類」のデータをArduino→Processingに送ること。それでもって某ボクシングジムでのトレーニングのように飛んでくるピンポン球をすいすいと避ける所謂ク○ゲーを製作。
・参考にさせていただいたページ・
・建築発明工作ゼミ2008 ArduinoとProcessingをつなぐ方法のやさしい解説 なるほど。シリアル通信を使うのですね。
・processing学習ノート 配列についてお勉強
・wise9 あたり判定等々に関して解説が詳しい
・wikipedia”NullPointerException” 所謂ぬるぽ
・回路とスケッチ・ 参考ページに倣い、センサーはとりあえず光センサー(Cds)を選択。図。
by Fritzing(Free)
スケッチはArduinoとProcessingそれぞれについて作成する必要あり。 ちなみにArduinoはver1.0.3を使用。なんだかんだ嬉しい日本語対応であります。 Arduino側のスケッチ(一部改)
int val = 0; int iPin = A0; int oPin = 13; void setup() { Serial.begin(9600); pinMode(oPin, OUTPUT); } void loop() { val = analogRead(iPin)/4; Serial.write(val); if(val<150){ digitalWrite(oPin, LOW); }else{ digitalWrite(oPin, HIGH); } delay(200); }
その通り。The Strange Storage著者様のもの参考…というかほとんどそのままであります。 一方でProcessing側のスケッチ。(ver1.5で作成。)
//シリアルライブラリを取り入れる import processing.serial.*; //myPort(任意名)というインスタンスを用意 Serial myPort; int y; int x; int portIndex = 0; float s1 = 0; float dis = 0; int[] ax ={0,0,0}; int[] ay ={0,0,0}; int hiscore =0; void setup(){ //画面サイズ size(512,256); //シリアルポートの設定 if(portIndex==-1){ //portIndexを変更していないときに実行される for(int i=0, l=Serial.list().length ; i < l; i++){ println(i+" : "+Serial.list()[i]); } exit(); }else{ myPort = new Serial(this, Serial.list()[portIndex], 9600); for(int i =0; i < 3 ;i++){ ay[i] = int(random(255)); } } } void draw(){ background(0,50,0); //背景の設定 fill(255,255,0); //ピンポン玉の描画 for (int i = 0; i < 3; i++){ ax[i] = ax[i]+i+2; if(512 < ax[i]){ ax[i] = 0; ay[i] = int(random(255)); } ellipse(512-ax[i],ay[i],20,20); } fill(255); //円の描画 text(y, 169, 255-y); ellipse(100,255-y,50,50); //あたり判定 for(int i = 0; i < 3; i++){ dis = sqrt(pow(((512-ax[i])-100),2)+pow((ay[i]-(255-y)),2)); if(30 > dis){ fill(255,0,0); text("score: "+int(s1), 0, 240); if(hiscore < int(s1)){ hiscore = int(s1); } delay(2000); s1=0; fill(255,255,0); for (int j = 0; j < 3; j++){ ax[j] = 0; ellipse(512-ax[j],ay[j],20,20); } } s1 = s1+0.1; text("score: "+int(s1), 0, 240); text("Hi-score: "+ hiscore, 400, 240); } } void serialEvent(Serial p){ y=myPort.read(); y=255-y; }
・トレーニング風景・
光センサーを指で遮ることで、暗くなると下方に白い○が動き、右から流れてくるピンポン球を避けます。 操作性は極めて劣悪+たまに当たっていないのに当たったことになる。そのあたりは、世界チャンピオンを目指しての精神修行だと思えばOK。 …とにかく、「1種類」のデータをArduino→Processingに送るという目標はクリア。ということにして。
・おまけ・
ちょっと球をふやしつつマウスで操作できるようにしたバージョンがこちらで遊べます。 (注:光センサー版よりは楽しいですが、やはりク○ゲーです。)
作者のハイスコア。これを超えたあなたは暇だ!
・これからの宿題を備忘録・
・複数のデータをArduinoに送る。
・Processing側からArduinoを操る。
・Androidとのリンク