xbee双方向通信ができぬ
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

xbee双方向通信ができぬ

2014-11-13 05:28
    双方向ってかまず一方通行すらできないでいる。1週間あって何やってんだ俺・・・
    あと今日までに分かったことをまとめる。(xbee on arduino)
    xbeeのXBEE_RESULTは変数の型。受信データがすっぽり入る構造体だそうな。
    xbee_init()やxbee_atnj()の引数の0x??は16進数表記。
    それからコレが一番今回悩んだけど(未解決を除けば)、xbee_uart()の第二引数はアドレスだった。char s[10]でやれば引数はs(=&s[0])でいいけど、char cなら引数は&cでないといけない。Cの授業の時やった気がするけどすぐ忘れるなアドレス云々。
    あとchar一文字の代入は''で囲むこと。char文字列の時は""で囲むこと。
    sprintf(s,"string");は文字配列の配列名、入れたい文字列の順に入れると文字列がそのまま入って便利。for文とかいらない。
    あとxbeeの設定を書いてるブログはどこをみてもx-ctuがxbeeをうまく認識しない場合の解決策を書いてない。そこが一番苦労するわ。俺の経験から見ればシリーズ1は無理。シリーズ2はリセットボタンおしっぱで通る確率跳ね上がる。上手く行くときはなんどやってもうまくいくが、駄目な時は10回やっても無理だ。理由はしらん。
    #include<xbee.h>

    byte dev[8];

    void setup(){
    Serial.begin(9600);
    Serial.println("hajimari");
    xbee_init(0x00); //xbee初期化
    xbee_atnj(0xFF); //ネットワーク参加を許可
    pinMode(5,OUTPUT);//右側
    pinMode(6,OUTPUT);
    pinMode(7,OUTPUT);//左側
    pinMode(8,OUTPUT);
    }

    void loop(){
    char key;
    XBEE_RESULT xbee_result; //受信データは全部コレに入る。構造体
    xbee_rx_call(&xbee_result); //xbee_resultに受信データ格納
    switch(xbee_result.MODE){
    case MODE_UART:
    key=(char)xbee_result.DATA[0];
    if(key=='0'){ //STOP
    Serial.println(key);
    digitalWrite(5,LOW);
    digitalWrite(6,LOW);
    digitalWrite(7,LOW);
    digitalWrite(8,LOW);
    }else if(key=='1'){ //直進
    Serial.println(key);
    digitalWrite(5,HIGH);
    digitalWrite(6,LOW);
    digitalWrite(7,HIGH);
    digitalWrite(8,LOW);
    }else if(key=='2'){ //left turn
    Serial.println("success");
    digitalWrite(5,HIGH);
    digitalWrite(6,LOW);
    digitalWrite(7,LOW);
    digitalWrite(8,HIGH);
    }else if(key=='3'){ //right turn
    Serial.println(key);
    digitalWrite(5,LOW);
    digitalWrite(6,HIGH);
    digitalWrite(7,HIGH);
    digitalWrite(8,LOW);
    }else if(key=='4'){ //back gear
    Serial.println(key);
    digitalWrite(5,LOW);
    digitalWrite(6,HIGH);
    digitalWrite(7,LOW);
    digitalWrite(8,HIGH);
    }else{ //命令がなければブレーキかけて静止
    Serial.println(key);
    digitalWrite(5,HIGH);
    digitalWrite(6,HIGH);
    digitalWrite(7,HIGH);
    digitalWrite(8,HIGH);
    }
    break;
    case MODE_IDNT:
    Serial.println(" IN ");
    for(int i=0;i<8;i++) dev[i]=xbee_result.FROM[i];
    xbee_atnj(0x01);
    xbee_ratnj(dev,0);
    break;
    default:
    Serial.println("no data");
    break;
    }
    }

    ↑どっかのブログのをコピペしてモータドライバ用に直したがうまい具合にいかん。受信用なんだけどたぶんこっちがわに原因がありそう。送信側はもっと短いソースで収まったし。同じく困っている人はこのソースは参考にしたらあかん。
    広告
    コメントを書く
    コメントをするには、
    ログインして下さい。