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

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

新規登録して質問してみよう
ただいま回答率
85.35%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Arduino

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

Q&A

解決済

2回答

1782閲覧

Arduino:温度センサの出力値によってサーボモータの動作が変わるプログラムについて

Comm

総合スコア3

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Arduino

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

0グッド

0クリップ

投稿2020/07/10 08:15

現在,Aruduinoで温度センサの出力値によってサーボモータの動作が変わるプログラムを作成しています.指定した温度ごとのサーボモータの動作を確認するため,サーボモータの回転角度は統一し,待機時間を変更しています.
動作内容は,
気温が18℃以上30℃以下の場合は,待機時間を3000ミリ秒に,
気温が10℃より高く18℃より低い場合,または30℃より高く35℃より低い場合は待機時間を2000ミリ秒に,
それ以外の気温では,サーボモータを動作しない
といったものです.

しかし,実際に書いたプログラムでは,どの気温でも待機時間が3000ミリ秒となってしまい,想定していた動作をしませんでした.また,回路を確認しましたが,問題はありませんでした.
エラーもなく,どこが間違っているかがわからないため,教えていただきたいです.
よろしくお願いします.

該当のソースコード

#include<Servo.h> const int THERMISTOR=0; //温度センサが接続されているピン const int SERVO=9; //サーボモータが接続されているピン Servo servo; //サーボモータ void setup() { Serial.begin(9600); servo.attach(SERVO); //サーボモータをピンに接続 } void loop() { int v; float temp; v=analogRead(THERMISTOR); temp=(v*5000.0/1024-500.0)/10.0; //温度に変換 if(18.0<=temp<=30.0){ //気温が18℃以上30℃以下の場合 Serial.println(temp); //シリアル通信で値を送信 delay(0); servo.write(0); delay(3000); servo.write(90); delay(3000); }else if(10.0<temp<18.0){ //気温が10℃より高く18℃より低い場合 Serial.println(temp); delay(0); servo.write(0); delay(2000); servo.write(90); delay(2000); }else if(30.0<temp<=35.0){ //気温が30℃より高く35℃より低い場合 Serial.println(temp); delay(0); servo.write(0); delay(2000); servo.write(90); delay(2000); }else{ //10℃より低いまたは35℃より高い場合 Serial.println(temp); //シリアル通信で値を送信 delay(0); //サーボモータ不動 servo.write(0); delay(0); } } コード

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

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

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

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

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

guest

回答2

0

ベストアンサー

これは:

18.0<=temp<=30.0

こう解釈されて:

(18.0<=temp)<=30.0

(18.0<=temp)01なので:

(0 または 1)<=30.0

となるので常に成り立ちます。

こう書いて下さい:

18.0<=temp && temp<=30.0

投稿2020/07/10 08:19

ozwk

総合スコア13553

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

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

Comm

2020/07/10 08:28

回答ありがとうございます. おかげさまでプログラムが正常に動作しました.
guest

0

if(18.0<=temp<=30.0){ //気温が18℃以上30℃以下の場合

比較文が間違ってます
こういう使い方はできません

if((18.0<=temp)<=30.0){

こういう動作となってしまいます

投稿2020/07/10 08:17

y_waiwai

総合スコア88042

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

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

Comm

2020/07/10 08:29

ご指摘ありがとうございます。 勉強になりました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問