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

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

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

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

Q&A

解決済

4回答

554閲覧

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

seaboy

総合スコア11

C

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

0グッド

1クリップ

投稿2018/07/10 01:26

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

C

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

よろしくお願いします。

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

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

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

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

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

guest

回答4

0

ベストアンサー

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

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

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

[追記]

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

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

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

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

投稿2018/07/15 09:48

編集2018/07/15 11:40
pepperleaf

総合スコア6383

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

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

0

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

投稿2018/07/15 05:42

a_saitoh

総合スコア702

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

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

0

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

投稿2018/07/14 11:37

cateye

総合スコア6851

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

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

0

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

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

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

投稿2018/07/10 01:35

nob.

総合スコア711

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

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

seaboy

2018/07/10 01:49 編集

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

2018/07/10 12:17

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問