目次

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

2009年2月16日月曜日

リチウムイオン充電池 LI-355SP を使ってみた



このリチウムイオン充電池 LI-355SP かなり小さくていい感じ!

3.7vということで、このまま使ってしまってもWiPortは大丈夫なんじゃないかと思いつつも、三端子レギュレーターを通して置きました。LEDも鮮やかに光り、大変満足です。

しかし、昨日はこれが出来なかった。。。専用充電器というのが、隣に並べて千石で売られていたので購入した所、とてもファジーな代物でした。
充電が完了したら、LEDの色が赤から緑にかわる、と書いてあり、そのLEDの色に従うとまず充電は完了していません。
LEDの色は無視して、だいたい、1時間〜2時間くらい充電してあげるといいと思います。

値段は1つ3000円と高価ではありますが、乾電池よりも全然小さくて軽いので、電子工作にはうってつけだと思います。

2009年2月12日木曜日

Rails + フィジカルコンピューティング ~WiPortやXportを使って、マイコンとrailsを連携~

前回のblogでも長々とMuliusの制作の上でたどった手順を書きましたが、もうちょっと簡潔にまとめて置いて、他のrailsプロジェクトと連携させるときや、Arduinoやその他自作のマイコンと連携させるときの為に役立てようと思います。

手順:
[1]Xport/WiPortの設定
[2]XPort/WiPortをシリアル接続で、TeraTerm等から操作する。
[3]Proce55ingから、シリアル経由でHTTPリクエストを行う。
[4]マイコンにリクエスト用のコードを書き込む。

こんな手順でいけば大丈夫かと思われます。

[1]Xport/WiPortの設定
このblogでもこちらこちらでちょこっと書いてあり、もっと詳しく解説しているサイトもあるので、詳しくは書きませんが注意すべき点があります。ActiveConnectionの設定を、Manual Connectionにしておく事です。

「TeraTermでリクエスト文を打っても、一行にCが出てこない」という場合は、ここの設定が原因の場合が多いようです。
[2]XPort/WiPortをシリアル接続で、TeraTerm等から操作する。
railsプロジェクトの場合、以下のようなリクエスト文になると思われます。
C192.168.0.111:3000
GET /main HTTP/1.1<^M^J>
HOST: 192.168.0.111<^M^J><^M^J>

Winでは\を¥に変える場合もあるようです。確かめてください。
TeraTermの設定で変えられるらしいのですが、Cでサーバーに接続した後はCtrl+M/Ctrl+Jが改行/復帰(復帰=キャリッジリターン:CR/改行=ラインフィード:LF)になります。

キャリッジリターン:CR/ラインフィード:LFは、とっても重要です!


どこに使ったか、何回使ったかを必ず確認しましょう。CRのみの場合や、LFのみの場合、CRLF両方の場合があります。1つのリクエストの中で、CRのみを使う箇所と、CRLFを使う箇所がある場合もあります。1つでも違うと、リクエストは通りません。きちんと把握しましょう。
[3]Proce55ingから、シリアル経由でHTTPリクエストを行う。
お世話になりっぱなしのMakingThingsTalkのサイトに載っているプログラム(Lantronix serial-to-ethernet HTTP request tester)を使いましょう。
CRとLFに注意して、
myPort.write("C192.168.0.111:3000\n");//ここはCRのみ

myPort.write("GET /main HTTP/1.1\r\n");//こちらはCRLFを一回
myPort.write("HOST: 192.168.0.111\r\n\r\n");//CRLFを二回

Railsの場合、接続は復帰=CR一回になります。改行=LFを足すと失敗します。接続した後は、CRLFにしないとまた失敗します。
注意しましょう。
ここで上手くいかなければ、TeraTermからやり直して、もう一度確認です。
このときCR/LFだけでなく、記号(:や/)にも注意してください。:を/に変えたり、\を¥にしたりなど。
成功したら、いよいよマイコンからHTTPリクエスト文をXPort/WiPortに送ります。
[4]マイコンにリクエスト用のコードを書き込む。

Proce55ingで書いたものに忠実に、リクエスト文を出力するようにする。

