■ 今回使用したスケッチ(Arduino v101) ( ※ 過半数は私の書いたものではないので、無断掲載しない様お願いします ) |
// ウエザーXBeeルーター //割り込みピン = D2 (割り込み番号=0) //バッテリ電圧と湿度センサ int BttSens = 6; //バッテリー電圧監視アナログピン6 int HumiditySens = 7; //湿度センサー接続アナログピン7 int BttVAdc; float BttVoltage; int HumiAdc; float Humidity; // 気圧センサ用 GarretLabさんから拝借した部分 #include <Wire.h> //I2C用 Wireライブラリインクルード const int address = 0x60; //I2Cデバイスのアドレス const float Tempconst = -5.35; //温度係数 float Temp; float Pha, Pcomp; float read_coefficients(int total_bits, int fractional_bits, int zero_pad) { unsigned char msb, lsb; msb = Wire.read(); lsb = Wire.read(); return ((float) ((msb << 8) + lsb) / ((long)1 << 16 - total_bits + fractional_bits + zero_pad)); } unsigned int read_adc() { unsigned char msb, lsb; msb = Wire.read(); lsb = Wire.read(); return (((unsigned int)msb << 8) + lsb) >> 6; } float a0, b1, b2, c12, c11, c22; // 気圧センサ用ここまで // 風速センサ用 volatile boolean CountState = false; volatile float wcst =0.09; //パルス1個分のおおよその風速(校正必要) unsigned long pulseCnt = 0; unsigned long startTime, RPS; unsigned long nowTime; float windVelocity; //風速換算用浮動小数変数 // 風速センサ用ここまで void setup() { Serial.begin(9600); // 風速用の設定 attachInterrupt(0, newCount, RISING); //割り込み番号0の割り込み処理設定 // 風速用の設定ここまで // 気圧用の設定 GarretLabさんから拝借した部分 Wire.begin(); Wire.beginTransmission(address); Wire.write(0x04); // Read coefficient data Wire.endTransmission(); Wire.requestFrom(address, 12); // Request 12 bytes if (Wire.available()) { a0 = read_coefficients(16, 3, 0); b1 = read_coefficients(16, 13, 0); b2 = read_coefficients(16, 14, 0); c12 = read_coefficients(14, 13, 9); c11 = read_coefficients(11, 10, 11); c22 = read_coefficients(11, 10, 15); } } // 気圧用の設定ここまで //メインループ開始 void loop() { // 風速用 startTime = millis(); //初期の時間を取得 pulseCnt = 0; turn: if (millis() > startTime + 1000) CountOUT(); //1秒経過したらカウント終了 カウントアウト処理へ if (CountState) { //カウントステータスがスルーならカウントUPする pulseCnt++; CountState = false; } // 風速用ここまで if (millis() < startTime + 1000) goto turn; //1秒経過していなければ turn: へ戻る //バッテリー電圧と湿度処理 BttVAdc = analogRead(BttSens); BttVoltage = (float)BttVAdc/1023 * 4.055; HumiAdc = analogRead(HumiditySens); Humidity = (float)HumiAdc/1023 * 370; // I2Cデバイス 気圧用 GarretLabさんから拝借した部分 Wire.beginTransmission(address); Wire.write(0x12); // Start both conversions(Pressure and Temperature) Wire.write(0x01); Wire.endTransmission(); delay(5); Wire.beginTransmission(address); Wire.write((uint8_t)0x00); // Read pressure and temperature Wire.endTransmission(); Wire.requestFrom(address, 4); // Request 4 bytes if(Wire.available()) { unsigned int Padc = read_adc(); unsigned int Tadc = read_adc(); //気圧計算
|
|