Arduino のプログラム

ここで機材に搭載されている、Arduino のスケッチ(プログラム)を公開しておこうと思います。より多機能な機材の開発を計画されている方への礎となれば幸いです。

コア部分(一着のみ点灯)だけの機能です。Ver6.2-S としています。
あ、もちろん、コピペしても、そのままでは動きません(笑)なので、動かないんだけど・・・その他の質問は受け付けません。元々、動かないんですから(笑)。
公開の理由は、チャレンジした人への答え合わせ(あるいは別ルートの提案)的なイメージでしょうか。ゼロからこれを見て作ろうと考えている方は、色々とがんばってください。
*****************
使用マイコン Arduino MEGA 2560 Rev3 正規品
使用ピン番号
IN: D22 - D41
(5Vプラスコモン 220Ω プルダウン)
OUT: D42 -D53、 D62 - D69
(D54 -D61ピンはAnarog競合で不具合があるため使用せず)
リセット:D21
(5Vプラスコモン 220Ω プルダウン)
一着押し下げ音:D12
表示モニタ:D10
音発生装置の処理はD12 へのHIGH リセットでLOW
(実機の処理とは異なります)
******************



//Q4L-KEN 2018/08/04 Ver6.2-S
int sw_in[20] ={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //配列を使って押しボタン格納
int i=0; //インプットピン  格納
int o=0; //アウトプットピン 格納
int a=0; //sw_in の配列番号
int state =0; //着番
int out_no =0; // アウトプットの番号
const int RESET =21; //リセット  21
const int NO1 =12; //一着 音 12
const int MON =10; //表示モニタ 10

void setup(){
pinMode(NO1,OUTPUT); //一着音 OUT
pinMode(RESET,INPUT); //リセット IN
pinMode(MON,OUTPUT); //アウトプット OUT
for (int i=22; i<=41; i++) //インプット 22-41番ピン
{pinMode (i,INPUT);}
for (int o=42; o<=69; o++) //アウトプット 42-69番ピン
{pinMode (o,OUTPUT);} //54-61ピンは使用せず。アナログとの競合??
}


void loop() {

for (int m=22; m<=41; m++)   //IN 22-41 ループ
{
if ((digitalRead(m) == HIGH) && (sw_in[m-22] == 0))
//m番入力があれば & 押された履歴がなければ
//(m-22 が配列の番号となる 0番から始まる)
{
state =(state+1); //ステータスに1を加えて現在の(着番)
sw_in[m-22] =state; // [m-22](配列の番号)に state (着番)を代入 0番から始まる

if (state == 1) { //一着の場合のみ
if (m < 34){out_no = (m+20);} else{out_no = (m+28);}
//OUT54-61番 (ANALOG 0-7 番) を回避して62番から69番まで

digitalWrite(out_no,HIGH); //一着点灯 out_no は対応するアウトプットピン番号
digitalWrite(NO1,HIGH); //1着音 ON
digitalWrite(MON,HIGH); //表示モニタ ON
}
}}

// //////////////////////////////// リセット時の動作
if ((digitalRead(RESET) == HIGH)) //リセットボタンが押されたら
{
state =0; //着順フラグを0とする
digitalWrite(MON,LOW); //表示モニタ OFF
digitalWrite(NO1,LOW); //1着音 OFF

for (o=42; o<=69; o++) //42番ピンから61番ピンを
{
digitalWrite(o,LOW); //すべてLOWにして
}

for (a=0 ;a<20 ;a++) //配列sw_in[20] の初期化
{
sw_in[a] =0;
}

delay (300);
} }

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です