前の状態を保持するプログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
素人

前の状態を保持するプログラム

#1

投稿記事 by 素人 » 10年前

直前の状態を保持するプログラムについて教えてください。

RB0: SW1 (SWは、ONで0入力)
RB1: SW2 (SWは、ONで0入力)

SW1、SW2両方がONされたとき、case0の処理
SW1のみONされたとき、case1の処理
SW2のみONされたとき、case2の処理

SW1,SW2両方OFFのとき、つまり、case3のとき、
1つ前の状態を出力したいのですが、プログラムが分かりません。

1つ前の動作で、SW1のみONされていたなら、
次に、SW1,SW2の両方がOFFになったときは、SW1のみONされていたときと同じ状態を出力する。
→つまり、前の状態を保持するプログラムを記述したいです。

素人質問で申し訳ありませんが、教えていただけると助かります。

void main(void){
int i,j,k;
int s;
i=0;
j=0;
k=0;
delay_ms(100);
while(1){  
s = PORTB & 0x03;
switch(s){
case 0: LATCbits.LATC4 = 0;
LATCbits.LATC5 = 0;
i=1;
break;
case 1: LATCbits.LATC4 = 0;
LATCbits.LATC5 = 1;
j=1;
break;
case 2: LATCbits.LATC4 = 1;
LATCbits.LATC5 = 0;
k=1;
break;
case 3:
if (i=1){
LATCbits.LATC4 = 1;
LATCbits.LATC5 = 1;
i=0;
}
else if (j=1){
LATCbits.LATC4 = 0;
LATCbits.LATC5 = 1;
j=0;
}
else if (k=1){
LATCbits.LATC4 = 1;
LATCbits.LATC5 = 0;
k=0;
}

break;
default:break;
}
}
}

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: 前の状態を保持するプログラム

#2

投稿記事 by usao » 10年前

普通に何らかの変数に状態を保持するのではダメなのでしょうか?

コード:

状態 last_state = 初期状態;
...
while( 1 )
{
  SW1,SW2のON/OFF状況の取得

  if(  SW1、SW2両方がON  ){  last_state = "case0の処理"の結果;  }
  else if(  SW1のみON  ){  last_state ="case1の処理"の結果;  }
  else if(  SW2のみON  ){  last_state ="case2の処理"の結果;  }

  状態last_stateの出力
}
...

素人

Re: 前の状態を保持するプログラム

#3

投稿記事 by 素人 » 10年前

返信ありがとうございます。

変数に格納する方法で試しているつもりなのですが…うまくできておりません。
Switchの状態を変数swに格納。
swの値に応じて、
sw=0のとき、 case 0の処理 
sw=1のとき、 case 1の処理
sw=2のとき、 case 2の処理   としていて、
sw=3のときに、1つ前の状態(case 0 又は case 1又は case 2)の処理を行いたいです。

case 0 , case 1, case 2の処理をそれぞれ変数i, j, kを使ってフラグを立てているつもりなのですが…うまく動作してくれません。
素人で良く理解できていないのかもしれません。
教えてください。

s = PORTB & 0x03;
switch(s){
case 0: LATCbits.LATC4 = 0;
LATCbits.LATC5 = 0;
i=1;
break;
case 1: LATCbits.LATC4 = 0;
LATCbits.LATC5 = 1;
j=1;
break;
case 2: LATCbits.LATC4 = 1;
LATCbits.LATC5 = 0;
k=1;
break;

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: 前の状態を保持するプログラム

#4

投稿記事 by usao » 10年前

オフトピック
>うまく動作してくれません。

こういう説明だと情報量がゼロに等しく,何が起こっているのかを読み手が把握できません.
うまく(思ったように)動作しない のであれば,うまくない動作をしているのでしょうから
どういう状況になっているのかを具体的に述べた方が適切な回答を得られやすいと思います.

あと,フォーラムルールの「ソースコードタグの使い方」のところを読んで
コードを見やすい形にしていただけると読み易くて助かります.

>変数i, j, kを使ってフラグを立てている

フラグを参照している箇所が
if( i=1 ) とかになっていますが,if( i==1 ) とすべきかと思います.
あと,フラグが2個以上立っている場合があり得そうですが,それは意図した形なのでしょうか.

素人

Re: 前の状態を保持するプログラム

#5

投稿記事 by 素人 » 10年前

if(i==1)で解決しました。ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る