Arduino nanoとBME280、そしてC言語を使って、電子おもちゃを作ろうとしております。
動作としては、BME280で得た気温の数値によってLEDの光り方を変化させるというものです。
それを作るべくC言語をいろいろ編集していたところ、IF文の作成のところで躓いてしまいました。
最初、BME280から気温等をインプットし、シリアルモニタに出力するコードを作りました。
そして、無事出力できました。
#include "BME280_MOD-1022.h"
#include "Wire.h"
// added my code here
int ledPin1 = 9;
int ledPin2 = 6;
int ledPin3 = 3;
float tempe;
void printFormattedFloat(float x, uint8_t precision) {
char buffer[10];
dtostrf(x, 7, precision, buffer);
Serial.print(buffer);
}
// print out the measurements
void printCompensatedMeasurements(void) {
float temp, humidity, pressure, pressureMoreAccurate;
double tempMostAccurate, humidityMostAccurate, pressureMostAccurate;
char buffer[80];
temp = BME280.getTemperature();
humidity = BME280.getHumidity();
pressure = BME280.getPressure();
pressureMoreAccurate = BME280.getPressureMoreAccurate();
tempMostAccurate = BME280.getTemperatureMostAccurate();
humidityMostAccurate = BME280.getHumidityMostAccurate();
pressureMostAccurate = BME280.getPressureMostAccurate();
printFormattedFloat(tempMostAccurate, 2);
Serial.print(" ");
printFormattedFloat(humidityMostAccurate, 2);
Serial.print(" ");
printFormattedFloat(pressureMostAccurate, 2);
Serial.println();
}
// setup wire and serial
void setup()
{
// added my code here
analogReference(DEFAULT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
Wire.begin();
Serial.begin(9600);
pinMode(16,INPUT);
pinMode(17, OUTPUT);
digitalWrite(17,0);
}
// main loop
void loop()
{
uint8_t chipID;
chipID = BME280.readChipId();
Serial.print("ChipID = 0x");
Serial.print(chipID, HEX);
// need to read the NVM compensation parameters
BME280.readCompensationParams();
BME280.writeOversamplingPressure(os1x);
BME280.writeOversamplingTemperature(os1x);
BME280.writeOversamplingHumidity(os1x);
BME280.writeMode(smForced);
while (BME280.isMeasuring()) {
Serial.println("Measuring...");
delay(50);
}
Serial.println("Done!");
// read out the data - must do this before calling the getxxxxx routines
BME280.readMeasurements();
Serial.print("Temp=");
Serial.println(BME280.getTemperature()); // must get temp first
Serial.print("Humidity=");
Serial.println(BME280.getHumidity());
Serial.print("Pressure=");
Serial.println(BME280.getPressure());
Serial.print("PressureMoreAccurate=");
Serial.println(BME280.getPressureMoreAccurate()); // use int64 calculcations
Serial.print("TempMostAccurate=");
Serial.println(BME280.getTemperatureMostAccurate()); // use double calculations
Serial.print("HumidityMostAccurate=");
Serial.println(BME280.getHumidityMostAccurate()); // use double calculations
Serial.print("PressureMostAccurate=");
Serial.println(BME280.getPressureMostAccurate()); // use double calculations
// added my code here
tempe = BME280.getTemperature();
if((tempe>=20.0)&&(tempe<25.0))
{
digitalWrite(ledPin1,1);
delay(1000);
digitalWrite(ledPin1,0);
}
else if((tempe>=25.0)&&(tempe<30.0))
{
digitalWrite(ledPin2,1);
delay(1000);
digitalWrite(ledPin2,0);
}
else if(tempe>=30.0)
{
digitalWrite(ledPin3,1);
delay(1000);
digitalWrite(ledPin3,0);
}
// Example for "indoor navigation"
// We'll switch into normal mode for regular automatic samples
BME280.writeStandbyTime(tsb_0p5ms); // tsb = 0.5ms
BME280.writeFilterCoefficient(fc_16); // IIR Filter coefficient 16
BME280.writeOversamplingPressure(os16x); // pressure x16
BME280.writeOversamplingTemperature(os2x); // temperature x2
BME280.writeOversamplingHumidity(os1x); // humidity x1
BME280.writeMode(smNormal);
while (1) {
while (BME280.isMeasuring()) {
}
// read out the data - must do this before calling the getxxxxx routines
BME280.readMeasurements();
printCompensatedMeasurements();
delay(1000); // do this every 5 seconds
}
}
](d5f57a3c50123a76fc5a93fb1f83cee7.jpeg)
こちらが前回の投稿です。
https://teratail.com/questions/135535
今回の質問は、こちらのコードがうまく動かないことです。
エラーも出ないのですが、LEDも光りません。
どこが問題か教えてください・・・。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
まずはLEDをつけるだけのコードを書きましょう。
そのコードの動作が確認できたら、元のコードに割り当てていけばよろしいかと。
- LED1を1秒点灯
- LED2を1秒点灯
- LED3を1秒点灯
- 1に戻る
こういうコードを書いてみてください
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.22%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
y_waiwai
2018/07/13 18:07
で、しつもんはなんでしょうかw
Shokotao
2018/07/13 18:13
書き忘れていました。ただいま編集しました。