Exemplo n.º 1
0
//MPL115A2ライブラリのテストをおこないます
int main(int argc, char **argv)
{
  int pres;      //ファイルディスクリプタ:MPL115A2(大気圧センサ)
  char *i2cFileName = "/dev/i2c-1"; // I2Cドライバファイル名
  int presAddress = MPL115A2_ADR;//圧力センサ:MPL115A2のアドレス
 
  // I2CポートをRead/Write属性でオープン、ファイルディスクリプタ取得。:圧力センサ
  if ((pres = open(i2cFileName, O_RDWR)) < 0)
    {
      printf("Faild to open i2c port:pres\n");
      exit(1);
    }
  // 通信先アドレスの設定。:圧力センサ
  if (ioctl(pres,I2C_SLAVE,presAddress) < 0)
    {
      printf("Unable to get pres bus access to talk to slave\n");
      exit(1);
    }

  double f;

  //大気圧データ読み出し
  f=calcPressure(pres);
  printf("Pressure(hPa)=%f\n",f);    
 }
Exemplo n.º 2
0
void DownscalerPressure::downscaleCore(const File& iInput, File& iOutput) const {
   int nLat = iOutput.getNumLat();
   int nLon = iOutput.getNumLon();
   int nEns = iOutput.getNumEns();
   int nTime = iInput.getNumTime();

   vec2 ilats  = iInput.getLats();
   vec2 ilons  = iInput.getLons();
   vec2 ielevs = iInput.getElevs();
   vec2 olats  = iOutput.getLats();
   vec2 olons  = iOutput.getLons();
   vec2 oelevs = iOutput.getElevs();

   // Get nearest neighbour
   vec2Int nearestI, nearestJ;
   getNearestNeighbourFast(iInput, iOutput, nearestI, nearestJ);

   for(int t = 0; t < nTime; t++) {
      Field& ifield = *iInput.getField(mVariable, t);
      Field& ofield = *iOutput.getField(mVariable, t);

      #pragma omp parallel for
      for(int i = 0; i < nLat; i++) {
         for(int j = 0; j < nLon; j++) {
            int Icenter = nearestI[i][j];
            int Jcenter = nearestJ[i][j];
            assert(Icenter < ielevs.size());
            assert(Jcenter < ielevs[Icenter].size());
            for(int e = 0; e < nEns; e++) {
               float currElev = oelevs[i][j];
               float nearestElev = ielevs[Icenter][Jcenter];
               if(!Util::isValid(currElev) || !Util::isValid(nearestElev)) {
                  // Can't adjust if we don't have an elevation, use nearest neighbour
                  ofield(i,j,e) = ifield(Icenter,Jcenter,e);
               }
               else {
                  float nearestPressure = ifield(Icenter,Jcenter,e);
                  float currPressure = calcPressure(nearestElev, nearestPressure, currElev);
                  ofield(i,j,e) = currPressure;
               }
            }
         }
      }
   }
}
Exemplo n.º 3
0
/*
** Retrieve temperature and pressure.
** @param : T = stores the temperature value in degC.
** @param : P = stores the pressure value in mBar.
*/
char BMP280::getTemperatureAndPressure(double &T,double &P)
{
	double uT ;
	double uP;
	char result = getUnPT(uP,uT);
	if(result!=0){
		// calculate the temperature
		result = calcTemperature(T,uT);
		if(result){
			// calculate the pressure
			result = calcPressure(P,uP);
			if(result)return (1);
			else error = 3 ;	// pressure error ;
			return (9);
		}else 
			error = 2;	// temperature error ;
	}
	else 
		error = 1;
	
	return (9);
}