第8回 シリアル通信(マルチバイト対応)
1.やってみよう
(1) 図1に示す実験回路を作りなさい。
図1.実験回路
(2) Arduinoのプログラミング環境に、つぎのプログラムを入力しなさい。
int x, r, high_byte, low_byte; void setup() { Serial.begin(9600); } void loop() { x = analogRead(0); if (Serial.available() >= 1) { r = Serial.read(); high_byte = (x & 0xFF00) >> 8; low_byte = x & 0x00FF; Serial.write(high_byte); Serial.write(low_byte); } delay(20); }
(3) 書き込みボタンを押して、Arduinoのプログラムを実行しなさい。
(4) Processingのプログラミング環境に、つぎのプログラムを入力しなさい。
import processing.serial.*; Serial serial; int x, s, high_byte, low_byte; void setup() { size(200, 150); frameRate(30); serial = new Serial(this, "COM1", 9600); s = 1; } void draw() { background(255, 255, 255); if (serial.available() >= 2) { high_byte = serial.read(); low_byte = serial.read(); x = (high_byte << 8) + low_byte; serial.write(s); } fill(0, 0, 255); textSize(28); textAlign(CENTER); text(x, 100, 75); } void mousePressed() { serial.write(s); }
(5) Runボタンを押して、Processingのプログラムを実行しなさい。このプログラムの実行画面でマウスを一度だけクリックするとデータのやり取りがはじまり、可変抵抗の値がウィンドウに表示されることを確認しなさい。
2.解説
シリアル通信は、一度にやり取りできるデータのサイズが1byte(=8bit)に制限されている。
Arduinoのアナログ入力は量子化精度が10bitになっており、データのサイズが1byteよりも大きいことから、シリアル通信では一度にやり取りすることができない。
10bitのデータは、byte単位で分解すると2byte(=16bit)のデータとして表現できるため、シリアル通信によってArduinoのアナログ入力のデータをやり取りするには、図2に示すように、1byteずつ2回に分割してやり取りする必要がある。
図2.シリアル通信による2byteのデータのやり取り
3.課題
(1) Arduinoに可変抵抗をひとつ接続しなさい。可変抵抗の値を円の中心のx座標に対応させ、ウィンドウに描画した円を可変抵抗を使って操作するプログラムを作りなさい。
(2) Arduinoに可変抵抗をふたつ接続しなさい。可変抵抗の値を円の中心のx座標とy座標に対応させ、ウィンドウに描画した円を可変抵抗を使って操作するプログラムを作りなさい。
(余力のある人は) Arduinoワイヤレスプロトシールドを使って、(2)で作成したプログラムをワイヤレス通信で動作させなさい。
4.ヒント
Arduinoワイヤレスプロトシールドを使って、プログラムをワイヤレス通信で動作させる手順は以下のとおりである。
(1) http://www.ftdichip.com/Drivers/VCP.htmから、ドライバをインストールしなさい。Windowsの場合はsetup executableをクリックし、ダウンロードしたファイルを解凍した後、インストーラをダブルクリックすること。
(2) PCからUSBケーブルをはずし、かわりにXBee USBアダプタを接続しなさい。Arduinoのプログラミング環境から、このXBee USBアダプタのシリアルポートのID(COM番号)を確認しなさい。
(3) Arduinoからジャンパ線をはずし、Arduinoワイヤレスプロトシールドを接続した後、その上にジャンパ線を接続してあらためて回路を作成しなさい。
(4) Arduinoに12VのACアダプタまたは9Vの電池を接続しなさい。
(5) さきほど確認したXBee USBアダプタのシリアルポートのID(COM番号)にもとづいて、Processingのプログラムを修正しなさい。Runボタンを押して、Processingのプログラムを実行しなさい。
なお、Arduinoのプログラムを修正する場合は、その都度、Arduinoワイヤレスプロトシールドをはずし、USBケーブルを接続し直してから行う必要があることに注意すること。
Last Modified: June 27 12:00 JST 2017 by Naofumi Aoki
E-mail: aoki@ime.ist.hokudai.ac.jp