NをDCCで自動運転 その7 Arduino+DCC/MM2シールドでS88を使ってみた [Arduinoで自動運転(DCC)]
こんにちは。今日の都内はお昼過ぎから雨が降り出して気温も低め。
それにしても寒暖差が激しいですねぇ。
さて、Desktop Stationを使っての自動運転ではコチラで4輌の同時運転ができています!
で、私はPCを使わずにArduino+DCC/MM2シールドで自動運転を企んでいるのですが、そのためにはS88で車輌を検知できないことにはどうにもならないのですが、関数の使い方が解らずにどうにもならなかったのですが、コチラで丁寧に解説をしていただいていたのに気付かづに。。。
ということで、早速、プログラムを取り込んで実行してみました。
まだS88は3つしかないのですが、しっかりとフォトリフレクタがしっかりと反応して番号を取得できました!
TrackReporterというライブラリにあるrefresh関数で取得できました。
ありがとうございました。
そして、キットや基盤を購入しました。
しかし・・・
今度の休みに、アキバに行って必要なパーツを購入してこようと思っていたのですが、自由行動はできなそうなので、週明けにでも、秋月の通販でポチってしようと思います。
それにしても寒暖差が激しいですねぇ。
さて、Desktop Stationを使っての自動運転ではコチラで4輌の同時運転ができています!
で、私はPCを使わずにArduino+DCC/MM2シールドで自動運転を企んでいるのですが、そのためにはS88で車輌を検知できないことにはどうにもならないのですが、関数の使い方が解らずにどうにもならなかったのですが、コチラで丁寧に解説をしていただいていたのに気付かづに。。。
ということで、早速、プログラムを取り込んで実行してみました。
まだS88は3つしかないのですが、しっかりとフォトリフレクタがしっかりと反応して番号を取得できました!
TrackReporterというライブラリにあるrefresh関数で取得できました。
ありがとうございました。
そして、キットや基盤を購入しました。
しかし・・・
今度の休みに、アキバに行って必要なパーツを購入してこようと思っていたのですが、自由行動はできなそうなので、週明けにでも、秋月の通販でポチってしようと思います。
#include "TrackReporterS88_DS.h" #include "DSGatewayLib.h" #include "SPI.h" #define MAX_S88DECODER 1 /* S88デコーダ接続台数(16bit=1台) */ TrackReporterS88_DS reporter(MAX_S88DECODER); DSGatewayLib Gateway; word gFlags[MAX_S88DECODER]; void UpdateS88(); void setup() { Serial.begin(9600); while (!Serial); /* Clear data of the S88 decoder */ reporter.refresh(); Gateway.begin(); } void UpdateS88() { reporter.refresh(MAX_S88DECODER); //Send a S88 sensor reply Serial.print("S88: "); for( int j = 0; j < MAX_S88DECODER; j++) { gFlags[j] = (reporter.getByte((j << 1) + 1) << 8) + reporter.getByte(j << 1); Serial.print(gFlags[j], HEX); Serial.print(","); } Serial.println(""); } void loop() { /* S88デコーダから情報を取得する */ UpdateS88(); /* S88デコーダの情報はgFlags[]にビットで入る */ if(gFlags[0] & 0b0000000000000001 ) { Serial.println("S88Address=1"); } if(gFlags[0] & 0b0000000000000010 ) { Serial.println("S88Address=2"); } if(gFlags[0] & 0b0000000000000100 ) { Serial.println("S88Address=3"); } if(gFlags[0] & 0b0000000000001000 ) { Serial.println("S88Address=4"); } if(gFlags[0] & 0b0000000000010000 ) { Serial.println("S88Address=5"); } if(gFlags[0] & 0b0000000000100000 ) { Serial.println("S88Address=6"); } /* 以下は、自分でbitをシフトして増やせます。 例: S88デコーダ2台目の5番目の場合 if(gFlags[1] & 0b0000000000010000 ) { Serial.println("S88Address=16+5"); } */ delay(2000); }
コメント 0