これを守りましょう。どこから失敗するようになったか分からなくなってしまいますよ。以前のblogにも書いたので、かんたんに説明します。
serialSend("c192.168.0.111:3000" + "\n");
serialSend("GET /main HTTP/1.1\r\n" + "\r\n");
serialSend("HOST: 192.168.0.111"+ "\r\n\r\n");

ほとんどproce55ingで使ったリクエスト文のまんまです。プリント用のメソッド名がそれぞれのマイコンによって違うので合わせてください。未確認ですが、Arduinoだったらこんな感じ?
Serial.print("c192.168.0.111:3000" + "\n");
Serial.print("GET /main HTTP/1.1\r\n" + "\r\n");
Serial.print("HOST: 192.168.0.111"+ "\r\n\r\n");

マイコンによっては、アスキー表のコード番号からCRとLFを引っ張ってくる必要があったりもします。とりあえずは、Proce55ingで上手くいったコードをそのまま流用してからです。

こちらも参考にしながら、Rails + Xport/Wiport + マイコン によるフィジカルコンピューティングライフを楽しんでみてください。

moxaに書き込むコード 09' その[2]

最終的にmoxaに書き込んだコードの全文です。
//for A

serialInit(9600);
pinMode(0, true);
digitalWrite(0,true);
ain1 = analogRead(1);
radioInit(0xDDDD, 0, 11, 2);

var checkb= 1;
var checkc= 1;
var checkd= 1;
var CR = String.fromCharCode(13);
var CRLF = String.fromCharCode(13, 10);
var c = "C192.168.0.111:3000";
var h = "HOST: 192.168.0.111";
var con = "Content-Type: application/x-wwwform-urlencoded";
var p1 = "POST /encounter/ab HTTP/1.1";
var p2 = "POST /encounter/ac HTTP/1.1";
var p3 = "POST /encounter/ad HTTP/1.1";



while(true) {

function onRadioReceive(seq,src,pan,data,rss) {
if (data == 'b' && checkb == 1){
serialSend(c + CR);
serialSend(p1 + CRLF);
serialSend(h + CRLF);
serialSend(con + CRLF + CRLF);
checkb = 0;
checkc = 1;
checkd = 1;
}else if(data == 'c' && checkc == 1){
serialSend(c + CRLF);
serialSend(p2 + CRLF);
serialSend(h + CRLF);
serialSend(con + CRLF + CRLF);
checkb = 1;
checkc = 0;
checkd = 1;

}else if(data == 'd' && checkd == 1){
serialSend(c + CRLF);
serialSend(p3 + CRLF);
serialSend(h + CRLF);
serialSend(con + CRLF + CRLF);
checka = 1;
checkb = 1;
checkd = 0;

}else{
}

}
radioSend(0xFFFF, 'a');
}


//for B

serialInit(9600);
pinMode(0, true);
digitalWrite(0,true);
ain1 = analogRead(1);
radioInit(0xDDDD, 0, 11, 2);

var checka= 1;
var checkc= 1;
var checkd= 1;
var CR = String.fromCharCode(13);
var CRLF = String.fromCharCode(13, 10);
var c = "C192.168.0.111:3000";
var h = "HOST: 192.168.0.111";
var con = "Content-Type: application/x-wwwform-urlencoded";
var p1 = "POST /encounter/ba HTTP/1.1";
var p2 = "POST /encounter/bc HTTP/1.1";
var p3 = "POST /encounter/bd HTTP/1.1";

while(true) {

function onRadioReceive(seq,src,pan,data,rss) {
if (data == 'a' && checka == 1){
serialSend(c + CR);
serialSend(p1 + CRLF);
serialSend(h + CRLF);
serialSend(con + CRLF + CRLF);
checka = 0;
checkc = 1;
checkd = 1;
}else if(data == 'c' && checkc == 1){
serialSend(c + CR);
serialSend(p2 + CRLF);
serialSend(h + CRLF);
serialSend(con + CRLF + CRLF);
checka = 1;
checkc = 0;
checkd = 1;

}else if(data == 'd' && checkd == 1){
serialSend(c + CR);
serialSend(p3 + CRLF);
serialSend(h + CRLF);
serialSend(con + CRLF + CRLF);
checka = 1;
checkc = 1;
checkd = 0;

}else{
}

}
radioSend(0xFFFF, 'b');
}


