使用できるピン主な命令C言語の基本スケッチの例アドレス3車両のファンクション操作タクトスイッチによるルート切り替えメルクリン車両の単純往復シャトル運転DSshieldAUTODSshieldAUTO(AUTOスケッチ)は、DSshieldとArduinoUNOだけで、パソコンなしに小規模な自動運転を実現するためのソフトウェアソリューションです。小さいジオラマの車両やギミックを小さなArduinoUNO+DSshieldによるコマンドステーションで、DCCの自動制御ができます。手を離しながら模型やジオラマをお楽しみいただける仕組みを提供しています。ボリュームの入力でスピードを変えたり、ボタンで動き方を変えたり、いろいろな演出が出来ます。AUTOスケッチでできることパソコンなしで、DCC車両やポイントを気軽に動かせます。(最初のプログラミングするときだけ、パソコンを使用します)。ボタンやセンサーに応じて、車両やポイントを動かすことも出来ます。ArduinUNOにACアダプタをつなげるだけ。DSシールドだけで完結。小規模な用途にも、数万円の高価なコマンドステーションは不要。教育向け、研修向け、自分の技術向上、ジオラマのギミックのパワーアップなどに使用できます。AUTOスケッチでできないこと複雑な制御。並列で何個も複雑な条件で動く制御パターン。Arduinoで並列処理を書くのが難しいため。大電流を消費する環境。必要に応じて、ボタンやS88デコーダ(在線検出器)、LEDなど。IDE(無料)配線の仕方DSシールドを買って、秋月電子で部品を入手しておき、半田付けします。UNOとDSシールドは合体させておきます。IDEをインストールする。UNO(互換機)のUSBドライバもインストールする。UNOとして認識したポートを指定する。Uploadボタン(→マーク)を押して書き込むスケッチの作り方はじめにArduinoの仕組みを使って、DCC鉄道模型の制御を行います。このため、Arduinoの入門書や知識が必要となります。日本語リファレンス全体の構成Arduinoのスケッチは、setup()とloop()で大きく構成されます。一方で、AUTOスケッチでは、user_init()とuser_program()の2つで構成されます。setup()とloop()は、DCC制御で使用しておりますので、user_の関数にプログラミングしていただきます。user_initはsetupからコールされています。user_programはloopからコールされています。ほとんど同じように使用することが出来ます。使用できるピンピン・端子を使用するときは、pinModeをuser_init()の中で必ずピンの設定します。//D8ピンを出力にする。OUTPUT);//D7ピンを入力にする。INPUT);//A2ピンを入力にする。INPUT);実際に使う場合には、以下のように使用します。//D8ピンをHIGH(1)で出力する。ピンには5Vが出力される。0VにしたいときはLOW(0)を指定する。HIGH);//D7ピンからピン状態を読み取る。D7が5Vのときは1がaSensorに入る。0Vのときは0が入る。digitalRead(7);//A2ピンからアナログの状態を読み取る。A2ピンが5Vのとき1024が入る。2.5Vのとき512、0Vのときは0になる。analogRead(A2);DSシールドで解放されているピンは以下の通りです。この他は、S88や電圧チェック機能で使用されています。記載はありませんが、5V、3.3V、GNDピンは自由に使用できます。0V,5Vの信号読み取りや、出力を行えます。ボタンの入力、LEDの出力に使用できます。デジタルに加え、光センサや可変抵抗器などのアナログセンサを使えます。上記に加え、I2C通信が使用できます。wire.hをインクルードする必要があります。主な命令AUTOスケッチでは、Arduinoの命令は全部使えますが、たぶん混乱するだけなので、以下の命令を中心に、まずは使ってみてください。「ADDR_DCC+DCCアドレス」で指定してください。DCCアドレス8102であれば、ADDR_DCC+8102です。MM2アドレス5なら、ADDR_MM2+5です。アクセサリアドレス:「ADDR_ACC_DCC+DCCアクセサリアドレス」で指定してください。DCCポイント32であれば、ADDR_ACC_DCC+32です。永久ループで止めます。この命令の後は一切制御できなくなります。S88からデータを収集する処理。ミリ秒単位(1000で1秒)で待ちます。0で線路電源オフ、1で線路電源オン。速度は、0-1023で与えてください。ファンクション番号(0-28)を操作します。ファンクション番号(0-28)を操作します。0→1→0のMomentary動作を自動で行います。ポイントや信号機を操作します。シリアル通信でPC等にメッセージを送れます。Serial.println(“車両1検出”);C言語の基本C言語の細かい記述方法は、本屋さんに売っているC言語入門の本を斜め読みしながら覚えてください。全てを覚える必要はありません。サンプルをいじりながら、修正してみて手探りしながら体で覚えていただく形が良いと思います。aHako;staticを付けると、変数は消されずに値が保持されます。sHako;なお、C言語のルールでは無く、独自のルールですが、変数の名前は先頭に種類を示す小文字を付けると見やすくなります。関数内で宣言して使う変数には“a”(autoのa)、1つのソースファイル全体で使う変数には“g”(globalのg)、関数内でstatic宣言して使う変数には“s”(staticのs)とします。プログラムは基本3要素で成り立っています。シーケンス(順序実行)、分岐、繰り返しです。1);CMD_Wait(500);分岐は以下の通りです。0);}繰り返しは、似たような命令を、シンプルに表現する方法です。繰り返しは、シーケンスと分岐を組み合わせるとできますが、C言語では専用命令forやwhileがありますので、これを使うと楽が出来て便利です。スピードを徐々にあげるような命令は、繰り返し命令を使うと短く記載できて楽です。車両のファンクションを動かすサンプルです。その2(挫折&方針変更)で詳細を紹介しています。その3)を参照ください。user_program(void){//ボタンが押されたとき、digitalReadは0を返す。押さないときは1を返す。2)の往復シャトル運転です。ファンクション操作や、ボタンでスタートをかけるなどの動きを実現しています。その5)を参照ください。1;//ボタンが押されたとき、digitalReadは0を返す。押さないときは1を返す。以前のリビジョンバックリンク文書の先頭へ。