Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: Servo mbed rosserial_mbed_lib
Fork of rosserial_mbed by
Diff: examples/Temperature.cpp
- Revision:
- 0:06fc856e99ca
diff -r 000000000000 -r 06fc856e99ca examples/Temperature.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/Temperature.cpp Fri Aug 19 09:06:16 2011 +0000
@@ -0,0 +1,78 @@
+//#define COMPILE_TEMPERATURE_CODE_ROSSERIAL
+#ifdef COMPILE_TEMPERATURE_CODE_ROSSERIAL
+
+/*
+ * rosserial Temperature Sensor Example
+ *
+ * This tutorial demonstrates the usage of the
+ * Sparkfun TMP102 Digital Temperature Breakout board
+ * http://www.sparkfun.com/products/9418
+ *
+ * Source Code Based off of:
+ * http://wiring.org.co/learning/libraries/tmp102sparkfun.html
+ */
+
+#include "mbed.h"
+#include <ros.h>
+#include <std_msgs/Float32.h>
+
+ros::NodeHandle nh;
+
+std_msgs::Float32 temp_msg;
+ros::Publisher pub_temp("temperature", &temp_msg);
+
+
+// From the datasheet the BMP module address LSB distinguishes
+// between read (1) and write (0) operations, corresponding to
+// address 0x91 (read) and 0x90 (write).
+// shift the address 1 bit right (0x91 or 0x90), the Wire library only needs the 7
+// most significant bits for the address 0x91 >> 1 = 0x48
+// 0x90 >> 1 = 0x48 (72)
+
+ int sensorAddress = 0x91 >>1; // From datasheet sensor address is 0x91
+
+// shift the address 1 bit right, the Wire library only needs the 7
+// most significant bits for the address
+
+Timer t;
+I2C i2c(p9, p10); // sda, scl
+
+int main() {
+ t.start();
+
+ nh.initNode();
+ nh.advertise(pub_temp);
+
+ long publisher_timer =0;
+
+ while (1) {
+
+ if (t.read_ms() > publisher_timer) {
+ // step 1: request reading from sensor
+ //Wire.requestFrom(sensorAddress,2);
+ char cmd = 2;
+ i2c.write(sensorAddress, &cmd, 1);
+
+ wait_ms(50);
+
+ char msb;
+ char lsb;
+ int temperature;
+ i2c.read(sensorAddress, &msb, 1); // receive high byte (full degrees)
+ i2c.read(sensorAddress, &lsb, 1); // receive low byte (fraction degrees)
+
+ temperature = ((msb) << 4); // MSB
+ temperature |= (lsb >> 4); // LSB
+
+ temp_msg.data = temperature*0.0625;
+ pub_temp.publish(&temp_msg);
+
+
+ publisher_timer = t.read_ms() + 1000;
+ }
+
+ nh.spinOnce();
+ }
+}
+
+#endif
\ No newline at end of file
