ここから本文です

PIC12F675でブレッドボードに回路を組んでLEDをON-OFFしたいです。 C言語でプログ...

アバター

ID非公開さん

2018/1/1403:13:55

PIC12F675でブレッドボードに回路を組んでLEDをON-OFFしたいです。
C言語でプログラムを書いていますが中々うまくいきません。

GP1、2に300Ωの抵抗とLED
GP3,4に10k抵を抗介して12v入力、10kプルダウン

希望動作は
1 GP3がHiの時、GP2がHi、GP1はLo。
2 GP4がHiの時、GP1がHo、GP2はLo。
3 GP3とGP4がHiの時、GP1がLo、GP2はHi。

1,2はif文でできたのですが3がどうしてもできません。
ご教授お願い致します。

閲覧数:
68
回答数:
4
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

kas********さん

2018/1/1821:04:05

ifの中でアンドでつなげると良いです。どういうことかというと
if(gp3==1&&gp4==1){
gp1=0;
gp2=1;

↑gp3などの変数は1,二のように置き換えてください
みたいに二つの論理式を&&でつなげば二つが満たされた時だけtrueが返されます

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この質問は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

kaw********さん

2018/1/1410:26:59

■③の中には①②の条件も含むから
①if (GP3=Hi and GP4=Low)・・・
②if (GP3=Low and GP4=Hi)・・・
③if (GP3=Hi and GP4=Hi)・・・
の様にどの条件にも必ずGP3とGP4を入れると良い。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

プロフィール画像

カテゴリマスター

qui********さん

2018/1/1409:30:55

10Kプルダウンはもう少し抵抗値下げたほうが(あるいは直列の抵抗値を大きくしたほうが)いいかと思います。分圧して5Vチョイ下(12Vがどれくらいの変動をもっているかにもよりますが)ぐらいを目標に。

で、その「希望動作」ですが、並び替えて表にしてみると
GP3/GP4>GP1/GP2
H/L>L/H
L/H>H/L
H/H>L/H
L/L>規定なし

そうすると、実はGP3がHならばGP1がL,GP2がHは確定している、というのが見えてきます。GP3がLのときだけ、GP4を調べてHならGP1をH,GP2をLにすればいい、ですね。

ざっとこんな構成になるでしょうか。
if(GP3がH){
GP1をL
GP2をH
}else if(GP4がH){
GP1をH
GP2をL
}
//必要に応じてelseでGP3,4ともLの時を記述

もちろん、もっとベタに
if(GP3がH && GP3がL){
GP1をL
GP2をH
}else if(GP3がL && GP4がH){
GP1をH
GP2をL
}else if(GP3がH && GP4がH){
GP1をL
GP2をH
}//必要に応じてelseでGP3,4ともLの時を記述:ifは不要
でも動きはしますが、ちょっと練れてない感が出るかもしれません。動作変更にはこちらの方が対応しやすいかも。

if~else ifの羅列より少しベタ感を和らげるなら、
int in;
int g1,g2;
in=(GP3がL?0:1) + (GP4がL?0:2);
switch(in&3){
case 0:
//GP3,4ともLのときの動作
break;
case 1: //GP3がH, GP4がL
g1=0;
g2=1;
break;
case 2: //GP3がL,GP4がH
g1=1;
g2=0;
break;
case 3: //GP3,GP4ともH
g1=0;
g2=1;
break;
}
GP1=g1;
GP2=g2;

みたいな構成にしてみるのもアリでしょう。

nac********さん

2018/1/1404:02:59

まず、12V入力ですが、直接12Vを入れると壊れます。
分圧等をして正しい電圧を入力してください。

で、希望動作ですが、1,2,3番は単独なのでしょうか?

※「同時」なら1と3は結果が同じなので、条件はGP3がHIGHだけです。
けれども2と3の条件だと「同時」なら、成立しません。
逆に「単独」にすると、当然動作コードは可能ですけど、「それ以外の時」の
動作が書いていません。例えば1番なら、GP3がHIGHがLOWのときはどうする つもりなのでしょうか?


で、3番は
if(GPIO3==1 && GPIO4==1){
GPIO1=0;
GPIO2=1;
}else{
// GPIO1=0;
// GPIO2=0;
}
のような感じです。

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

せっかくの機会が台無しです

みんなのアンテナ

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる