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

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

ただいまの
回答率

90.50%

  • C

    3691questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

こちらのC言語について解説をお願いいたします。

解決済

回答 4

投稿

  • 評価
  • クリップ 1
  • VIEW 302

seaboy

score 3

授業でCを使って電子おもちゃを作っているのですが、コードの意味が全く分からず困っています。
以下のコードは湿度温度センサーを動かす際に利用したコードです。詳しい解説をよろしくお願いいたします。

#include "BME280_MOD-1022.h"
#include <Wire.h>

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()
{
  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

  // 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
  }
}

よろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 4

checkベストアンサー

0

コメントでのリンクの貼り方が分からないので、こちらに記載します。

"BME280搭載 温湿度・気圧センサモジュール"のページに色々と参考情報がありました。
"AmbientでIoTをはじめよう"は具体的な方法があるようです。

こちらは見られたでしょうか?
機器固有の処理が多く、経験者でないと、理解には結構な時間がとられます。

[追記]

この工作でやりたいことはこのBMEで気温や湿度を読み取り、その数値によって出力のLEDを変化させるということをやりたいです。

可能です、、、と書きたかったのですが、、。

BME280.getTemperature()でBMEから温度を読みだして、tempに代入していますよね??

確かに代入しています。その値が温度なので、if文での判定は可能です。 で、出力のLED ... と思って、BME280を見たら、LEDが見当たらない。別モジュールですね。LED出力方法についての情報が無い(見つけられなかった)ので、どうすべきかは分かりません。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

コードをざっと見ましたが、関数呼び出しと代入がほとんどのようです。
これ以上の事は、このコードの作者に聞くしかないと思います。

BME280.getTemperature()
って、MBE280から温度を読み出しているように見えますが、ほんとにそうかどうか、
第三者には分かりません。

「コードの意味」なんて、コードの作者にしか分かりません。
元コードの作成者が書いた、仕様書とか解説書を探してください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/07/10 10:48 編集

    なるほど、作成者に聞かなければ分からないのですね。
    ありがとうございます。1つだけ質問させてください。
    BME280.getTemperature()でBMEから温度を読みだして、tempに代入していますよね??
    その代入された数値を使って条件分岐で条件によってLEDへの出力を変化させることってできますか?

    この工作でやりたいことはこのBMEで気温や湿度を読み取り、その数値によって出力のLEDを変化させるということをやりたいです。
    返信よろしくお願いします。

    キャンセル

  • 2018/07/10 21:17

    ハード、ソフトの環境が分からないので、出来るかどうか不明です。
    「このコードを使うように」と指示されたのでしょうか?
    それなら出来るでしょう。
    私に言えるのはこれぐらいです。
    課題を出した先生に聞いて下さい。

    キャンセル

0

直接の回答ではありませんが・・・MBE280については、下記ページに説明があるようですが確認しましたか?
BME280 MOD-1022 Weather Multi Sensor

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

BME280_MOD-1022.hのなかで何が定義されているかと、BME280 温度湿度気圧センサーの仕様書を並べて見比べないと、プログラムの意味はわかりません。
ただ、常識的に見て、メソッド名を英語だと思って和訳したらだいたい当たってると期待はしてよいとおもいます。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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

  • C

    3691questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。