ラベル chapter5 の投稿を表示しています。 すべての投稿を表示
ラベル chapter5 の投稿を表示しています。 すべての投稿を表示

2008年7月4日金曜日

pong server

utano

第5章では1つのサーバーを介して
ピンポンゲームがプレイできるものを作ります。

今回の役割分担:

tmg:client1(3軸センサでシーソーインタラクションでピンポンする人)
stk:client2(感圧センサ×2で足踏みインタラクションでピンポンする人)
utn:server(サーバーのプログラムソースコード)

pong serverソースコード(Processing)

①サーバ用のPCを1台用意して、
 そのPCで上のソースコードをRunする。下のような画面が出ます。



②ピンポンしたい人(Client)は
 telnetでポート番号8080でサーバのIPアドレスへ接続。

☆サーバ(PC)のIPアドレスを調べるには
[ネットワーク接続]などからネットの接続状態を選べば出てくる。
 私は[ワイヤレス ネットワーク接続]を選んで[サポート]タブを出しました。
 
 
③するとこんな風になります。
 コマンドプロンプト側で"hi"と言ってくれます。
 Processing側では新しいClientが来た、と言い
 ピンポンフィールドにラケットが現れます。
 その入ってきたClientのIPもラケットの上に書いてあります。


④ちなみにコマンドプロンプト側でrを打つとラケットが右に、
 lを打つとラケットが左に移動します。xでサーバとの接続を中断します。

なので、キーボードだけで十分ピンポンが戦えます。
センサを使ってインタラクションでピンポンをするために
XPortでArduinoの値を送るところは次回。

2008年6月27日金曜日

p160までのarduino code

tmgです。
たまにはためになることを

今xportで、通信してピンポンをするシーソー作ってます。文字だけ見るとなんのこっちゃって感じですね。
p160までのコードです。エラーはないはず!
resetdeviceのくだりはまるっと無視しました。だってXportからそんなピンでてないんだもん…


----------------------

/*
pong cliant
Langage: Writing/Arduino

このプログラムはArduinoで、ネットワークにつながった
ピンポンのパドルをコントロールすることを可能にする

*/

//Lantronix deviceのステータスを定義する
#define disconnected 0
#define connected 1
#define connecting 2

//I/Oピンを定義する
#define connectButtonPin 2
#define rightLED 3
#define leftLED 4
#define connectionLED 5
#define connectButtonLED 6

int inByte= -1;
int status = disconnected;

byte connectButton = 0;
byte lastConnectButton = 0;

byte paddleMessage = 0;
byte connectMessage = 0;

void setup(){
pinMode(connectButtonPin,INPUT);
pinMode(rightLED,OUTPUT);
pinMode(leftLED,OUTPUT);
pinMode(connectionLED,OUTPUT);
pinMode(connectButtonLED,OUTPUT);

Serial.begin(9600);

}

void loop(){
readSensors();
setLeds();
stateCheck();
}

void readSensors(){
int leftThereshold = 500;//適宜
int rightThreshold = 420;//変えてね

int x = analogRead(0);
delay(10);

if (x > leftThereshold){
paddleMessage = 'l';
} else if (x > rightThreshold){
paddleMessage = 'r';
} else {
paddleMessage = 0;
}

connectButton = digitalRead(connectButtonPin);
connectMessage = 0;
if (connectButton == HIGH){
if (connectButton != lastConnectButton){
digitalWrite(connectButtonLED,HIGH);
connectMessage = 'x';
}
}
lastConnectButton = connectButton;
}

void setLeds(){
switch (paddleMessage){
case 'l':
digitalWrite(leftLED,HIGH);
digitalWrite(rightLED,LOW);
break;
case 'r':
digitalWrite(rightLED,HIGH);
digitalWrite(leftLED,LOW);
break;
case 0:
digitalWrite(leftLED,LOW);
digitalWrite(rightLED,LOW);
}

if (connectMessage !=0){
digitalWrite(connectButtonLED,HIGH);
}
else{
digitalWrite(connectButtonLED,LOW);
}

if (status == connected){
digitalWrite(connectionLED,HIGH);
}
else {
digitalWrite(connectionLED,LOW);
}
}

void stateCheck() {
switch (status){
case connected:
while (Serial.available() > 0){
if(Serial.read() == 'D'){
status = disconnected;
}
}
if (paddleMessage != 0) {
Serial.print(paddleMessage);
paddleMessage = 0;
}

if (connectMessage != 0){
Serial.print(connectMessage);
connectMessage = 0;
}
break;

case disconnected:
if (connectMessage !=0){
deviceConnect();
connectMessage = 0;
}
break;

case connecting:
if (Serial.available()){
inByte = Serial.read();
if (inByte == 'C'){
status = connected;
}
else{
deviceConnect();
}
}
break;
}
}

void deviceConnect() {
Serial.print("C192.168.0.182/50001\n\r");//←ここ自分のに変えてくださいね
status = connecting;
}

void blink(int howManyTimes){
for (int i=0; i< howManyTimes; i++) {
digitalWrite(connectButtonLED,HIGH);
delay(200);
digitalWrite(connectButtonLED,LOW);
delay(200);
}
}