別棟備忘録4

*

亀田○毅 (Processing Report.2)

      2015/11/09

Processingに慣れることをテーマに作成した問題作「黒板五郎」。あれから10か月。懸案事項となっていたProcessingとArduinoのリンクにお正月休みを利用して挑戦することにした。 今回のテーマはとりあえず「1種類」のデータをArduino→Processingに送ること。それでもって某ボクシングジムでのトレーニングのように飛んでくるピンポン球をすいすいと避ける所謂ク○ゲーを製作。

・参考にさせていただいたページ・

・The Strange Storage

・建築発明工作ゼミ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とのリンク

 - Arduino+Processing