• 締切済み

Ardinoについて…

C言語プログラミングについて…以下の文でスイッチ「RedSwitch(赤スイッチ)」が押された回数だけ後で光るというプログラミングを「switch case」文で作ったものがある。この「switch case」文を「if」文、もしくは「if else」に変換して同じプログラミングを作りなさいという課題が出て、うまくスイッチの押した回数が読み込めません。となたか解説お願いします。 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)

noname#220339
noname#220339

みんなの回答

回答No.1

Arduinoは良く知らないですが、Cの構文的には次のようになるんじゃないですかね? void sw_check(void) { if (SW_RedSwitch == 0) { if ( digitalRead(2)==SW_ON ) SW_RedSwitch=1; } else { if ( digitalRead(2)==SW_OFF ) SW_RedSwitch=2; } } void blink(void) 良く知りませんが(っつーか手元にArduinoもないんで確かめようがないです)。

関連するQ&A

  • 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(); } }

  • switch文かif文か?

    スイッチ(SW50~SW80)を押したら、それに対応したコマンドを送る。というものを作っています。 スイッチはスライドスイッチなので、 1)ON(0)の間だけコマンドを出して、OFF(1)は止める。 2)ONしている間に別のスイッチが入ったら止める。 という風に組みたいのですが、中々上手くいきません。 8ピンのスライドスイッチなのですが、1~4はIDとして、5~8をコマンドとして使います。 なので、1~4は絶対にONになります。とすると、2)にしたいとき、defaultが使えなくて…if文を入れたらややこしくなりました。 もっと簡潔に、かつ解りやすく書くにはどうしたらいいでしょうか? #define SW1 input(PIN_C0) // ID #define SW2 input(PIN_C1) // ID #define SW3 input(PIN_C2) // ID #define SW4 input(PIN_C3) // ID #define SW50 PIN_C4 #define SW60 PIN_C5 #define SW70 PIN_C6 #define SW80 PIN_C7 uchar LED_ON(void){ uchar DATA; DATA=0x50; DATA+=0x4F; DATA+=0x4E; return(DATA); } uchar LED_OFF(void){ uchar DATA; DATA=0x50; DATA+=0x4F; DATA+=0x46; return(DATA); } void LED(void){ ulong n; uchar DATA; while(1){ WriteFSKbyte(DATA); switch(n){ case SW50:DATA=LED_ON(); if((SW50||SW60||SW80)==0){ DATA=LED_OFF(); } break; case SW60:while(SW60==0){ DATA=LED_ON(); DelayMs(1000); DATA=LED_OFF(); DelayMs(1000); if((SW50||SW70||SW80)==0) break; } break; case SW70:while(SW70==0){ DATA=LED_ON(); DelayMs(500); DATA=LED_OFF(); DelayMs(500); if((SW50||SW60||SW80)==0) break; } break; case SW80:DATA=LED_OFF(); if((SW50||SW60||SW80)==0){ DATA=LED_OFF(); } break; } } }

  • 文字列を判断して処理をする書き方

    2バイトの文字列の中身によって違う処理をするプログラムを作成しています。 数値ならば、 switch(no){ case 10: 処理1 break; case 20 処理2 break; ・ ・ ・ } と書けるのですが、文字列だと if(strncmp(no,"10",2) == 0){ <処理1> }else if(strncmp(no,"20",2) == 0){ <処理2> }else if ・ ・ ・ } というような書き方しか分かりません。数値同様にswitch文できれいに書くような方法はありませんでしょうか? もしくはこうすればスマートに書けるというようなものがあればお教えください。よろしくお願いします。

  • switch文について

    お世話になります。switch文について教えてください。 分岐の条件を複数使用することは出来ますか。 たとえば switch(a) [ case "1": if (x == "0") { document.write(1x0); } else if (x == "1") { document.write(1x1); else { document.write(1x); break; } case "2": if (x == "0") { document.write(2x0); } else if (x == "1") { document.write(2x1); else if (y == "0") { document.write(2y0); else { document.write(2x); break; ] という構文は可能ですか。 case 2でx yの二分岐しても可能ですか。 教えてください。

    • ベストアンサー
    • Java
  • switch の範囲指定

    switch文で以下のように書いた時に処理はCを実行するのですが、 変数a が 0~9の時に こうしますよ と範囲がまだ狭い時はこのように書いても処理はできると思いますが 変数a の範囲が 0~99だった場合、いちいちcase を100回書いて(defaultを使えば処理は減るだろうけど) と数字を100回書かないといけないのはとても面倒だと思うのです。 そこで以下のようにifを使わずにswitchを使って範囲を指定する方法はありませんか? //ifを使った場合の範囲指定 if( ( 0 <= a ) && ( a < 25 ) ){ //略 } else if( ( 25 <= a ) && ( a < 50 ) ){ //略 } else if( ( 50 <= a ) && ( a < 75 ) ){ //略 } else if( ( 75 <= a ) && ( a < 100 ) ){ //略 } //ソース int a = 6; switch( a ){   case 0: case 1:     //処理A     break;   case 2: case 3: case 4:     //処理B     break;   case 5: case 6:     //処理C     break;   case 7: case 8: case 9:     //処理D     break; }

  • ヘッダ(*.h)に定義したテーブルでの出力制御について

    現在、いわゆる組み込み制御の技術者としてC言語によるマイコン制御のソフトウェア開発を行っていて、スイッチの出力を制御する仕組みを考えています。 状態(2状態):S00、S01 スイッチ(2スイッチ):SW1、SW2 出力:ON、OFF 実際には状態もスイッチも出力もこれより多く複雑なのですが、簡単に説明させていただきます。 自分としては簡単にswitch文で制御すればいいだろうと思い、設計していたのですが、それでは無駄にコーディングが必要になってしまうのでダメだと上司に言われ、ヘッダ(sw_out.h)でテーブルを持って、Cソース(sw_out.c)では簡単なコードにできないか?と言われました。その方が後のメンテナンスが簡単だと言われました。 上司の言っていることは分かるのですが、実際にコードとしてどのように記述したらいいのか分かりません。 そこで、このような制御を実現するC言語(*.h,*.c)の記述の方法を分かる方、御教授よろしくお願いします。 以下に、スイッチ出力の判定を行うテーブルと自分の最初の考え方のソースコードを記します。 ******S00****S01** SW0*SW_ON**SW_OFF* SW1*SW_OFF*SW_ON** [sw_out.h] #define S00 0x00 /* 状態0 */ #define S01 0x01 /* 状態1 */ #define SW0 0x00 /* スイッチ0 */ #define SW1 0x01 /* スイッチ1 */ #define SW_OFF 0x00 /* 出力OFF */ #define SW_ON 0x01 /* 出力ON */ [sw_out.c] #include "sw_out.h" int sw_out(int state, int sw) { int out; out = SW_OFF; switch(state){ case S00: switch(sw){ case SW0: out = SW_ON; break; case SW1: out = SW_OFF; break; } break; case S01: switch(sw){ case SW0: out = SW_OFF; break; case SW1: out = SW_ON; break; } break; } return out; }

  • switch文で文字を比較することは出来ませんか?

    switch文で文字を比較することは出来ませんか? 例えば… int main(void){ char buf[5]; buf = 'b'; switch(buf){ case 'a': ・  ・  ・  break; case 'b': ・  ・  ・  break; }

  • C言語で電卓を作成する。

    C言語を用いて三項まで計算できる電卓を作りたいのですが、どうも上手くいきません。 四則演算(+、-、×、÷)の優先順位を用いたプログラミング方法が分かりません。 以下に自分で作成したソースを添付します。 このソースに修正や追加して3項までの四則演算できるプログラミングを教えていただけますか? 宜しくお願いします。 #include <stdio.h> int main(void) { int answer; /*答え*/ int x,y,z; /*x=第一項,y=第二項,第三項*/ char op1,op2; /*演算子1、演算子2*/ while(1){ printf("式を入力してください\n"); printf("式:"); scanf("%d %c %d %c %d" ,&x,&op1,&y,&op2,&z); if((op1=='+'|'-'|'*'|'/') && (op2=='+'|'-'|'*'|'/')){ switch(op2){ case '+': answer=y+z; break; case '-': answer=y-z; break; case '*': answer=y*z; break; case '/': if(z==0){ printf("ERROR\n"); return 0; } answer=y/z; break; default: printf("ERROR\n"); return 0; } switch(op1){ case '+': answer=x+answer; break; case '-': answer=x-answer; break; case '*': answer=x*answer; break; case '/': if(y==0){ printf("ERROR\n"); return 0; } answer=x/answer; break; default: printf("ERROR\n"); return 0; } printf("答え:%d\n",answer); } else { switch(op1){ case '+': answer=x+y; break; case '-': answer=x-y; break; case '*': answer=x*y; break; case '/': if(y==0){ printf("ERROR\n"); return 0; } answer=x/y; break; default: printf("ERROR\n"); return 0; } printf("答え:%d\n",answer); } } } 左辺に×、÷が来ても優先的に計算されません。

  • C言語のswitch case文で、scanfでキーボードから読み込ん

    C言語のswitch case文で、scanfでキーボードから読み込んだ1~12の値によって画面に季節を、3~5は"春"、6~8は"夏"・・・というふうに表示させるプログラムなのですが、if文を使わずにswitch caseで作るには case 3: case 4: case 5:puts("春"); break; ・ ・ ・ と1個1個記述するしかないのでしょうか? もし比較演算子と論理演算子を使って 3<= && <=5 こんな感じに1行にまとめることができるなら教えてください。

  • switch文で2つ以上の変数の値を比較するときの書き方

    switch($i,$j){ case "1","2": process1; break; case "3","4": process1; break; } のような書き方はできますか? あるいは、これと同じような書き方をif文以外でする方法があれば教えて下さい。

    • ベストアンサー
    • PHP