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

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

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

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

Q&A

解決済

1回答

1752閲覧

BME280で取得した数値によってLEDの出力を変えたい(続編)

Shokotao

総合スコア8

Arduino

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

0グッド

0クリップ

投稿2018/07/13 09:04

編集2018/07/13 09:13

Arduino nanoとBME280、そしてC言語を使って、電子おもちゃを作ろうとしております。
動作としては、BME280で得た気温の数値によってLEDの光り方を変化させるというものです。
それを作るべくC言語をいろいろ編集していたところ、IF文の作成のところで躓いてしまいました。
最初、BME280から気温等をインプットし、シリアルモニタに出力するコードを作りました。
そして、無事出力できました。

c

1#include "BME280_MOD-1022.h" 2#include "Wire.h" 3 4// added my code here 5int ledPin1 = 9; 6int ledPin2 = 6; 7int ledPin3 = 3; 8float tempe; 9 10void printFormattedFloat(float x, uint8_t precision) { 11char buffer[10]; 12 dtostrf(x, 7, precision, buffer); 13 Serial.print(buffer); 14} 15 16// print out the measurements 17void printCompensatedMeasurements(void) { 18float temp, humidity, pressure, pressureMoreAccurate; 19double tempMostAccurate, humidityMostAccurate, pressureMostAccurate; 20char buffer[80]; 21 temp = BME280.getTemperature(); 22 humidity = BME280.getHumidity(); 23 pressure = BME280.getPressure(); 24 pressureMoreAccurate = BME280.getPressureMoreAccurate(); 25 tempMostAccurate = BME280.getTemperatureMostAccurate(); 26 humidityMostAccurate = BME280.getHumidityMostAccurate(); 27 pressureMostAccurate = BME280.getPressureMostAccurate(); 28 printFormattedFloat(tempMostAccurate, 2); 29 Serial.print(" "); 30 printFormattedFloat(humidityMostAccurate, 2); 31 Serial.print(" "); 32 printFormattedFloat(pressureMostAccurate, 2); 33 Serial.println(); 34} 35 36 37 38// setup wire and serial 39 40void setup() 41{ 42 // added my code here 43 analogReference(DEFAULT); 44 pinMode(ledPin1, OUTPUT); 45 pinMode(ledPin2, OUTPUT); 46 pinMode(ledPin3, OUTPUT); 47 48 Wire.begin(); 49 Serial.begin(9600); 50 pinMode(16,INPUT); 51 pinMode(17, OUTPUT); 52 digitalWrite(17,0); 53} 54 55// main loop 56void loop() 57{ 58 uint8_t chipID; 59 chipID = BME280.readChipId(); 60 Serial.print("ChipID = 0x"); 61 Serial.print(chipID, HEX); 62 63 // need to read the NVM compensation parameters 64 BME280.readCompensationParams(); 65 66 BME280.writeOversamplingPressure(os1x); 67 BME280.writeOversamplingTemperature(os1x); 68 BME280.writeOversamplingHumidity(os1x); 69 70 BME280.writeMode(smForced); 71 while (BME280.isMeasuring()) { 72 Serial.println("Measuring..."); 73 delay(50); 74 } 75 Serial.println("Done!"); 76 // read out the data - must do this before calling the getxxxxx routines 77 BME280.readMeasurements(); 78 Serial.print("Temp="); 79 Serial.println(BME280.getTemperature()); // must get temp first 80 Serial.print("Humidity="); 81 Serial.println(BME280.getHumidity()); 82 Serial.print("Pressure="); 83 Serial.println(BME280.getPressure()); 84 Serial.print("PressureMoreAccurate="); 85 Serial.println(BME280.getPressureMoreAccurate()); // use int64 calculcations 86 Serial.print("TempMostAccurate="); 87 Serial.println(BME280.getTemperatureMostAccurate()); // use double calculations 88 Serial.print("HumidityMostAccurate="); 89 Serial.println(BME280.getHumidityMostAccurate()); // use double calculations 90 Serial.print("PressureMostAccurate="); 91 Serial.println(BME280.getPressureMostAccurate()); // use double calculations 92 93 // added my code here 94 tempe = BME280.getTemperature(); 95 if((tempe>=20.0)&&(tempe<25.0)) 96 { 97 digitalWrite(ledPin1,1); 98 delay(1000); 99 digitalWrite(ledPin1,0); 100 } 101 else if((tempe>=25.0)&&(tempe<30.0)) 102 { 103 digitalWrite(ledPin2,1); 104 delay(1000); 105 digitalWrite(ledPin2,0); 106 } 107 else if(tempe>=30.0) 108 { 109 digitalWrite(ledPin3,1); 110 delay(1000); 111 digitalWrite(ledPin3,0); 112 } 113 114 // Example for "indoor navigation" 115 // We'll switch into normal mode for regular automatic samples 116 117 BME280.writeStandbyTime(tsb_0p5ms); // tsb = 0.5ms 118 BME280.writeFilterCoefficient(fc_16); // IIR Filter coefficient 16 119 BME280.writeOversamplingPressure(os16x); // pressure x16 120 BME280.writeOversamplingTemperature(os2x); // temperature x2 121 BME280.writeOversamplingHumidity(os1x); // humidity x1 122 BME280.writeMode(smNormal); 123 124 while (1) { 125 while (BME280.isMeasuring()) { 126 } 127 128 // read out the data - must do this before calling the getxxxxx routines 129 BME280.readMeasurements(); 130 printCompensatedMeasurements(); 131 delay(1000); // do this every 5 seconds 132 } 133}

イメージ説明

こちらが前回の投稿です。
https://teratail.com/questions/135535

今回の質問は、こちらのコードがうまく動かないことです。
エラーも出ないのですが、LEDも光りません。
どこが問題か教えてください・・・。

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

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

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

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

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

y_waiwai

2018/07/13 09:07

で、しつもんはなんでしょうかw
Shokotao

2018/07/13 09:13

書き忘れていました。ただいま編集しました。
guest

回答1

0

ベストアンサー

まずはLEDをつけるだけのコードを書きましょう。
そのコードの動作が確認できたら、元のコードに割り当てていけばよろしいかと。


  1. LED1を1秒点灯
  2. LED2を1秒点灯
  3. LED3を1秒点灯
  4. 1に戻る

こういうコードを書いてみてください

投稿2018/07/13 09:15

編集2018/07/13 09:20
y_waiwai

総合スコア87774

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

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

Shokotao

2018/07/13 09:27

できました!
y_waiwai

2018/07/13 12:03

それができたら元コードに組み込みましょう
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問