質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

2回答

3457閲覧

水を検知するプログラムを書いていて直前の値と今の値を用いてif,elseを使いたいと思っているのですがうまく作動しません。

ananasie

総合スコア8

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2016/12/04 01:16

###前提・実現したいこと
Arduinoで水センサーを用いて水を検出した時のみ光らせるプログラムを作りたいと思っています。前回水を検出せず、今回検出したら光るというプログラムです。
私自身ついこないだarduinoやプログラムに触れ始めたばかりで初心者です。どこで質問していいのかもわからないのでここで質問させていただきます。

###発生している問題・エラーメッセージ
if,elseを用いて書いてみたのですが常にelse側になってしまいうまく作動しません。エラーメッセージなどはないです。

###該当のソースコード

#define Moi_detect 12 #define led 13 int val = 0; int old_val = 0; void setup() { // put your setup code here, to run once: pinMode(Moi_detect,INPUT); pinMode(led,OUTPUT); } void loop() { val = !digitalRead(Moi_detect); if((val = HIGH) && (old_val = LOW)){ digitalWrite(led,HIGH); delay(1000); }else{ digitalWrite(led,LOW); delay(1000); } val = old_val; }

###試したこと
初心者ながら

val = old_val ```がうまく置き換わってないと思います ###補足情報(言語/FW/ツール等のバージョンなど) 使っている個体はarduino yunで次は水を検知したらBlynkを通じてスマホに通知させようと思っています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

if((val = HIGH) && (old_val = LOW)){

if((val == HIGH) && (old_val == LOW)){
にしてみましょう。
= ではなく== ですよ。

投稿2016/12/04 01:32

granfa_yuzo

総合スコア356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まずロジックの確認。
12番Pinに水分センサーを接続している。
水分センサーは恐らく水分が無い時はLOWで水分が存在したらHIGHになると仮定して、水分が無いから水分を検出したらLEDを光らす。水分を検出して以降はLEDを消す?でいいのでしょうか?
ならば単純に前回値がLOWからHIGHになった時だけLEDが点滅してloopで次に前回値が'HIGHで今回値もHIGH`であるからLEDを消す?もし持続してLEDを光らすならば前回値は必要なくて単純に今回値だけで点灯、消灯にするのでは?
仮に瞬間だけ光らすならば以下の単純なソースになります。

#define Moi_detect 12 #define led 13 //int val = 0; int old_val = LOW; int val; void setup() { // put your setup code here, to run once: pinMode(Moi_detect,INPUT); pinMode(led,OUTPUT); } void loop() { val = digitalRead(Moi_detect); if((val == HIGH) && (old_val == LOW)){ digitalWrite(led,HIGH); delay(1000); }else{ digitalWrite(led,LOW); delay(1000); } old_val = val; // old_val = val; }

投稿2016/12/04 05:45

編集2016/12/04 11:42
MasahikoHirata

総合スコア3747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ananasie

2016/12/04 11:34

moidetect_v2:14: error: 'val' was not declared in this scope val = digitalRead(Moi_detect); ^ exit status 1 'val' was not declared in this scope このようなエラーが出てしまいました。
MasahikoHirata

2016/12/04 11:41

失礼しました。`val`と`old_val`の定義を見落としておりました。 int val;とint old_val;を記載しましょう。回答を修正いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問