Example #1
0
int main(void) {
	// Create IP connection
	IPConnection ipcon;
	ipcon_create(&ipcon);

	// Create device object
	AmbientLight al;
	ambient_light_create(&al, UID, &ipcon);

	// Connect to brickd
	if(ipcon_connect(&ipcon, HOST, PORT) < 0) {
		fprintf(stderr, "Could not connect\n");
		return 1;
	}
	// Don't use device before ipcon is connected

	// Get current illuminance (unit is Lux/10)
	uint16_t illuminance;
	if(ambient_light_get_illuminance(&al, &illuminance) < 0) {
		fprintf(stderr, "Could not get illuminance, probably timeout\n");
		return 1;
	}

	printf("Illuminance: %f Lux\n", illuminance/10.0);

	printf("Press key to exit\n");
	getchar();
	ambient_light_destroy(&al);
	ipcon_destroy(&ipcon); // Calls ipcon_disconnect internally
	return 0;
}
/*----------------------------------------------------------------------
 * publishIlluminanceMessage()
 * Publish the Illuminance message.
 *--------------------------------------------------------------------*/
void TinkerforgeSensors::publishIlluminanceMessage(SensorDevice *sensor)
{
  if (sensor != NULL)
  {
    uint32_t illuminance = 0;

    // for the conversions look at rep 103 http://www.ros.org/reps/rep-0103.html
    // for Ambient Light v1 http://www.tinkerforge.com/de/doc/Software/Bricklets/AmbientLight_Bricklet_C.html
    // for Ambient Light v2 http://www.tinkerforge.com/de/doc/Software/Bricklets/AmbientLightV2_Bricklet_C.html

    if (sensor->getType() == AMBIENT_LIGHT_DEVICE_IDENTIFIER)
    {
      uint16_t ill = 0;
      // get current illuminance (unit is Lux/10)
      if(ambient_light_get_illuminance((AmbientLight*)sensor->getDev(), &ill) < 0) {
        ROS_ERROR_STREAM("Could not get illuminance from " << sensor->getUID() << ", probably timeout");
        return;
      }
      illuminance = (uint32_t)ill / 10.0;
    }
    else if (sensor->getType() == AMBIENT_LIGHT_V2_DEVICE_IDENTIFIER)
    {
      // get current illuminance (unit is Lux/100)
      if (ambient_light_v2_get_illuminance((AmbientLightV2*)sensor->getDev(), &illuminance) < 0) {
        ROS_ERROR_STREAM("Could not get illuminance from " << sensor->getUID() << ", probably timeout");
        return;
      }
      illuminance = illuminance / 100.0;
    }
    else
    {
      return;
    }

    // generate Illuminance message from Ambient Light sensor
    sensor_msgs::Illuminance illum_msg;

    // message header
    illum_msg.header.seq =  sensor->getSeq();
    illum_msg.header.stamp = ros::Time::now();
    illum_msg.header.frame_id = sensor->getFrame();
    
    illum_msg.illuminance = illuminance;
    illum_msg.variance = 0;

    // publish Temperature msg to ros
    sensor->getPub().publish(illum_msg);
  }
}