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

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

ただいまの
回答率

90.51%

  • Arduino

    539questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 100

Shokotao

score 2

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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • y_waiwai

    2018/07/13 18:07

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

    キャンセル

  • Shokotao

    2018/07/13 18:13

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

    キャンセル

回答 1

checkベストアンサー

0

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


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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/13 18:27

    できました!

    キャンセル

  • 2018/07/13 21:03

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

    キャンセル

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

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Arduino

    539questions

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