2010年5月15日土曜日

Scratchに外から値を送ってみた

動機
1: これ(MTM05 - こどもプログラミングサークル スクラッチ)をみてScratchとArduinoの連携を知る.
2: これ(Scratch+Arduino)でやり方と動作を確認.とりあえず自分でもできた.
3: どうやってやっているのか中身を確認.とググるなどで,picoboardを知る.
4: 自作はできないのかなーとおもっていたらこれ(YouTube - Scratch and LEGO NXT)を見つける.
5: これで42001ポートで通信できることを知る.


やってみる
コード(Port42001.java):

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;

public class Port42001 {
public static void main(String[] args) {
String ip = "127.0.0.1";
int port = 42001;
try {
Socket socket = new Socket(ip, port);
PrintStream out = new PrintStream(socket.getOutputStream());
BufferedReader systemin = new BufferedReader(new InputStreamReader(
System.in));
String line;
System.out.println("'q' is 'quit'.");

while (true) {
System.out.print(">");
line = systemin.readLine();
sendtoscratch(out, "sensor-update \"Scratch-Value0\" " + line);
if (line.equals("q")) {
break;
}
}
systemin.close();
out.close();
socket.close();
} catch (IOException e) {
System.out.println("Can not connect to the server (" + ip + ") .");
System.exit(1);
}
}

static void sendtoscratch(PrintStream out, String dataOut) {
byte[] sizeBytes = { 0, 0, 0, 0 };
sizeBytes[3] = (byte) (dataOut.length());
for (int i = 0; i < 4; i++) {
out.write(sizeBytes[i]);
}
out.print(dataOut);
}
}

もちろんJavaである必要はない


実行
1: Scratchで'遠隔地センサを有効にする'をする.
1.1: '調べる'にする.

1.2: '〜センサーの値'でコンテクストメニューを出し,.'遠隔地センサを有効にする'を選ぶ.


2: Java実行
2.1: とりあえず'11'とか送ってみる

2.2: 送信したセンサ名が選択可能になる

2.3: 選択して左側チェックボックスにチェックを入れる.

2.4: 画面に表示される


2.5: 空白がなければ文字列もいけた

0 件のコメント: