何がうんざりってプログラムがうまくいかなくてうんざりです。
ずっとこのブログをみていただいている人(いるのか?)は気づいておられるかもしれませんが、ATmega32マイコンボードのBTC067とRCB-1を繋げて、BTC067をいわゆるセンサーボードに仕立て上げようとしています。何ヶ月も。
約2ヶ月前に無線からのコマンド読みとりはできていて、今それに応じてモーション再生させる段です。もちろんRCB-1にコマンド送るってことですよ?
RCB-1にコマンド送る際にネックになってるのは、一定周期で何らかのデータを送信し続けないと、RCB-1が待機状態になってしまうこと。
そのために、無線からの受信データが無いときは0xf000を送信するようにしたいんです。これ、メカトロ仙術さんの日記を参考にさせていただきました。
そしてそれを実現すべく書いたプログラムが下。
しかし残念ながら受信データがスルーされてる?っぽくて受信データ無しを送信しまくります。
これを応用して距離センサや加速度センサを使いたいと思っているのですが・・・・・・。
だれかアドバイスお願いします・・・・・・と言いたいところだけどこんな限定的な環境下について理解してくださるひとはいるのだろうか・・・・・・。
*以上の文章を読んでない方、以下のプログラムはうまくいってないので参考にしてはいけませんよ。コンパイルはできてるけど。そもそもこのブログを信用してはいけませんよ。
#include <avr/io.h>
#include <avr/interrupt.h>
#include <rs.h>
char txb[10],rxb[10]; //通信用バッファ
//指定したmS間待つ関数
void wait_ms(int msec)
{
int count;
TCCR2 |= (1<<CS22);
for (count = 0; count < msec; count++)
{
TCNT2 = 0x00;
while(TCNT2<250){}
}
}
void send_command(unsigned char a, unsigned char b)//2バイト送信する関数
{
int count2;
for (count2 = 0; count2 < 10; count2++)
{
rs_putc(a);
rs_putc(b);
wait_ms(17);//2バイト毎に17ms待ち複数回送信 これ仕様
}
}
void main(void)// メイン関数
{
rs_init (br2400, txb, sizeof(txb), rxb, sizeof(rxb));
fdevopen(rs_putchar, rs_getchar, 0);
SREG |= (1<<SREG_I);
unsigned char a,b;//受信データ用
while(1){
rs_rx_purge ();//受信バッファクリア
if (rs_rx_buff ()) {//受信バイト数が0でなければ真
a=rs_getc();//前1バイト受信
b=rs_getc();//後1バイト受信
switch(a){//前一バイトチェック
case 0xf1 :
switch(b){//後一バイトチェック
case 0x01 :send_command(0xf1,0x01);//2バイト送信
break;
case 0x02 :send_command(0xf1,0x02);
}break;
}
}
else{//受信データ無し
send_command(0xf0,0x00);//データ無し
}
}
}