コード例 #1
0
ファイル: bbbdht22.cpp プロジェクト: icepic1984/dht22pruss
std::string DHT22::message() 
{
	std::stringstream ss;
	ss << "Hum: "<< humidity()<<" Temp: "<<temperature()
	   << " Total Errors: "<<errors() 
	   << " Error Rate: "<<error_rate()
	   << " Cycle: "<<cycles()<<std::endl;
	return ss.str();
}
コード例 #2
0
ファイル: rover.cpp プロジェクト: Tnek/falconia-2
void calibrate_countdown(void) 
{
    lcd.print("Starting rover");
    lcd.display();
    for (int i = 5; i > 0; i--) {
        _count(i*2 - 1);
        delay(1000);
        _count(i*2 - 2);
        humidity();
        moisture();
        delay(1000);
    }
    lcd.clear();
}
コード例 #3
0
ファイル: fof_soi.c プロジェクト: tharen/PyFVS
/*{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}
* Name:
* Desc:
*
{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{**/
void   soiltemp_initprofile (REAL rr_wi[], REAL rr_ti[])
{
int  i;

   Copy_Array ( rr_w,  rr_wi);
   Copy_Array ( rr_wn, rr_wi);
   Copy_Array ( rr_t,  rr_ti);
   Copy_Array ( rr_tn, rr_ti);
   for ( i = 0; i <= e_mplus1; i++ )  {
     rr_p[i] = -exp ( 13.82 * ( 1 - rr_w[i] / r_xo ) );
     rr_w[i] = watercontent ( rr_p[i], r_xo, &rr_dwdp[i]);
     rr_h[i] = humidity ( rr_p[i], rr_t[i], &rr_dhdp[i] );
     rr_kev[i] = 0;
     rr_u[i] = 0;
     rr_enh[i] = 0; }
}
コード例 #4
0
void colour_humidity (Planet_colours& c, const Planet& p, const Season& s) {
	static const Colour water = Colour(1.0, 1.0, 1.0);
	static const Colour land_dry = Colour(1.0, 1.0, 0.5);
	static const Colour land_mid = Colour(1.0, 1.0, 0.0);
	static const Colour land_humid = Colour(0.0, 0.7, 0.0);
	
	for (const Tile& t : tiles(p)) {
		double h = humidity(nth_tile(s, id(t))) / saturation_humidity(temperature(nth_tile(s, id(t))));
		if (is_water(nth_tile(terrain(p), id(t)))) {
			c.tiles[id(t)] = water;
		}
		else {
			if (h <= 0.5) {
				double d = h / 0.5;
				c.tiles[id(t)] = interpolate(land_dry, land_mid, d);
			}
			else {
				double d = (h-0.5)/0.5;
				c.tiles[id(t)] = interpolate(land_mid, land_humid, d);
			}
		}
	}
}
コード例 #5
0
ファイル: fof_soi.c プロジェクト: tharen/PyFVS
/*{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}
* Name: soiltemp_step
* Desc: This code was converted from orginal Pascal code, not really sure
*        what it exactly does
* Note-1: Change 11-6-05, put work around for bug found.
*         Code can get stuck in an infinite loop. Discovered this with
*          some of DL's batch data.
*         I checked back with the orginal Pascal code and verified that
*          I converted the code correctly which it looks like I did.
*         This function the and code that call it have some serious logic
*          errors, see the i_its variable below, it never gets incremented
*          but is checked in the loop as a break control. I tried implementing
*          it but didn't completly help as the calling functions loop
*          would keep calling it again and again, seems that calling loop
*          doesn't have a way of timing out.
*         The inputs being sent into the upper lever Soil Sim via the
*           d_SI input struct that cause this problem are, roughly speaking,
*           because they seem vary with ranges are approx. fi 89, time 180
*           moisture 25 'WET'
*         ER suggest we just put a check in to time out the loop and report
*          back to user that Soil Sim doesn't handle the situation
*         NOTE: I modified this function from a void to and int return,
*          and return 0 for the bug loop time out
* Ret: 1 ok, else 0 = error, read above
*
*
{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{**/
int soiltemp_step (REAL r_Rabs, REAL r_dt,  int  *ai_success, REAL r_time)
{

int i,i_its;
int iN_SoilBug;

   iN_SoilBug = 0;

/* REAL fff; */
   rr_tn[0] = (REAL)e_Tair;
   i_its = 0;

/*.......................................................................    */
   while (1) {                    /* {begin heat and water solutions}       */
     r_seh = 0;
     r_sev = 0;
     rr_ke[0] = 0;                      /* {hc}; {hc taken out so that surf. temp. not needed} */
     rr_kev[0] = 6.2e-9 * (REAL)e_hc;  /* {6.2e-9*hc makes heat and water cond. equal} */
     rr_psat[0] = vaporpressure (rr_tn[0]);
     rr_h[0] = (REAL)e_airvp / rr_psat[0];
     rr_psat[1] = vaporpressure (rr_tn[1]);
     r_wav = 0.5 * (rr_wn[1] + rr_wn[2]);
     rr_s[1] = slope (rr_tn[1], rr_psat[1]);
     rr_Hvap[1] = Hv (rr_tn[1]);
     rr_kh[1] = tcond (rr_tn[1], r_wav, r_xs, r_ls, r_ga, r_xwo, r_cop,  rr_h[1] * rr_psat[1], rr_s[1], &rr_enh[1]);
     rr_AirPor[1] = (r_xws - r_wav);
     rr_kv[1] = rr_enh[1] * rr_AirPor[1] * (REAL)e_tor * Kvap(rr_t[1], rr_psat[1] * rr_h[1]);

/*..........................................................................*/
     for ( i = 1; i <= r_m; i++ ) {
       rr_cp[i] = rr_v[i] * (0.87 * r_bd + 4.18e6 * rr_wn[i]) / r_dt;
       rr_psat[i+1] = vaporpressure (rr_tn[i+1]);
       if ( i < r_m ) {
         r_wav = 0.5 * (rr_wn[i+1] + rr_wn[i+2]);
         r_tav = 0.5 * (rr_tn[i+1] + rr_tn[i+2]) + 273; }
       else {
           r_wav = rr_wn[e_mplus1];
           r_tav = rr_tn[i+1] + 273; }
       rr_conv[i] = 0.5 * (rr_u[i-1] + rr_u[i]) * 1200 * 293 / r_tav;
       rr_vcon[i] = rr_conv[i] * (REAL)e_Mw / ( (REAL)e_R * 1200 * 293);
       rr_s[i+1] = slope(rr_tn[i+1], rr_psat[i+1]);
       rr_Hvap[i+1] = Hv (rr_tn[i+1]);
       rr_kh[i+1] = tcond (rr_tn[i+1], r_wav, r_xs, r_ls, r_ga, r_xwo, r_cop, rr_h[i+1] * rr_psat[i+1], rr_s[i+1], &rr_enh[i+1]);
       rr_ke[i] = (rr_kh[i]) / ((rr_z[i+1] - rr_z[i])) + rr_conv[i];
       rr_AirPor[i+1] = (r_xws - r_wav);
       rr_kv[i+1] = rr_enh[i+1] * rr_AirPor[i+1] * (REAL)e_tor * Kvap (rr_t[i+1], rr_psat[i+1] * rr_h[i+1]);
       rr_kev[i] = (rr_kv[i] + rr_kv[i+1]) / (2 * (rr_z[i+1] - rr_z[i])) + rr_vcon[i];
       r_dJv = rr_kev[i-1] * (rr_psat[i] * rr_h[i] - rr_psat[i-1] * rr_h[i-1]) - rr_kev[i] * (rr_psat[i+1] * rr_h[i+1] - rr_psat[i] * rr_h[i]);
       r_dJvdt = rr_s[i] * rr_h[i] * (rr_kev[i-1] + rr_kev[i]);
       r_dJvdp = rr_psat[i] * (rr_kev[i-1] + rr_kev[i]) * rr_dhdp[i];
       r_dC =   rr_ke[i-1] * (rr_tn[i] - rr_tn[i-1])
              - rr_ke[i] * (rr_tn[i+1] - rr_tn[i])
              + rr_cp[i] * (rr_tn[i] - rr_t[i])
              - rr_Hvap[i] * (REAL)e_dw * rr_v[i]
              * (rr_wn[i] - rr_w[i]) / r_dt;
       r_dv = r_dJv + (REAL)e_dw * rr_v[i] * (rr_wn[i] - rr_w[i]) / r_dt;
       r_dCdp = - rr_Hvap[i] * (REAL)e_dw * rr_v[i] * rr_dwdp[i] / r_dt;
       r_dvdp = r_dJvdp + (REAL)e_dw * rr_v[i] * rr_dwdp[i] / r_dt;
       r_dvdt = r_dJvdt;
       r_dCdt = rr_ke[i] + rr_ke[i-1] + rr_cp[i];
       if ( i == 1) {
         r_tk = rr_tn[1] + 273;
         r_tk3 = r_tk * r_tk * r_tk;
         r_dC = r_dC - r_Rabs + 5.67e-8 * r_tk * r_tk3;
         r_dCdt = r_dCdt + 4 * 5.67e-8 * r_tk3; }

       r_sev = r_sev + abs_Real(r_dv);
       r_seh = r_seh + abs_Real(r_dC);

       r_dtn = (r_dv * r_dCdp - r_dC * r_dvdp) / (r_dCdp * r_dvdt - r_dCdt * r_dvdp);
       if ( r_dtn < -100 )
         r_dtn = -100;
       rr_tn[i] = rr_tn[i] - r_dtn;
       r_dtn = ( r_dv - r_dvdt * r_dtn) / r_dvdp;
       rr_p[i] = rr_p[i] - r_dtn;
       if ( rr_p[i] > 0 )
         rr_p[i] = ( rr_p[i] + r_dtn ) * 0.5;
       if ( rr_p[i] < -1e20 )
         rr_p[i] = -1e20;
       rr_wn[i] = watercontent (rr_p[i], r_xo, &rr_dwdp[i]);
       rr_h[i] = humidity (rr_p[i], rr_tn[i], &rr_dhdp[i]);
     } /* for i end */

/*...........................................................................*/

/* Change 11-6-05, Catch infinite loop bug, See Note-1 above                 */
     iN_SoilBug++;
     if ( iN_SoilBug >= 50 )
       return 0;
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */

     if ( (r_sev < (REAL)e_epsw  && r_seh < (REAL)e_epse) || i_its > e_maxits )
       break;

    } /* while (1) end */

/*.........................................................................*/
   if ( i_its < e_maxits ) {
     *ai_success = 1;

/* changed 3-27-00 */
/*     rr_u[r_m] = 0;    got error when compliling as C++ */
       rr_u[(int)r_m] = 0;


     for ( i = r_m; i >= 1; i-- ) {
       r_gvol = (REAL)e_dw * rr_v[i] * (REAL)e_R * (rr_tn[i] + 273) * (rr_w[i] - rr_wn[i]) / (r_dt * rr_AirPor[i] * (REAL)e_Mw * (REAL)e_Patm);
       if ( r_gvol < 0 )
         r_gvol = 0;
       rr_u[i-1] = rr_u[i] + r_gvol; }
     for ( i = 1; i <= e_mplus1; i++ ) {
       r_ch = rr_wn[i] - rr_w[i];
       rr_w[i] = rr_wn[i];
       rr_wn[i] = rr_w[i] + r_ch;
       r_ch = rr_tn[i] - rr_t[i];
       rr_t[i] = rr_tn[i];
       rr_tn[i] = rr_t[i] + r_ch; }  }
   else
     *ai_success = 0;

   return 1;
}
コード例 #6
0
ファイル: transmit.cpp プロジェクト: kfujiapples/Team-Quasar
/* Construct Packet */
void Construct_Packet(void)
{
  //Serial.println("construct packet top");

  //Variable for Index and uptime
  unsigned long uptime_ms;

  //Put schema number in packet
  G_packet.schema = 297;

  //Update data
  uptime_ms = millis();

  //Put uptime in packet
  G_packet.uptime_ms = uptime_ms;

  //Poll and put battery and panel data in packet
  for(int p = 0; p < 6; p++)
  { G_packet.batt_mv[p] = battery();
    G_packet.panel_mv[p] = panel();
    delay(400);
  }
  
  //Poll and put panel data in packet
  /*for(int p = 0; p < 6; p++)
  { G_packet.panel_mv[p] = panel();
    delay(400);
  }*/
  
  G_packet.bmp185_press_pa = pressure();
  G_packet.bmp185_temp_decic = temp();
  G_packet.humidity_centi_pct = humidity();

  //Poll and put irradiance data in packet
  for(int i = 0; i < 20; i++)
  { G_packet.solar_irr_w_m2[i] = irradiance();
    delay(300);
  }
  
  /*//Hardcoded Test Packet
  G_packet.uptime_ms = 1;
  for(int p = 0; p <= 4; p++)
  { G_packet.batt_mv[p] = 1;
    Serial.print("Battery");
    Serial.println(G_packet.batt_mv[p]);
    delay(400);
  }
  for(int p = 0; p <= 4; p++)
  { G_packet.panel_mv[p] = 2;
    Serial.print("Panel");
    Serial.println(G_packet.panel_mv[p]);
    delay(400);
  }
  
  G_packet.bmp185_press_pa = 3;
  Serial.print("Pressure");
  Serial.println(G_packet.bmp185_press_pa);
  G_packet.bmp185_temp_decic = 4;
  Serial.print("Temp");
  Serial.println(G_packet.bmp185_temp_decic);
  G_packet.humidity_centi_pct = 5;
  Serial.print("Humidity");
  Serial.println(G_packet.humidity_centi_pct);
  for(int i = 0; i <= 14; i++)
  { G_packet.solar_irr_w_m2[i] = 6;
    Serial.print("Solar");
    Serial.println(G_packet.solar_irr_w_m2[i]);
    delay(1000);
  }*/
}
コード例 #7
0
ファイル: SHSensors.cpp プロジェクト: stcote/QSenseHat
//******************************************************************************
void SHSensors::handleUpdate()
{
const float fToC = 9.0 / 5.0;
const float fOffset = 32;

    //*** read all data ***
    while ( imu_->IMURead() )
    {
        //*** get IMU data ***
        RTIMU_DATA imuData = imu_->getIMUData();

        //*** pressure / temperature ***
        if ( ((enabled_ & IMU_PRESSURE) || (enabled_ & IMU_TEMP)) && pressure_ )
        {
            pressure_->pressureRead( imuData );

            if ( enabled_ & IMU_PRESSURE )
            {
                //*** pressure in hPa ***
                emit pressure( imuData.pressure, RTMath::convertPressureToHeight(imuData.pressure) );
            }

            if ( enabled_ & IMU_TEMP )
            {
                //*** temp celsius, fahrenheit ***
                emit temperature( imuData.temperature,
                                  imuData.temperature * fToC + fOffset );
            }
        }

        //*** humidity ***
        if ( (enabled_ & IMU_HUMIDITY) && humidity_ )
        {
            humidity_->humidityRead( imuData );

            //*** relative humidity ***
            emit humidity( imuData.humidity );
        }

        //*** gyroscope ***
        if ( enabled_ & IMU_GYRO )
        {
            //*** gyroscope in degrees per second ***
            emit gyro( imuData.gyro.x() * RTMATH_RAD_TO_DEGREE,
                       imuData.gyro.y() * RTMATH_RAD_TO_DEGREE,
                       imuData.gyro.z() * RTMATH_RAD_TO_DEGREE );
        }

        //*** accelerometer ***
        if ( enabled_ & IMU_ACCEL )
        {
            //*** acceleration in g's ***'
            emit accel( imuData.accel.x(), imuData.accel.y(),
                        imuData.accel.z(), imuData.accel.length() );
        }

        //*** compass ***
        if ( enabled_ & IMU_COMPASS )
        {
            //*** compas (magnetometer) in uT ***
            emit compass( imuData.compass.x(), imuData.compass.y(),
                          imuData.compass.z(), imuData.compass.length() );
        }

        //*** always emit fusion data - degrees ***
        float fusionX = imuData.fusionPose.x() * RTMATH_RAD_TO_DEGREE;
        float fusionY = imuData.fusionPose.y() * RTMATH_RAD_TO_DEGREE;
        float fusionZ = imuData.fusionPose.z() * RTMATH_RAD_TO_DEGREE;
        emit fusionPose( fusionX, fusionY, fusionZ );
    }

}