- 締切済み
C言語プログラミングについて…Arduinoを用い
C言語プログラミングについて…Arduinoを用いて、以下の文でスイッチ「RedSwitch(赤スイッチ)」が押された回数だけ後で光るというプログラミングを作りました。次にその使用した「switch case」文を「if」文、もしくは「if else」に変換して同じプログラミングを作りなさいという課題が出て、いろいろと変えてみたのですが、シリアルモニタを見るとif文を用いた時に「RedSwitch」が押された「回数」ではなく連続的に?押した「秒数」をカウントして困ってます。どうやったら改善できるのでしょうかか?ご教授お願いしたします。 void sw_check(void) { switch(SW_RedSwitch) { case 0: if ( digitalRead(2)==SW_ON ) { SW_RedSwitch=1; } break; case 1: if ( digitalRead(2)==SW_OFF ) { SW_RedSwitch=2; } break; } } void blink(void) { digitalWrite(13,LED_ON); delay(500); digitalWrite(13,LED_OFF); delay(500); } void loop() { unsigned char SW_CNT=0,SW_TIME=0,i; while( (SW_TIME<100) || (SW_CNT==0) ) { sw_check(); if ( SW_RedSwitch==2 ) { SW_RedSwitch=0; SW_CNT++; SW_TIME=0; } SW_TIME++; delay(20); } for (i=1 ; i<=SW_CNT ; i++) { blink(); } }
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- teuaitou
- ベストアンサー率32% (10/31)
No.2です ツールと言っても、知識というが技術のことです。モデリングで使うUMLのようなものです。 今後、プログラミングを行うのであれば知っていて損はないと思います。習得するのに数時間程度の難易度だと思います。
- teuaitou
- ベストアンサー率32% (10/31)
具体的なコードの話が置いておいて、考え方の話しますね。 先ず処理の流れを、図示するツールは使えますか。ツールと言っても、何かしらのアプリとかじゃなく、フローチャートやPADのような手書きで出来るツールです。 そういったツールを使って、プログラムの処理の流れを書いていけば、自ずと問題点が見えてくると思います。
- neKo_quatre
- ベストアンサー率44% (735/1636)
例えば、1行ごとにprintfなんかで処理する内容を表示するようにして、switch使った場合、if使った場合での処理内容を比較し、何が足りないのか?余計なのか?を検討とか。 void sw_check(void) { printf("switch(SW_RedSwitch=%d)処理開始\n", SW_RedSwitch); switch(SW_RedSwitch) { case 0: printf(" case 0:を通過\n"); printf(" if ( digitalRead(2)==SW_ON )判定\n"); if ( digitalRead(2)==SW_ON ) { printf("判定はtrue\n"); printf("SW_RedSwitch=1\n"); SW_RedSwitch=1; } printf("break処理\n"); break; case 1: printf(" case 1:を通過\n"); printf(" if ( digitalRead(2)==SW_OFF )判定\n"); if ( digitalRead(2)==SW_OFF ) { printf("判定はtrue\n"); printf("SW_RedSwitch=2\n"); SW_RedSwitch=2; } printf("break処理\n"); break; } ~ だとか。 -- 気をつけるのは、digitalRead関数が何やってるか分かりませんが、 if ( digitalRead(2)==SW_OFF ) のdigitalReadの返り値が見たいからって、 printf("digitalRead(2)の返り値=%d\n", digitalRead(2)); if ( digitalRead(2)==SW_OFF ) とかってしちゃうと、printfで1回呼び出し、その後の処理で1回呼び出ししてしまい、例えば0と1を交互に返すような関数だったら、ふるまいが変わっちゃいます。 もしかして、if文で修正したプログラムの方でそういう事しちゃってると、動作が違ってるとか。 まぁ、デバッガ使える環境なら、もうちょっと楽だったりもしますが…。
補足
ご回答ありがとうございます。 現在そういったツールはないです。