RangeSensorWidget::RangeSensorWidget(int& argc, char * argv[]) : 
  QWidget(), 
  client_(argc, argv),
  sensor_(),
  robotName_(client_.namingContextName.c_str()),
  sensorName_("Sonar"),
  group_(0),
  timer_(0),
  drawCones_(false)
{
  // set widget size
  resize(400, 400);

  // init menu
  menuBar_  = new QMenuBar(this);
  menuFile_ = new QPopupMenu(this);
  menuView_ = new QPopupMenu(this);

  menuView_->setCheckable(true);

  menuBar_->insertItem("&Robot", menuFile_);
  menuBar_->insertItem("&View", menuView_);

  menuFile_->insertItem("Select robot", this, SLOT(selectRobot()));
  menuFile_->insertItem("Select sensor", this, SLOT(selectSensor()));
  groupIndex_ = menuFile_->insertItem("Select group", this, SLOT(selectGroup()));
  menuFile_->setItemEnabled(groupIndex_, false);

  menuFile_->insertSeparator();
  menuFile_->insertItem("Quit", qApp, SLOT(quit()));

  coneIndex_ = menuView_->insertItem("Draw Cone", this, SLOT(toggleCone()));
}
Ejemplo n.º 2
0
int myBME::initialize(myBMEData &data1, myBMEData &data2){
  if (TWCR == 0){ // if Wire library is not already initialized
    Wire.begin();
  }
  selectSensor(INDEX_BALLOON);
  if (!bme[INDEX_BALLOON].begin()) {
    if(HELIOS_DEBUG) Serial.println("Could not find a valid BME280 sensor inside balloon, check wiring!");
    return 0;
  }
  selectSensor(INDEX_ATMOS);
  if (!bme[INDEX_ATMOS].begin()) {
    if(HELIOS_DEBUG) Serial.println("Could not find a valid BME280 sensor for atmosphere, check wiring!");
    return 0;
  }
  data1 = {};
  data2 = {};
  if (HELIOS_DEBUG) Serial.println("Two BME sensors initialized");
  return 1;
}
Ejemplo n.º 3
0
void myBME::read(myBMEData *data, uint8_t index){
  if (index != INDEX_BALLOON && index != INDEX_ATMOS) return; //if not a valid array position
  selectSensor(index);
  data->pressure = bme[index].readPressure();
  data->temperature = bme[index].readTemperature();
  data->humidity = bme[index].readHumidity();
  data->altitude = bme[index].readAltitude(SEA_LEVEL_PRESSURE_HPA);
  if(isnan(bme[index].readPressure())){ //if the bme was disconnected, try restarting it
    bme[index].begin();
  }
}
void updateStatusOfSensor(Sensor sensor)
{
    UINT8 byte3;
    UINT8 i;
    SensorStatus res;

    if(!isSensorReadReady)
    {
        prepareForSensorRead();
    }

    res.sensor = sensor;

    CLOCK_PORT = 1;

    SPI_TIME_OFFSET

    readTime = ReadTimer1();

    selectSensor(sensor);

    // Waiting 500 ns for sensor to be ready (Period = 83 ns => about 7 cycles, waiting 20)

    SPI_TIME_OFFSET
    

    res.position = 0;

    for(i=0 ; i<13 ; i++)
    {
        res.position <<= 1;

        CLOCK_PORT = 1;

        SPI_TIME_OFFSET_UP

        CLOCK_PORT = 0;

        SPI_TIME_OFFSET

        res.position += DATA_IN;
    }

    byte3 = 0;

    for(i=0 ; i<6 ; i++)
    {
        byte3 <<= 1;

        CLOCK_PORT = 1;

        SPI_TIME_OFFSET_UP

        CLOCK_PORT = 0;

        SPI_TIME_OFFSET

        byte3 += DATA_IN;


    }
    
    SPI_TIME_OFFSET

    LATA |= 0x3F; // Return to waiting state

    SPI_TIME_OFFSET

    CLOCK_PORT = 1;

    res.error = 0;

    if(OCF)
    {
        res.error += SENSOR_ERROR_OCF_NOT_FINISHED;
    }
    if(COF)
    {
        res.error += SENSOR_ERROR_OVERFLOW;
    }
    if(LIN)
    {
        res.error += SENSOR_ERROR_LINEARITY;
    }
    if(MAGDEC)
    {
        res.error += SENSOR_ERROR_MAG_DEC;
    }
    if(MAGINC)
    {
        res.error += SENSOR_ERROR_MAG_INC;
    }

    if(!checkParity(res.position,byte3))
    {
        res.error += SENSOR_ERROR_PARITY;
    }

    if(res.error == 0 || res.error == 48)
    {
        updateSensorStatus(res,sensor);
    }
}
Ejemplo n.º 5
0
 static void read(MY_HONEYWELL *data, uint8_t sensor) {
   selectSensor(sensor); //select to talk to the desired sensor
   /*uint8_t val[4] = {0};  //four bytes to store sensor data
     Wire.requestFrom(SSC_ADDR, (uint8_t) 4);    //request sensor data
     for (uint8_t i = 0; i <= 3; i++) {
       delay(4);                        // sensor might be missing, do not block by using Wire.available()
       val[i] = Wire.read();
     }
     Serial.println("Data Received");*/
   struct cs_raw ps;
   char p_str[10], t_str[10];
   uint8_t el;
   float p, t;
   el = ps_get_raw(SSC_ADDR, &ps);
   // for some reason my chip triggers a diagnostic fault
   // on 50% of powerups without a notable impact
   // to the output values.
   if ( el == 4 ) {
     Serial.println("err sensor missing");
   } else {
     if ( el == 3 ) {
       Serial.print("err diagnostic fault ");
       Serial.println(ps.status, BIN);
     }
     if ( el == 2 ) {
       // if data has already been feched since the last
       // measurement cycle
       Serial.print("warn stale data ");
       Serial.println(ps.status, BIN);
     }
     if ( el == 1 ) {
       // chip in command mode
       // no clue how to end up here
       Serial.print("warn command mode ");
       Serial.println(ps.status, BIN);
     }
     //Serial.print("status      ");
     //Serial.println(ps.status, BIN);
     //Serial.print("bridge_data ");
     //Serial.println(ps.bridge_data, DEC);
     //Serial.print("temp_data   ");
     //Serial.println(ps.temperature_data, DEC);
     //Serial.println("");
     ps_convert(ps, &p, &t, SSC_MIN, SSC_MAX, PRESSURE_MIN,
                PRESSURE_MAX);
     // floats cannot be easily printed out
     dtostrf(p, 2, 2, p_str);
     dtostrf(t, 2, 2, t_str);
     Serial.print("pressure    (Pa) ");
     Serial.println(p_str);
     Serial.print("temperature (dC) ");
     Serial.println(t_str);
     //Serial.println("");
     data->status=ps.status;
     data->rawPressure=ps.bridge_data;
     data->rawTemperature=ps.temperature_data;
     data->pressure = p;
     data->temperature = t;
     /*data->status = (val[0] & 0xc0) >> 6; // first 2 bits from first byte are the status
     data->rawPressure = ((val[0] & 0x3f) << 8) + val[1];
     data->rawTemperature = ((val[2] << 8) + (val[3] & 0xe0)) >> 5;
     if (data->rawTemperature == 65535)
       data->status = 4;
     if (data->status == 4) {
       data->pressure = -1;
       data->temperature = -1;
     }
     else {
       data->pressure = 1.0 * (data->rawPressure - SSC_MIN) * (PRESSURE_MAX - PRESSURE_MIN) / (SSC_MAX - SSC_MIN) + PRESSURE_MIN;
       data->temperature = (data->rawTemperature * 0.0977) - 50;
     }*/
   }
   return;
 }