2017年04月26日

模型市・自動運転デモの作成

今日は副業を休んで、4月29日(土)の鉄道模型市(浅草)で披露する自動運転のデモソフトを作りました。単純にクモハ40が往復するだけですが、吊り掛けを鳴らしながら走るのでサウンドのデモとして最適かなと思ってます。

■ブロック図

ShuttleDemo1.png

■実験風景

ShuttleDemo2.jpg

■使用機材

・DCC/MMシールド & Arduino UNO互換機セット
Nucky製s88 Train Detector
・Nagoden製 MP3サウンドデコーダV5 (CV47=4の吊り掛け音モード)
・KATO クモハ40
・KATO UNITRACK
・KATO 絶縁ジョイナ
・KATO ジョイナフィーダー線

■スケッチ

TMI2017_SAMPLE.zip
※別途、DSGatewayLibが必要

/*********************************************************************
* Desktop Station Gateway Sketch for Arduino UNO/Leonard
*
* Copyright (C) 2014 Yaasan
*
*/


#include <avr/wdt.h>
#include <SPI.h>
#include "DSGatewayLib.h"
#include "TrackReporterS88_DS.h"

#define CHANGETIME 100
#define MAX_SPEED 512


/* Speed adjust */
#define SPEED_ADJUST 8

TrackReporterS88_DS reporter(1);
DSGatewayLib Gateway;

word gLocAddr = ADDR_DCC + 3;

void setup()
{
Serial.begin(115200);
while (!Serial);

Gateway.begin();

delay(2000);

//S88 Refresh
reporter.refresh(1);

//Power On
Gateway.SetPower(1);
delay(CHANGETIME);

//Go forward
Gateway.SetLocoDirection( gLocAddr, 1);
delay(CHANGETIME);

//Speed 0(Stop)
Gateway.SetLocoSpeed(gLocAddr, 0);
delay(CHANGETIME);

//Function 0
Gateway.SetLocoFunction(gLocAddr, 0, 1);
delay(CHANGETIME);

//Function 1
Gateway.SetLocoFunction(gLocAddr, 1, 1);
delay(CHANGETIME);

Serial.println("Setup Refresh");

}

void loop()
{
int aSpeed = 0;

Serial.println("FWD");

//Function 2
Gateway.SetLocoFunction(gLocAddr, 2, 1);
delay(CHANGETIME);
Gateway.SetLocoFunction(gLocAddr, 2, 0);
delay(CHANGETIME);

for( int i = 0; i < 40; i++)
{
aSpeed = aSpeed + SPEED_ADJUST;
Gateway.SetLocoSpeed( gLocAddr, aSpeed);
delay(CHANGETIME);
}

reporter.refresh(1);

while( reporter.getByte(0) == 0)
{
delay(CHANGETIME);
reporter.refresh(1);

Serial.print("S88 data =");
Serial.print(reporter.getByte(0));
Serial.println();
}

Serial.print("S88 data =");
Serial.print(reporter.getByte(0));
Serial.println();

Serial.println("S88 detected");

for( int i = 0; i < 40; i++)
{
aSpeed = aSpeed - SPEED_ADJUST;

if( aSpeed < 0)
{
aSpeed = 0;
}

Gateway.SetLocoSpeed( gLocAddr, aSpeed);
delay(CHANGETIME);
}

// Go reverse
Gateway.SetLocoDirection( gLocAddr, 2);
delay(CHANGETIME);
//Function 2
Gateway.SetLocoFunction(gLocAddr, 7, 1);
delay(2000);
Gateway.SetLocoFunction(gLocAddr, 7, 0);
delay(CHANGETIME);

//Function 2
Gateway.SetLocoFunction(gLocAddr, 2, 1);
delay(2000);
Gateway.SetLocoFunction(gLocAddr, 2, 0);
delay(CHANGETIME);

Serial.println("REV");

for( int i = 0; i < 40; i++)
{
aSpeed = aSpeed + SPEED_ADJUST;
Gateway.SetLocoSpeed( gLocAddr, aSpeed);
delay(CHANGETIME);
}

delay(5000);

for( int i = 0; i < 40; i++)
{
aSpeed = aSpeed - SPEED_ADJUST;

if( aSpeed < 0)
{
aSpeed = 0;
}

Gateway.SetLocoSpeed( gLocAddr, aSpeed);
delay(CHANGETIME);
}

//Go forward
Gateway.SetLocoDirection( gLocAddr, 1);
delay(CHANGETIME);

//Function 2
Gateway.SetLocoFunction(gLocAddr, 6, 1);
delay(2000);
Gateway.SetLocoFunction(gLocAddr, 6, 0);
delay(CHANGETIME);

}
posted by yaasan at 22:41 | Comment(0) | 鉄道模型
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。