2012年11月15日木曜日

ProcessingからArduinoへ通信2

前回に引き続き、ProcessingからArduinoへの通信の続きです。
前回は、Processing側からArduinoへ送信する処理を作りました。
今回は、Arduino側の受信の処理をマスターします。



Processing側から送信された信号をArduinoで受信し、その受信した信号に応じた処理を行います。

Arduino側の回路は、おなじみのLED表示の回路図です。
まず基本形をマスターしてから、応用していきます。
念のため、回路図の説明です。
Arduinoの11番ピンがLEDと接続していますが、大きな電流が流れることを防止するために、抵抗(220Ω)を入れています。LEDのもう片方の足は、ArduinoのGNDへ落としています。

ここからが、本題のProcessingからの信号を受信するためのArduinoのスケッチです。
スケッチ例を見てみましょう。

void setup() {
  pinMode(11, OUTPUT);
  Serial.begin(9600);
}

void loop(){
  if(Serial.available()>0){
    if(Serial.read()==1){
      digitalWrite(11, HIGH);
    }else{
      digitalWrite(11, LOW);
    }
  }
}

pinMode(11, OUTPUT); ・・・ Arduinoの11番ピンをデジタル出力モードにするための命令です。
Serial.begin(9600);・・・ この命令が重要です。
  シリアル通信の速度を指定います。もちろん、Processing側と同じ値である必要があります。
  なぜかと言えば、送る側と受ける側が同じ速度で信号のやり取りする必要があるからです。
  送信と受信がそれぞれ違う速度で信号をやり取りしたら、受け取れない信号が出てしまうからです。

そして、受信するための命令が、void loop()内に記載されています。
Serial.available()・・・シリアル通信の受信データの個数を返す命令です。
  if文で、0と比較しているのは、0より大きければ、受信データがあることを示しています。

Serial.read()・・・シリアル通信の受信データが1なのか、1以外なのかをif文で条件分岐しています。
受信したデータが1であれば、LEDを点灯する為に、 digitalWrite命令で11番ピンをHighにします。
受信したデータが1以外、Processing側では0を送った場合、digitalWrite命令で11番ピンをLowにします。

これが、Processingからデータを送信し、Arduinoで データを受信する基本形です。



・Processingをはじめよう
・Processing アニメーション
・楽しく学ぶコンピュテーショナルデザイン





0 件のコメント:

コメントを投稿