//for C

serialInit(9600);
pinMode(0, true);
digitalWrite(0,true);
ain1 = analogRead(1);
radioInit(0xDDDD, 0, 11, 2);

var checka= 1;
var checkb= 1;
var checkd= 1;
var CR = String.fromCharCode(13);
var CRLF = String.fromCharCode(13, 10);
var c = "C192.168.0.111:3000";
var h = "HOST: 192.168.0.111";
var con = "Content-Type: application/x-wwwform-urlencoded";
var p1 = "POST /encounter/ca HTTP/1.1";
var p2 = "POST /encounter/cb HTTP/1.1";
var p3 = "POST /encounter/cd HTTP/1.1";

while(true) {

function onRadioReceive(seq,src,pan,data,rss) {
if (data == 'a' && checka == 1){
serialSend(c + CR);
serialSend(p1 + CRLF);
serialSend(h + CRLF);
serialSend(con + CRLF + CRLF);
checka = 0;
checkb = 1;
checkd = 1;
}else if(data == 'b' && checkb == 1){
serialSend(c + CR);
serialSend(p2 + CRLF);
serialSend(h + CRLF);
serialSend(con + CRLF + CRLF);
checka = 1;
checkb = 0;
checkd = 1;

}else if(data == 'd' && checkd == 1){
serialSend(c + CR);
serialSend(p3 + CRLF);
serialSend(h + CRLF);
serialSend(con + CRLF + CRLF);
checka = 1;
checkb = 1;
checkd = 0;

}else{
}

}
radioSend(0xFFFF, 'c');
}


//for D

serialInit(9600);
pinMode(0, true);
digitalWrite(0,true);
ain1 = analogRead(1);
radioInit(0xDDDD, 0, 11, 2);

var checka= 1;
var checkb= 1;
var checkc= 1;
var CRLF = String.fromCharCode(13, 10);
var c = "C192.168.0.111:3000";
var h = "HOST: 192.168.0.111";
var con = "Content-Type: application/x-wwwform-urlencoded";
var p1 = "POST /encounter/da HTTP/1.1";
var p2 = "POST /encounter/db HTTP/1.1";
var p3 = "POST /encounter/dc HTTP/1.1";

while(true) {

function onRadioReceive(seq,src,pan,data,rss) {
if (data == 'a' && checka == 1){
serialSend(c + CR);
serialSend(p1 + CRLF);
serialSend(h + CRLF);
serialSend(con + CRLF + CRLF);
checka = 0;
checkb = 1;
checkc = 1;
}else if(data == 'b' && checkb == 1){
serialSend(c + CR);
serialSend(p2 + CRLF);
serialSend(h + CRLF);
serialSend(con + CRLF + CRLF);
checka = 1;
checkb = 0;
checkc = 1;

}else if(data == 'c' && checkd == 1){
serialSend(c + CR);
serialSend(p3 + CRLF);
serialSend(h + CRLF);
serialSend(con + CRLF + CRLF);
checka = 1;
checkb = 1;
checkc = 0;

}else{
}

}
radioSend(0xFFFF, 'd');
}

Mulius ver1.0 完成

今朝、ようやくハードも完成し、Mulius ver 1.0が完成しました!!!!!
長かった。。。でも、予定よりも早い完成で、嬉しい限りです。

苦労したのは、WiPort + Rails + マイコン(moxa)が、うまく連携してくれなかったこと。

WiPort + マイコンが上手くいっていないのか、Rails + WiPortが上手くいっていないのか、WiPort + Rails + マイコンを連携させる時に、不具合が起こるのか、どこで失敗するのかもうぐちゃぐちゃに。

そんなとき、Iさんに相談した所、以下のようなアドバイスを頂きました。

>足場を固めながら、論理的に問題を切り分けて行かないと、
>決してゴールにはたどり着けませんよ。

