Arduino nanoとBME280、そしてC言語を使って、電子おもちゃを作ろうとしております。
動作としては、BME280で得た気温の数値によってLEDの光り方を変化させるというものです。
それを作るべくC言語をいろいろ編集していたところ、IF文の作成のところで躓いてしまいました。
最初、BME280から気温等をインプットし、シリアルモニタに出力するコードを作りました。
そして、無事出力できました。
C
1void printFormattedFloat(float x, uint8_t precision) { 2char buffer[10]; 3 dtostrf(x, 7, precision, buffer); 4 Serial.print(buffer); 5} 6 7// print out the measurements 8void printCompensatedMeasurements(void) { 9float temp, humidity, pressure, pressureMoreAccurate; 10double tempMostAccurate, humidityMostAccurate, pressureMostAccurate; 11char buffer[80]; 12 temp = BME280.getTemperature(); 13 humidity = BME280.getHumidity(); 14 pressure = BME280.getPressure(); 15 pressureMoreAccurate = BME280.getPressureMoreAccurate(); 16 tempMostAccurate = BME280.getTemperatureMostAccurate(); 17 humidityMostAccurate = BME280.getHumidityMostAccurate(); 18 pressureMostAccurate = BME280.getPressureMostAccurate(); 19 printFormattedFloat(tempMostAccurate, 2); 20 Serial.print(" "); 21 printFormattedFloat(humidityMostAccurate, 2); 22 Serial.print(" "); 23 printFormattedFloat(pressureMostAccurate, 2); 24 Serial.println(); 25} 26 27 28// setup wire and serial 29 30void setup() 31{ 32 Wire.begin(); 33 Serial.begin(9600); 34 pinMode(16,INPUT); 35 pinMode(17,OUTPUT); 36 digitalWrite(17,0); 37} 38 39// main loop 40void loop() 41{ 42 uint8_t chipID; 43 chipID = BME280.readChipId(); 44 Serial.print("ChipID = 0x"); 45 Serial.print(chipID, HEX); 46 47 // need to read the NVM compensation parameters 48 BME280.readCompensationParams(); 49 50 BME280.writeOversamplingPressure(os1x); 51 BME280.writeOversamplingTemperature(os1x); 52 BME280.writeOversamplingHumidity(os1x); 53 54 BME280.writeMode(smForced); 55 while (BME280.isMeasuring()) { 56 Serial.println("Measuring..."); 57 delay(50); 58 } 59 Serial.println("Done!"); 60 // read out the data - must do this before calling the getxxxxx routines 61 BME280.readMeasurements(); 62 Serial.print("Temp="); 63 Serial.println(BME280.getTemperature()); // must get temp first 64 Serial.print("Humidity="); 65 Serial.println(BME280.getHumidity()); 66 Serial.print("Pressure="); 67 Serial.println(BME280.getPressure()); 68 Serial.print("PressureMoreAccurate="); 69 Serial.println(BME280.getPressureMoreAccurate()); // use int64 calculcations 70 Serial.print("TempMostAccurate="); 71 Serial.println(BME280.getTemperatureMostAccurate()); // use double calculations 72 Serial.print("HumidityMostAccurate="); 73 Serial.println(BME280.getHumidityMostAccurate()); // use double calculations 74 Serial.print("PressureMostAccurate="); 75 Serial.println(BME280.getPressureMostAccurate()); // use double calculations 76 77 // Example for "indoor navigation" 78 // We'll switch into normal mode for regular automatic samples 79 80 BME280.writeStandbyTime(tsb_0p5ms); // tsb = 0.5ms 81 BME280.writeFilterCoefficient(fc_16); // IIR Filter coefficient 16 82 BME280.writeOversamplingPressure(os16x); // pressure x16 83 BME280.writeOversamplingTemperature(os2x); // temperature x2 84 BME280.writeOversamplingHumidity(os1x); // humidity x1 85 BME280.writeMode(smNormal); 86 87 while (1) { 88 while (BME280.isMeasuring()) { 89 } 90 91 // read out the data - must do this before calling the getxxxxx routines 92 BME280.readMeasurements(); 93 printCompensatedMeasurements(); 94 delay(1000); // do this every 5 seconds 95 } 96}
そしてその後、if文を追加しました。そのコードが以下となります。
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// ここにLEDの変数を追加しました。 31int ledPin1; 32int ledPin2; 33int ledPin3; 34 35 36// setup wire and serial 37 38void setup() 39{ 40 Wire.begin(); 41 Serial.begin(9600); 42 pinMode(16,INPUT); 43 pinMode(ledPin1,OUTPUT); 44 pinMode(ledPin2,OUTPUT); 45 pinMode(ledPin3,OUTPUT); 46 digitalWrite(17,0); 47 48// それぞれの番号の場所に刺す様にしました。 49 ledPin1=9; 50 ledPin2=6; 51 ledPin3=3; 52} 53 54// main loop 55void loop() 56{ 57 uint8_t chipID; 58 chipID = BME280.readChipId(); 59 Serial.print("ChipID = 0x"); 60 Serial.print(chipID, HEX); 61 62 // need to read the NVM compensation parameters 63 BME280.readCompensationParams(); 64 65 BME280.writeOversamplingPressure(os1x); 66 BME280.writeOversamplingTemperature(os1x); 67 BME280.writeOversamplingHumidity(os1x); 68 69 BME280.writeMode(smForced); 70 while (BME280.isMeasuring()) { 71 Serial.println("Measuring..."); 72 delay(50); 73 } 74 Serial.println("Done!"); 75 // read out the data - must do this before calling the getxxxxx routines 76 BME280.readMeasurements(); 77 Serial.print("Temp="); 78 Serial.println(BME280.getTemperature()); // must get temp first 79 Serial.print("Humidity="); 80 Serial.println(BME280.getHumidity()); 81 Serial.print("Pressure="); 82 Serial.println(BME280.getPressure()); 83 Serial.print("PressureMoreAccurate="); 84 Serial.println(BME280.getPressureMoreAccurate()); // use int64 calculcations 85 Serial.print("TempMostAccurate="); 86 Serial.println(BME280.getTemperatureMostAccurate()); // use double calculations 87 Serial.print("HumidityMostAccurate="); 88 Serial.println(BME280.getHumidityMostAccurate()); // use double calculations 89 Serial.print("PressureMostAccurate="); 90 Serial.println(BME280.getPressureMostAccurate()); // use double calculations 91 92 93// ここに変数を指定しました。 94int tempe 95tempe = BME280.getTemperature() 96 97// ここにif文を追加しました。 98 if(tempe>=20&&tempe<25) 99 { 100 digitalWrite(ledPin1,1); 101 delay(1000); 102 digitalWrite(ledPin1,0); 103 } 104 else if(tempe>=25&&tempe<30) 105 { 106 digitalWrite(ledPin2,1); 107 delay(1000); 108 digitalWrite(ledPin2,0); 109 } 110 else if(tempe>=30) 111 { 112 digitalWrite(ledPin3,1); 113 delay(1000); 114 digitalWrite(ledPin3,0); 115 } 116 117 // Example for "indoor navigation" 118 // We'll switch into normal mode for regular automatic samples 119 120 BME280.writeStandbyTime(tsb_0p5ms); // tsb = 0.5ms 121 BME280.writeFilterCoefficient(fc_16); // IIR Filter coefficient 16 122 BME280.writeOversamplingPressure(os16x); // pressure x16 123 BME280.writeOversamplingTemperature(os2x); // temperature x2 124 BME280.writeOversamplingHumidity(os1x); // humidity x1 125 BME280.writeMode(smNormal); 126 127 while (1) { 128 while (BME280.isMeasuring()) { 129 } 130 131 // read out the data - must do this before calling the getxxxxx routines 132 BME280.readMeasurements(); 133 printCompensatedMeasurements(); 134 delay(1000); // do this every 5 seconds 135 } 136}
するとこの様なエラー文が表示されました。
Arduino:1.8.5 (Mac OS X), ボード:"Arduino Nano, ATmega328P"
In file included from /Users/KaishuYanagida/Desktop/sfc/おもちゃWS/bme280/bme280.ino:1:0:
sketch/BME280_MOD-1022.h:41:21: warning: extra tokens at end of #ifndef directive
#ifndef __BME280_MOD-1022_H
^
sketch/BME280_MOD-1022.h:42:21: warning: ISO C99 requires whitespace after the macro name
#define __BME280_MOD-1022_H
^
/Users/KaishuYanagida/Desktop/sfc/おもちゃWS/bme280/bme280.ino: In function 'void loop()':
bme280:94: error: expected initializer before 'tempe'
tempe = BME280.getTemperature()
^
bme280:102: error: 'else' without a previous 'if'
else if(tempe>=25&&tempe<30)
^
bme280:102: error: 'tempe' was not declared in this scope
else if(tempe>=25&&tempe<30)
^
exit status 1
expected initializer before 'tempe'
私がやりたいことは上にも書いた通り、BME280で取得した値によってLEDの出力を変えるというものです。
至らない点が多いですが回答よろしくお願いします。

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/11 14:15
2018/07/11 14:17
2018/07/11 14:20
2018/07/11 14:21
2018/07/12 15:45
2018/07/13 12:14