Integration of multiple sensors with ROS Serial
Dependencies: mbed HCSR04 VEML7700
main.cpp
- Committer:
- zillkhan
- Date:
- 2021-10-23
- Revision:
- 4:69cd9240fd74
- Parent:
- 3:c23614e6262f
File content as of revision 4:69cd9240fd74:
#include <ros.h> #include <std_msgs/Float32.h> #include <std_msgs/String.h> #include <std_msgs/Int16.h> #include "SHARPIR.h" #include "hcsr04.h" #include "VEML7700.h" #include "mbed_bme680.h" #ifndef MSU_VEML7700_I2C_ADDRESS #define MSU_VEML7700_I2C_ADDRESS 0x10 #endif #define PIN_SCL D15 #define PIN_SDA D14 //Sharp IR sensor analog pin defination SHARPIR Sensor(A0); //Ultrasonic sensor pin defination //D8 TRIGGER D9 ECHO HCSR04 sensor(D8, D9); // BME680 pin defination I2C i2c(PIN_SDA, PIN_SCL); BME680 bme680(0xEE); //I2C address for BME680 ros::NodeHandle nh; //SharpIR publisher initialization std_msgs::Float32 data_ir; ros::Publisher sharpir("sharpir", &data_ir); //Ultrasonic sensor publisher initialization std_msgs::String data_ul; ros::Publisher ultrasonic("ultrasonic", &data_ul); //Ambient Light sensor publisher initialization std_msgs::Int16 data_als; ros::Publisher ALS("ALS", &data_als); //BME680 publisher initialization std_msgs::String msg; ros::Publisher sensor_bme("sensor_bme", &msg); VEML7700 *veml7700 = 0 ; int main() { float DistanceCM; //Variable to store distance in CM from SharpIR sensor char buffer[50]; // buffer for Ultrasonic sensor values char buff_bme[50]; // buffer for bme690 sensor values //Initialization of Ambient light sensor uint16_t als ; veml7700 = new VEML7700(PIN_SDA, PIN_SCL, MSU_VEML7700_I2C_ADDRESS) ; veml7700->setALSConf(0x0000) ; veml7700->setPowerSaving(0x0000) ; //Initalization of BME680 if (!bme680.begin()) { printf("BME680 Begin failed \r\n"); return 1; } //Initalizing and advertising topics nh.initNode(); nh.advertise(sharpir); //SharpIR sensor nh.advertise(ultrasonic); //Ultrasonic Sensor nh.advertise(ALS); //Ambient Light Sensor nh.advertise(sensor_bme); //bme680 sensor while (1) { //creates an eternal loop DistanceCM=Sensor.cm(); //Reading SharpIR sensor value from analog pin wait_ms(500); long distance = sensor.distance(); //Reading ultrasonic sensor value sprintf (buffer, "%d", distance); //converting value into string wait_ms(500); als = veml7700->getALS(); //Readinng ALS sensor value wait_ms(500); bme680.performReading(); //Reading bme680 value sprintf (buff_bme, "Temp: %0.2f degC,Humi: %0.2f %%,Pres: %0.2f hPa,VOC: %0.2f KOhms", bme680.getTemperature(),bme680.getHumidity(),(bme680.getPressure() / 100.0),(bme680.getGasResistance() / 1000.0)); wait_ms(500); data_ir.data = DistanceCM; sharpir.publish( &data_ir ); data_ul.data = buffer; ultrasonic.publish( &data_ul ); data_als.data = als; ALS.publish( &data_als ); msg.data = buffer; sensor_bme.publish(&msg); nh.spinOnce(); wait_ms(1000); } }