いい言葉です。。。自分の大雑把さを反省しました。コードはたった一文字で動かなかったりするんですよね。

そんなわけで、手順に関してもアドバイスを頂いたので、それをたどる事にしました。

>1 googleサーバから正しい反応が貰えるようなリクエスト文字列をTeratermで確認
>2 Processingでgoogleサーバに「全く同じ」リクエスト文字列を作り、確認
>3 moxaから「全く同じ」リクエスト文字列を送って確認
>4 Railsサーバから正しい反応が貰えるようなリクエスト文字列をTeratermで確認
>5 ProcessingでRailsサーバに「全く同じ」リクエスト文字列を作り、確認
>6 moxaから「全く同じ」リクエスト文字列を送って確認

それでは、手順をひとつずつ見て行きましょう。
[1]SFCサーバから正しい反応が貰えるようなリクエスト文字列をTeratermで確認
googleにリクエストを出すと、上手くいかない時があったので、大学のwebサイトのindexにGET要求を出す事にしました。
まずはSFCのIPアドレスを調べます。
$ dig www.sfc.keio.ac.jp
digでIPアドレスを調べることが出来ますよ。調べたら、TeraTermで、HTTPリクエストを出してみます。

C133.27.4.221:80
GET /index.html HTTP/1.1<^M^J>
HOST: www.sfc.keio.ac.jp<^M^J><^M^J>


MakingThingsTalkという本を参考に、やってみました。
ポート指定の前は、MakingThingsTalkでは/を使っていました。/ではなく:ではないだろうか?という意見を頂いたのですが、/を使っても、:を使っても同じくサーバーと接続できました。なので、ひとまず:で統一することにしました。
少し気になっているのは、サーバーに接続した後は、Enterではなく^M^J(Ctrl-M,Ctrl-J)でCRLFを行っている事。MakingThingsTalkには書かれていたのですが、なぜ^M^Jでなくてはダメなのかは設定の問題と書いてありました。ちょっと気になる所でしたが、ともあれ、上記のリクエスト文で間違いなくGETできていました(200 OKも出ているので)

[2]ProcessingでSFCサーバに「全く同じ」リクエスト文字列を作り、確認

MakingThingTalkではTeraTermからではなく、Proce55ingから、シリアル接続でWiPortにリクエストを出せるプログラムが載っています。Processingのコードの中に大学のサイトのIPアドレスを入れます。
ちなみにこれは、何でもいいので、ボタンを押すと、イベントシーケンスを1つずつ実行してくれるプロジェクトです。
import processing.serial.*;
Serial myPort; // Serial object
int step = 0; // which step in the process you're on
char linefeed = 10; // ASCII linefeed character
void setup()
{
println(Serial.list());
myPort = new Serial(this, Serial.list()[0], 9600);
myPort.bufferUntil(linefeed);
}
void draw()
{
}
void serialEvent(Serial myPort) {
print(myPort.readString());
}
void keyReleased() {
switch (step) {
case 0:
myPort.write("C133.27.4.221:80\n");
step++;
break;
case 1:
myPort.write("GET /index.html HTTP/1.1\r\n");
myPort.write("HOST: www.sfc.keio.ac.jp\r\n\r\n");
step++;
break;
}
}

200 OKと出て、処理が行われました。改行は\nで良さそうです。MakingThingsTalkでは、Cの後は\rになっていたのでちょっと気になっていましたが、\nに変えても結果は変わらなかったので、\nで統一することにしました。(TeraTermで入力した文字列に忠実であるため)また、GET以降はTeraTermと合わせるため、\r\nとしましたが、\nでも問題なく動いていました。
myPort.write("GET /index.html HTTP/1.1\n");
myPort.write("HOST: www.sfc.keio.ac.jp\n\n");
ひとまずは\r\nで行く事にします。
[3]moxaから「全く同じ」リクエスト文字列を送って確認
確認の方法が少し面倒だったので、(MakingThingsTalk > Processingでサーバーを作る方法)
後回しにして、railsの方を進めてみました。
[4]Railsサーバから正しい反応が貰えるようなリクエスト文字列をTeratermで確認
mainページだと、かえってくるhtmlが長過ぎるので、loginページにリクエストを出して分かりやすくしました。
C192.168.0.111:3000
GET /login HTTP/1.1<^M^J>
HOST: 192.168.0.111<^M^J><^M^J>

200 OKが出て、きちんとかえってきました。
[5]ProcessingでRailsサーバに「全く同じ」リクエスト文字列を作り、確認
Processingのコード・以下の三カ所を変更。
myPort.write("C192.168.0.111:3000\n");

myPort.write("GET /encounter HTTP/1.1\r\n");
myPort.write("HOST: 192.168.0.111\r\n\r\n");


なんと今度は成功!ずっと失敗してたのに、、、、。
200 OKとでて、きちんと返してくれました。こちらはSFCの場合と異なり、\r\nとしなければ失敗するようです。(試しに\nでリクエストを出したところ、同じようなエラーが出ました。)
ひとつずつ確認していった事が功を奏したようです。POSTも同様に確かめてみました。

myPort.write("C192.168.0.111:3000\n");

myPort.write("GET /encounter HTTP/1.1\r\n");
myPort.write("HOST: 192.168.0.111\r\n\r\n");

こちらも成功していました。これは期待できるかも、、、、?!
[6] moxaから「全く同じ」リクエスト文字列を送って確認
長いので、全文は後ほど掲載します。
前回からの変更点のみ抜粋。
var CR = String.fromCharCode(13);
var CRLF = String.fromCharCode(13, 10);
var c = "C192.168.0.111:3000";
var h = "HOST: 192.168.0.111";
var con = "Content-Type: application/x-wwwform-urlencoded";
var p1 = "POST /encounter/ab HTTP/1.1";
var p2 = "POST /encounter/ac HTTP/1.1";
var p3 = "POST /encounter/ad HTTP/1.1";

変数の宣言で、文字列指定しちゃいます。ポイントはString.fromCharCode。アスキーコードからCR(改行)とLF(復帰)を引っ張ってきます。
あとは、なんらかの信号を受け取った時(Muliusの場合、他のmoxa基盤からZigBeeで値を受け取った時)にserialSendでWiPortに上記の文字列を送るようにします。
serialSend(c + CR);
serialSend(p1 + CRLF);
serialSend(h + CRLF);
serialSend(con + CRLF + CRLF);


いざ、、、moxaに書き込み、WiPortの電源を入れて、通信させてみます。
すると、railsサーバー側では以下の結果が!

ブラウザから見てみると、

出来てた〜!!!!!

ここまで丸三日間、、、本当にがんばりました。あとはガワやサイトのCSSを整えたりって感じです。もうちょっとだけがんばりますが、今日はblogを書いたりしてのんびり過ごします(笑)

2008年12月13日土曜日

moxaとWi-portと通信速度

こんにちは。リア充を目指すもこもこじゅう/やすこやかです。

なんだか自分が思っている以上に、このblogを見てくれてる人がいるんだな〜って知って、ちょっと嬉しくなりました。

こんなblogを閲覧してくださっている方のなかで、慶應関係者では無い方は、blogに頻繁に出てくる“Xtel”や“moxa”という単語が「?」だったでしょう。
それらの説明はこちら。
そして私は、xtelを活用して、いろいろ作ろうとしている人の一人ってわけです。

と、いまさらながらのご紹介でした。


さて、本題。
前回、moxaとWi-Portを繋げる試みが成功したとお伝えしましたが、問題がありました。
文字化けするのです。moxaから読んで来た値を、Wi-portサーバーから引き出そうとすると文字がぐちゃぐちゃに(><)
文字コードの問題?でも、半角英数字しかつかっていないし。。。。と思い悩んでおりました。が、すぐに解決。
なんと通信速度の問題でした。

Wi-Port側に文字列を送るRuby:

equire 'socket'

client = TCPSocket.open('192.168.0.123', 10001)

while true do
client.write('a')
p client.gets.chomp
sleep(3)
client.write('b')
p client.gets.chomp
sleep(3)
end


