![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Thermo Sensor(TMP102 & LM61BIZ) test code ported code from Arduino. you can see the difference between mbed and Arduino in the code.
main.cpp@0:8096151ff6c6, 2010-10-30 (annotated)
- Committer:
- xshige
- Date:
- Sat Oct 30 08:01:10 2010 +0000
- Revision:
- 0:8096151ff6c6
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
xshige | 0:8096151ff6c6 | 1 | |
xshige | 0:8096151ff6c6 | 2 | // |
xshige | 0:8096151ff6c6 | 3 | // Thermo Sensor(TMP102 & LM61BIZ) test code |
xshige | 0:8096151ff6c6 | 4 | // |
xshige | 0:8096151ff6c6 | 5 | // ported code from Arduino |
xshige | 0:8096151ff6c6 | 6 | // you can see the difference between mbed and Arduino in the code. |
xshige | 0:8096151ff6c6 | 7 | |
xshige | 0:8096151ff6c6 | 8 | // 2010/10/30 |
xshige | 0:8096151ff6c6 | 9 | // written by:xshige |
xshige | 0:8096151ff6c6 | 10 | |
xshige | 0:8096151ff6c6 | 11 | /* |
xshige | 0:8096151ff6c6 | 12 | |
xshige | 0:8096151ff6c6 | 13 | mbed Case: |
xshige | 0:8096151ff6c6 | 14 | Wiring Info for TMP102 |
xshige | 0:8096151ff6c6 | 15 | module side | mbed side |
xshige | 0:8096151ff6c6 | 16 | GND --------- GND |
xshige | 0:8096151ff6c6 | 17 | SCL --------- p10 |
xshige | 0:8096151ff6c6 | 18 | SDA --------- p9 |
xshige | 0:8096151ff6c6 | 19 | V+ --------- +3.3V |
xshige | 0:8096151ff6c6 | 20 | ALT --------- NC |
xshige | 0:8096151ff6c6 | 21 | ADD0 -------- GND |
xshige | 0:8096151ff6c6 | 22 | |
xshige | 0:8096151ff6c6 | 23 | Wring Info ofr LM61BIZ |
xshige | 0:8096151ff6c6 | 24 | sensor side | mbed side |
xshige | 0:8096151ff6c6 | 25 | +Vs --------- +5V or +3.3V |
xshige | 0:8096151ff6c6 | 26 | Vout--------- p20 (analog input) |
xshige | 0:8096151ff6c6 | 27 | GND --------- GND |
xshige | 0:8096151ff6c6 | 28 | |
xshige | 0:8096151ff6c6 | 29 | //-------------------------------- |
xshige | 0:8096151ff6c6 | 30 | |
xshige | 0:8096151ff6c6 | 31 | Arduino Case: |
xshige | 0:8096151ff6c6 | 32 | Wiring Info for TMP102 |
xshige | 0:8096151ff6c6 | 33 | module side | Arduino side |
xshige | 0:8096151ff6c6 | 34 | GND --------- GND |
xshige | 0:8096151ff6c6 | 35 | SCL --------- A5 |
xshige | 0:8096151ff6c6 | 36 | SDA --------- A4 |
xshige | 0:8096151ff6c6 | 37 | V+ --------- +3.3V |
xshige | 0:8096151ff6c6 | 38 | ALT --------- NC |
xshige | 0:8096151ff6c6 | 39 | ADD0 -------- GND |
xshige | 0:8096151ff6c6 | 40 | |
xshige | 0:8096151ff6c6 | 41 | Wring Info ofr LM61BIZ |
xshige | 0:8096151ff6c6 | 42 | sensor side | Arduino side |
xshige | 0:8096151ff6c6 | 43 | +Vs --------- +5V or +3.3V |
xshige | 0:8096151ff6c6 | 44 | Vout--------- A3 (analog input) |
xshige | 0:8096151ff6c6 | 45 | GND --------- GND |
xshige | 0:8096151ff6c6 | 46 | |
xshige | 0:8096151ff6c6 | 47 | Datasheet: |
xshige | 0:8096151ff6c6 | 48 | http://www.sparkfun.com/datasheets/Sensors/Temperature/tmp102.pdf |
xshige | 0:8096151ff6c6 | 49 | http://www.national.com/ds/LM/LM61.pdf |
xshige | 0:8096151ff6c6 | 50 | |
xshige | 0:8096151ff6c6 | 51 | */ |
xshige | 0:8096151ff6c6 | 52 | |
xshige | 0:8096151ff6c6 | 53 | #define MBED |
xshige | 0:8096151ff6c6 | 54 | |
xshige | 0:8096151ff6c6 | 55 | #ifdef MBED |
xshige | 0:8096151ff6c6 | 56 | #include "mbed.h" |
xshige | 0:8096151ff6c6 | 57 | #else |
xshige | 0:8096151ff6c6 | 58 | #include <Wire.h> |
xshige | 0:8096151ff6c6 | 59 | #endif |
xshige | 0:8096151ff6c6 | 60 | |
xshige | 0:8096151ff6c6 | 61 | #ifdef MBED |
xshige | 0:8096151ff6c6 | 62 | I2C i2c(p9, p10); // sda, scl |
xshige | 0:8096151ff6c6 | 63 | Serial pc(USBTX, USBRX); // tx, rx |
xshige | 0:8096151ff6c6 | 64 | char cmd[2]; // command for I2C |
xshige | 0:8096151ff6c6 | 65 | #endif |
xshige | 0:8096151ff6c6 | 66 | |
xshige | 0:8096151ff6c6 | 67 | // setup for TMP102 |
xshige | 0:8096151ff6c6 | 68 | #ifdef MBED |
xshige | 0:8096151ff6c6 | 69 | #define TEMP_REG 0x0 |
xshige | 0:8096151ff6c6 | 70 | int tmp102 = 0x90; // with ADD0 tied to ground |
xshige | 0:8096151ff6c6 | 71 | // important note: (Arduino_Address<<4)==(mbed_Address) |
xshige | 0:8096151ff6c6 | 72 | #else |
xshige | 0:8096151ff6c6 | 73 | #define TEMP_REG 0b00000000 |
xshige | 0:8096151ff6c6 | 74 | int tmp102 = 0b1001000; // with ADD0 tied to ground |
xshige | 0:8096151ff6c6 | 75 | #endif |
xshige | 0:8096151ff6c6 | 76 | |
xshige | 0:8096151ff6c6 | 77 | // setup for LM61BIZ |
xshige | 0:8096151ff6c6 | 78 | #ifdef MBED |
xshige | 0:8096151ff6c6 | 79 | AnalogIn LM61pin(p20); // select analog input |
xshige | 0:8096151ff6c6 | 80 | #else |
xshige | 0:8096151ff6c6 | 81 | int LM61Pin = 3; // select analog input |
xshige | 0:8096151ff6c6 | 82 | #endif |
xshige | 0:8096151ff6c6 | 83 | |
xshige | 0:8096151ff6c6 | 84 | void setPR(int reg) { |
xshige | 0:8096151ff6c6 | 85 | #ifndef MBED // not MBED |
xshige | 0:8096151ff6c6 | 86 | Wire.beginTransmission(tmp102); |
xshige | 0:8096151ff6c6 | 87 | Wire.send(reg); |
xshige | 0:8096151ff6c6 | 88 | Wire.endTransmission(); |
xshige | 0:8096151ff6c6 | 89 | #endif |
xshige | 0:8096151ff6c6 | 90 | } |
xshige | 0:8096151ff6c6 | 91 | |
xshige | 0:8096151ff6c6 | 92 | int getReg() { |
xshige | 0:8096151ff6c6 | 93 | unsigned char lo, hi; |
xshige | 0:8096151ff6c6 | 94 | #ifdef MBED |
xshige | 0:8096151ff6c6 | 95 | cmd[0] = TEMP_REG; i2c.write(tmp102, cmd, 1); // set temp?reg |
xshige | 0:8096151ff6c6 | 96 | i2c.read(tmp102, cmd, 2); // read the two-byte echo result |
xshige | 0:8096151ff6c6 | 97 | hi = cmd[0]; lo = cmd[1]; |
xshige | 0:8096151ff6c6 | 98 | #else |
xshige | 0:8096151ff6c6 | 99 | Wire.requestFrom(tmp102, 2); |
xshige | 0:8096151ff6c6 | 100 | hi = Wire.receive(); |
xshige | 0:8096151ff6c6 | 101 | lo = Wire.receive(); |
xshige | 0:8096151ff6c6 | 102 | #endif |
xshige | 0:8096151ff6c6 | 103 | return (hi << 8) + lo; |
xshige | 0:8096151ff6c6 | 104 | } |
xshige | 0:8096151ff6c6 | 105 | |
xshige | 0:8096151ff6c6 | 106 | void setup() { |
xshige | 0:8096151ff6c6 | 107 | #ifndef MBED // not MBED |
xshige | 0:8096151ff6c6 | 108 | Serial.begin(9600); |
xshige | 0:8096151ff6c6 | 109 | Wire.begin(); |
xshige | 0:8096151ff6c6 | 110 | setPR(TEMP_REG); |
xshige | 0:8096151ff6c6 | 111 | #endif |
xshige | 0:8096151ff6c6 | 112 | } |
xshige | 0:8096151ff6c6 | 113 | |
xshige | 0:8096151ff6c6 | 114 | void show_TMP102_temp() { |
xshige | 0:8096151ff6c6 | 115 | int temp_reg = getReg(); |
xshige | 0:8096151ff6c6 | 116 | temp_reg >>= 4; |
xshige | 0:8096151ff6c6 | 117 | |
xshige | 0:8096151ff6c6 | 118 | float temp_C = temp_reg * 0.0625; |
xshige | 0:8096151ff6c6 | 119 | float temp_F = (temp_C * 9 / 5) + 32; |
xshige | 0:8096151ff6c6 | 120 | |
xshige | 0:8096151ff6c6 | 121 | #ifdef MBED |
xshige | 0:8096151ff6c6 | 122 | printf("TMP102: %2.1f degree C\r\n",temp_C); |
xshige | 0:8096151ff6c6 | 123 | printf("TMP102: %2.1f degree F\r\n",temp_F); |
xshige | 0:8096151ff6c6 | 124 | #else |
xshige | 0:8096151ff6c6 | 125 | Serial.print("TMP102: "); |
xshige | 0:8096151ff6c6 | 126 | Serial.print(temp_C); |
xshige | 0:8096151ff6c6 | 127 | Serial.println(" degree C "); |
xshige | 0:8096151ff6c6 | 128 | Serial.print(temp_F); |
xshige | 0:8096151ff6c6 | 129 | Serial.println("\xdf""F "); |
xshige | 0:8096151ff6c6 | 130 | #endif |
xshige | 0:8096151ff6c6 | 131 | } |
xshige | 0:8096151ff6c6 | 132 | |
xshige | 0:8096151ff6c6 | 133 | void show_LM61_temp() { |
xshige | 0:8096151ff6c6 | 134 | // read the value from the sensor: |
xshige | 0:8096151ff6c6 | 135 | #ifdef MBED |
xshige | 0:8096151ff6c6 | 136 | float value = 3.3*LM61pin.read_u16()/0xFFFF; |
xshige | 0:8096151ff6c6 | 137 | // in mbed, input range is 0 thru 3.3V |
xshige | 0:8096151ff6c6 | 138 | #else |
xshige | 0:8096151ff6c6 | 139 | float value = 5.0*analogRead(LM61Pin)/1023.0; |
xshige | 0:8096151ff6c6 | 140 | // in Arduino, input range is 0 thru 5V in many case |
xshige | 0:8096151ff6c6 | 141 | #endif |
xshige | 0:8096151ff6c6 | 142 | |
xshige | 0:8096151ff6c6 | 143 | // get degree C form LM61BIZ value |
xshige | 0:8096151ff6c6 | 144 | float LM61degree=(value-0.6)/0.01; |
xshige | 0:8096151ff6c6 | 145 | |
xshige | 0:8096151ff6c6 | 146 | #ifdef MBED |
xshige | 0:8096151ff6c6 | 147 | printf("LM61: %2.1f degree C\r\n",LM61degree); |
xshige | 0:8096151ff6c6 | 148 | #else |
xshige | 0:8096151ff6c6 | 149 | Serial.print("LM61: "); |
xshige | 0:8096151ff6c6 | 150 | Serial.print(LM61degree); |
xshige | 0:8096151ff6c6 | 151 | Serial.println(" degree C"); |
xshige | 0:8096151ff6c6 | 152 | #endif |
xshige | 0:8096151ff6c6 | 153 | } |
xshige | 0:8096151ff6c6 | 154 | |
xshige | 0:8096151ff6c6 | 155 | void loop() { |
xshige | 0:8096151ff6c6 | 156 | show_TMP102_temp(); |
xshige | 0:8096151ff6c6 | 157 | show_LM61_temp(); |
xshige | 0:8096151ff6c6 | 158 | #ifdef MBED |
xshige | 0:8096151ff6c6 | 159 | printf("\r\n"); |
xshige | 0:8096151ff6c6 | 160 | #endif |
xshige | 0:8096151ff6c6 | 161 | } |
xshige | 0:8096151ff6c6 | 162 | |
xshige | 0:8096151ff6c6 | 163 | #ifdef MBED |
xshige | 0:8096151ff6c6 | 164 | void init() |
xshige | 0:8096151ff6c6 | 165 | { |
xshige | 0:8096151ff6c6 | 166 | // make debug port Fast |
xshige | 0:8096151ff6c6 | 167 | // pc.baud(9600); |
xshige | 0:8096151ff6c6 | 168 | pc.baud(115200); |
xshige | 0:8096151ff6c6 | 169 | // pc.baud(230400); |
xshige | 0:8096151ff6c6 | 170 | } |
xshige | 0:8096151ff6c6 | 171 | |
xshige | 0:8096151ff6c6 | 172 | int main(void) |
xshige | 0:8096151ff6c6 | 173 | { |
xshige | 0:8096151ff6c6 | 174 | init(); |
xshige | 0:8096151ff6c6 | 175 | |
xshige | 0:8096151ff6c6 | 176 | setup(); |
xshige | 0:8096151ff6c6 | 177 | |
xshige | 0:8096151ff6c6 | 178 | for (;;) |
xshige | 0:8096151ff6c6 | 179 | loop(); |
xshige | 0:8096151ff6c6 | 180 | |
xshige | 0:8096151ff6c6 | 181 | return 0; |
xshige | 0:8096151ff6c6 | 182 | } |
xshige | 0:8096151ff6c6 | 183 | #endif |