忍者ブログ

あやの

NゲージをベースとしたDCCについての日記を 書いています。 ある程度貯まりましたら、鉄道模型のDCCのまとめサイトに まとめています。 借りている容量が最大に達しましたので、移転します。 ★移転先:http://maison-dcc.sblo.jp/

2024/11    10« 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  »12
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ファンクッションは当初
出発時 F4
PM9 F5
AM0 F6
AM3 F7
AM6 F8
ヤード F9
で作りましたが、DCS50k がF9認識しなかったので、AM6無くしてF8 ヤードになっています。

また、DCS50Kは電源を入れ直しても、前回のファンクッションを覚えている様で
いろいろ対策入れました。
勝手にF4が始まるのはガードしきれていません。
ヤードはランダムに点灯する様に作ってみました。




void Elm_Control(){
  static char state = 0;    // ステート
  static char lamp[8]={0,0,0,0,0,0,0};
  static char sw = 0;
  static long cnt=0;
  long selL  =0;
  
  switch(state){
    case 0:
      if(gState_F4 == 0){
        lamp[0] = 0;
      } else {
        lamp[0] = 1;
      }
      if(gState_F5 == 0){
        lamp[1] = 0;
      } else {
        lamp[1] = 1;
      }
      if(gState_F6 == 0){
        lamp[2] = 0;
      } else {
        lamp[2] = 1;
      }
      if(gState_F7 == 0){
        lamp[3] = 0;
      } else {
        lamp[3] = 1;
      }
      if(gState_F8 == 0){
        lamp[4] = 0;
      } else {
        lamp[4] = 1;
      }
      if(gState_F9 == 0){
        lamp[5] = 0;
      } else {
        lamp[5] = 1;
      }
      digitalWrite(O1, LOW);
      digitalWrite(O2, LOW);
      digitalWrite(O3, LOW);
      digitalWrite(O4, LOW);
      
      cnt ++;
      if (cnt==10){
          state = 1;
           cnt =0;      
      }
      break;
      
    case 1:
      if(gState_F4 != lamp[0]){
        // F4 受信時の処理
        // 出発時
        digitalWrite(O1, LOW);
        digitalWrite(O2, HIGH);
        digitalWrite(O3, LOW);
        digitalWrite(O4, LOW);
        lamp[0] = gState_F4;
        break;
      }
      if(gState_F5 != lamp[1]){
        // F5 受信時の処理
        // PM9時
        digitalWrite(O1, HIGH);
        digitalWrite(O2, HIGH);
        digitalWrite(O3, HIGH);
        digitalWrite(O4, HIGH);
        lamp[1] = gState_F5;
        break;
      }
      if(gState_F6 != lamp[2]){
        // F6 受信時の処理
        // AM0時
        digitalWrite(O1, HIGH);
         digitalWrite(O2, HIGH);
        digitalWrite(O3, HIGH);
        digitalWrite(O4, LOW);
        analogWrite(O4, 10);
        lamp[2] = gState_F6;
        break;
      }
      if(gState_F7 != lamp[3]){
        // F7 受信時の処理
        // AM0時
        digitalWrite(O1, HIGH);
        digitalWrite(O2, HIGH);
        digitalWrite(O3, HIGH);
        digitalWrite(O4, LOW);
        lamp[3] = gState_F7;
        break;
      }
      if(gState_F8 != lamp[4]){
        // F8 受信時の処理
        // AM6時
        digitalWrite(O1, LOW);
        digitalWrite(O2, LOW);
        digitalWrite(O3, LOW);
        digitalWrite(O4, LOW);
        state = 2;
        lamp[4] = gState_F8;
        break;
      }
      if(gState_F9 != lamp[5]){
        // F9 受信時の処理
        // ヤード
        digitalWrite(O1, LOW);
        digitalWrite(O2, LOW);
        digitalWrite(O3, LOW);
        digitalWrite(O4, LOW);
        state=2;
        lamp[5] = gState_F9;
        break;
      }
     
    break;
    case 2:
        if(gState_F4 != lamp[0]){
          state =1;
          break;
        }
        selL = random(3);// 0 - 2
        cnt = random(1,5);
        FlashTimer = millis();
        switch(selL){
          case 0:
            state = 3;
            break;
          case 1:
            state = 4;
            break;
          case 2:
            state = 5;
          default:
            break;
        }
        break;
      case 3:
        if((millis()-FlashTimer) >= 200){
          FlashTimer = millis();
          
          if(sw==0) {
            digitalWrite(O1, LOW);
            sw = 1;
            cnt--;
          } else {
            digitalWrite(O1, HIGH);          
            sw = 0;
          }
          if(cnt==0){
             state = 2;
          }          
        }
        break;
      case 4:
        if((millis()-FlashTimer) >= 300){
          FlashTimer = millis();
          
          if(sw==0) {
            digitalWrite(O3, LOW);
            cnt--;
            sw = 1;
          } else { 
            digitalWrite(O3, HIGH);          
            sw = 0;
          }
          if(cnt==0){
             state = 2;
          }          
        }
        break;
      case 5:
        if((millis()-FlashTimer) >= 400){
          FlashTimer = millis();
          
          if(sw==0) {
            digitalWrite(O4, LOW);
            sw = 1;
            cnt--;
          } else{
               digitalWrite(O4, HIGH);          
            sw = 0;         
          }
          if(cnt==0){
             state = 2;
          }          
        }
        break;
    default:
      break;
  }
}


拍手[0回]

PR
お名前
タイトル
メール(非公開)
URL
文字色
絵文字 Vodafone絵文字 i-mode絵文字 Ezweb絵文字
コメント
パスワード   コメント編集に必要です
管理人のみ閲覧

ブログ内検索

プロフィール

HN:
あやのすけ
性別:
非公開
<< Back  | HOME Next >>
Copyright ©  -- あやの --  All Rights Reserved
Design by CriCri / Material by もずねこ / powered by NINJA TOOLS / 忍者ブログ / [PR]