最初、sleepを(1)にしていたのですが、(3)に変更しただけで、文字化けしなくなりました。なんかちょっぴり拍子抜け。
もしくはmoxaに書き込むコードの
serialInit(9600);
serialInit(4800);に変えると上手くいく場合もあるそうです。
(ちなみに、今回はこの手法では解決できませんでした)

シリアル通信の文字化けで悩んでいる方、ちょっと試してみてはどうでしょうか?

2008年11月26日水曜日

RubyでSocket通信

KRYM logсино Блогと、その中の人の協力により、WiPortデビューを果たす事が出来ました。

いまはRubyの勉強中。
KRYMさんのBlogからソースを拝借。


require 'socket'

client = TCPSocket.open('192.168.0.123', 10001)
//ここで自分でWiPortに割り振ったIPアドレスとポート

//ここから下は無限ループ
while true do
//trueの間はずっと実行=Falseなんてここにはないので、無限になりますね。

client.write('a')
//クライアント=WiPortにaを送り続けます
p client.gets.chomp
//p = print
//client = 上で記述した“TCPSocket~・・・”のこと
//gets = 入力データを文字列オブジェクトとして返します
//chomp = 改行を取り除いた文字列を生成して返します。
sleep(1)
//上の出力が終わった後、停止する
client.write('b')
p client.gets.chomp
sleep(1)
//上の三行と同じ

end


一行ずつ見て行くとこんな感じでした。

2008年2月13日水曜日

Xtelに書き込むコード ほとんど最終形態

var checkA= 1;
var checkB= 1;
var checkC= 1;

pinMode(0, true);
radioInit(0xDEAD, 0, 11, 2);
serialInit(9600);
// メインとなるループ
while(true) {
ain = analogRead(0);
ain1 = analogRead(1);
ain2 = analogRead(2);
//serialSend("M "+analogRead(0)+"\r\n"+"SV "+analogRead(1)+"\r\n"+"BT "+analogRead(2)+"\r\n");

function onRadioReceive(seq,src,pan,data,rss) {
serialSend("BT2 "+analogRead(2)+"\r\n");
if (data == 'A' && checkA == 1){
serialSend("A "+1+"\r\n");
checkA = 0;
checkB = 1;
checkC = 1;
}else if(data == 'B' && checkB == 1){
serialSend("B "+1+"\r\n");
checkA = 1;
checkB = 0;
checkC = 1;
}else if(data == 'C' && checkC == 1){
serialSend("C "+1+"\r\n");
checkA = 1;
checkB = 1;
checkC = 0;
}else if(data == 'X'){
serialSend("BT2 "+1+"\r\n");
}
}
radioSend(0xFFFF,analogRead(2));

if(ain<0.3){>0.4 && ain <0.7){>0.7){
radioSend(0xFFFF, 'C');
}else{
}
}

Xtelに書き込むコード 最新

var checkA= 1;
var checkB= 1;
var checkC= 1;

pinMode(0, true);
radioInit(0xDEAD, 0, 11, 2);
serialInit(9600);
// メインとなるループ
while(true) {
ain = analogRead(0);
ain1 = analogRead(1);
ain2 = analogRead(2);
//serialSend("M "+analogRead(0)+"\r\n"+"SV "+analogRead(1)+"\r\n"+"BT "+analogRead(2)+"\r\n");

function onRadioReceive(seq,src,pan,data,rss) {
if (data == 'A' && checkA == 1){
serialSend("A "+1+"\r\n");
checkA = 0;
checkB = 1;
checkC = 1;
}else if(data == 'B' && checkB == 1){
serialSend("B "+1+"\r\n");
checkA = 1;
checkB = 0;
checkC = 1;
}else if(data == 'C' && checkC == 1){
serialSend("C "+1+"\r\n");
checkA = 1;
checkB = 1;
checkC = 0;
}else if(data == 'X'){
serialSend("BT2 "+1+"\r\n");
}
}
if(ain2 >0.6){
radioSend(0xFFFF, 'X');
}else{
}
if(ain<0.3){>0.4 && ain <0.7){>0.7){
radioSend(0xFFFF, 'C');
}else{
}
}

2008年2月12日火曜日

補足

M : 可変抵抗1(スライダー)
この値によって、相手に曲を伝染させたり(正確には、相手のMaxに再生曲を伝える)自分の曲を変更する。

SV : 可変抵抗2
音量の調整用

BT : 加速度センサー
この値でビートを刻む

<最新>Xtelに書き込むコード

// 送りつつ受け取る
var checkA= 1;
var checkB= 1;
var checkC= 1;

pinMode(0, true);
radioInit(0xDEAD, 0, 11, 2);
serialInit(9600);
// メインとなるループ
while(true) {
ain = analogRead(0);
ain1 = analogRead(1);
ain2 = analogRead(2);
//serialSend("M "+analogRead(0)+"\r\n"+"SV "+analogRead(1)+"\r\n"+"BT "+analogRead(2)+"\r\n");
function onRadioReceive(seq,src,pan,data,rss) {
if (data == 'A' && checkA ==1){
serialSend("A "+1+"\r\n");
checkA = 0;
checkB = 1;
checkC = 1;
}else if(data == 'B' && checkB == 1){
serialSend("B "+1+"\r\n");
checkA = 1;
checkB = 0;
checkC = 1;
}else if(data == 'C' && checkC == 1){
serialSend("C "+1+"\r\n");
checkA = 1;
checkB = 1;
checkC = 0;

}
}
//ain = analogRead(0);
if(ain<0.4){>0.4 && ain <0.7){>0.7){
radioSend(0xFFFF, 'C');
}else{
}
}

Xtelに書き込むコードについての考察

やすこ

なんでこんなに同じようなコード(ちょっとずつ改訂してますが)を連続投稿したかというと、スペース一つできちんとRun出来るかどうか変わってしまうという、かなり不安定な存在=Xtelだからです。

昨夜、一人でもくもくと作業しながら、「なんでできないのか??」と悩んでいましたが、コメントアウトを減らした所書き込めました。
こんなこともあるXtelでづが、かなり仲良くなりつつあります。

Xtelに書き込むコード3

// 送りつつ受け取る
var checkA= 1;
var checkB= 1;
var checkC= 1;


pinMode(0, true);
radioInit(0xDEAD, 0, 11, 3);
serialInit(9600);
// メインとなるループ
while(true) {
ain1 = analogRead(1);
ain2 = analogRead(2);
serialSend("KS "+analogRead(1)+"\r\n"+"KH "+analogRead(2)+"\r\n");
function onRadioReceive(seq,src,pan,data,rss) {
if (data == 'A' && checkA ==1){
serialSend("A\r\n");
checkA = 0;
checkB = 1;
checkC = 1;
}else if(data == 'B' && checkB == 1){
serialSend("B\r\n");
checkA = 1;
checkB = 0;
checkC = 1;
}else if(data == 'C' && checkC == 1){
serialSend("C\r\n");
checkA = 1;
checkB = 1;
checkC = 0;

}
}
ain = analogRead(0);
if(ain<0.3){>0.4 && ain <0.6){>0.7){
radioSend(0xFFFF, 'C');
}else{
}

Xtelに書き込むコード2

// 送りつつ受け取る
var checkA= 1;
var checkB= 1;

pinMode(0, true);
radioInit(0xDEAD, 0, 11, 3);
serialInit(9600);
// メインとなるループ
while(true) {
ain1 = analogRead(1);
ain2 = analogRead(2);
serialSend("KS "+analogRead(1)+"\r\n"+"KH "+analogRead(2)+"\r\n");
function onRadioReceive(seq,src,pan,data,rss) {
if (data == 'A' && checkA ==1){
serialSend("A\r\n");
checkA = 0;
checkB = 1;
}else if(data == 'B' && checkB == 1){
serialSend("B\r\n");
checkA = 1;
checkB = 0;
}
}
ain = analogRead(0);
if(ain<0.5){>0.5){
radioSend(0xFFFF, 'B');
}else{
}
}

2008年2月5日火曜日

Xtelに書き込むコード

やすこ

本日の集大成。コードでござい☆




// 送りつつ受け取る
var checkA= 1;
var checkB= 1;
// 初期化処理
pinMode(0, true);// trueならOutputモード
radioInit(0xDEAD, 0, 11, 3); // groupID, 自分のID, チャンネル, 電波強度
serialInit(9600);
// メインとなるループ
while(true) {
ain1 = analogRead(1); //port1には加速度
ain2 = analogRead(2); //port2には可変抵抗をつけます
serialSend("kasokudo"+analogRead(1)+"\r\n"+"kahen"+analogRead(2)+"\r\n");
function onRadioReceive(seq,src,pan,data,rss) {
if (data == 'A' && checkA ==1){ //checkという変数を用意
serialSend("A\r\n");
checkA = 0; //これで、一つ前に送った値がAの場合は、連続して送りません
checkB = 1;
checkC = 1;
checkD = 1;
}else if(data == 'B' && checkB == 1){
serialSend("B\r\n");
checkA = 1;
checkB = 0;
checkC = 1;
checkD = 1;
}
}
ain = analogRead(0);//port0からとった値を送ります
if(ain<0.5){>0.5){
radioSend(0xFFFF, 'B'); //Bを相手に送ります
}else{

}
}






これを共通して書いてしまえば、2つのエクステル間で送受信が出来ます。
注意!
短いスクリプトでないと、書き込めません。
よってなるべく改行やコメントアウトを減らしてください。

2008年1月28日月曜日

MaxとMOXA連携の補足

やすこ

個人的な話。

いつもシリアルリードするとき、ポートを付け替えなくちゃいけないのに、忘れている私。書き込むときと、読む時でポートが違うので注意じゃ!

2008年1月27日日曜日

MAXとMOXAの連携

MAXとMOXAの連携で今日は非常に手間取りましたが、解決!!

xtelを繋げる

MAXを起動(Tetminalやeclipseは起動していない状態で)

あと少し頑張るぞ!!

2008年1月25日金曜日

Moxaな続き。

<ターミナルの使い方>
・セッティングした時のポート指定でUSBシリアルが出てこない場合eclipseを再起動する。
→再起動するとusbserialが増えている。
→そのあとconnectの緑のやつを押すと数値を取ってる。
<MOXAの注意事項>
・レインボウラインは繊細。注意せよ・・・。

↓MOXAの写真。前回の写真だとよく分からないんでもう1回アップロードします。
 上からPROTO1BOARD、DEVICEBOARD、DEVICEBOARDの2番を拡大したもの。

2008年1月15日火曜日

Moxaな写真

↓switch on な状態。



MOXAデビュー その2

やすこ
連続投稿

次はMOXAを使ってみましょう!

1、eclipsをたちあげます
2、簡単なソースを用意します

こんなんで。

スライダで手元のLEDを光らせる

// 変数の準備
var brightness; // LEDの明るさ

// 初期化処理
pinMode(0, true); // PORT0にはLEDを接続(LOW出力で点灯)

// メインとなるループ
while(true) {
brightness = analogRead(2); // PORT2からスライダのアナログ値を逐一読む
analogWrite(0, brightness); // PORT0にアナログ値を出力
}

3、書き込みます
talktic buildボタンを押します。compileが出来ると、書き込みを開始します。と出てくるのでwindowsユーザーはcomを指定。
Arduinoと同じように、書き込む直前にスイッチオン!続けざまに書き込みOKボタン!すばやくやらないと失敗します。

4、ソースを見ながらデバイスポートにセンサー類を差し込んで完了!

MOXAデビュー その1

ほんとの私、デビュー♪

MOXA フューチャリング KORIYAMA
でお届けします。

まずはMOXAを使えるようにする準備

1、ウィッキーさんのMOXA技術資料から「開発用エクリプスパッケージ(workshop.zip)」をDL
2、解凍しましたら、setup/USB-Serial driverの中にあるドライバー2つを実行
※macの人は、ターミナルが立ち上がって完了したらシャットダウンします。
3、eclipsをインストールします。
※macの人はアプリケーションに入れればOK
4、workspaceの指定が出てきます。workspaceの場所は、よくわかんないけどeclipsアプリケーションの下に入れました。

これで準備完了!