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.
Revision 0:d66d4aaa919f, committed 2019-03-14
- Comitter:
- nemanja1994
- Date:
- Thu Mar 14 18:10:31 2019 +0000
- Commit message:
- Gg
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Thu Mar 14 18:10:31 2019 +0000
@@ -0,0 +1,162 @@
+#include "mbed.h"
+
+#define IrThermo_Addr (0x5A<<1)
+#define Tamb 0x06
+#define Tobj 0x07
+
+I2C i2c(D14, D15);
+DigitalOut myled(LED1);
+Serial console(SERIAL_TX, SERIAL_RX);
+
+int temperature=0;
+char data_read[2];
+char data_write[1]= {Tobj};
+char data_add[1]= {(0x2E)};
+
+void changeAddress()
+{
+ //char newAddr[2]= {0x5E,0x00};
+ char p1,p2;
+ bool ch,ch2,ch3;
+
+ //----read address to make sure it worked------------
+
+ // send start bit
+ i2c.start();
+ // send universal address
+ ch = i2c.write(0x00);
+ // prints if sensor acknowledges
+ if (!ch) console.printf("no ack\n");
+ else console.printf("ack\n");
+ // send EEPROM slave location address
+ ch2 = i2c.write(0x2E);
+ // send repeated start
+ i2c.start();
+ // send universal address 0x00 (seven bit) and use 1 as the eight bit -> 0x01
+ i2c.write(0x01); // last bit 1 indicates read request
+ // read LSB
+ p1 = i2c.read(1);
+ // read MSB
+ p2 = i2c.read(1);
+ // read PEC
+ i2c.read(0);
+ // release the bus
+ i2c.stop();
+ wait(0.1);
+ // print hex
+ console.printf("0x%x%x\nMSB 0x%x, LSB 0x%x\n", p2, p1, p2, p1);
+ wait(10);
+
+
+ // make sure i2c is inactive
+ i2c.stop();
+ wait(0.1);
+ //send start bit
+ i2c.start();
+ // address the sensor using universal address 0x00 not its default 0x5A
+ ch = i2c.write(0x00); // last bit 0 indicates write
+ // prints if sensor acknowledges
+ if (!ch) {
+ console.printf("no ack\n");
+ } else console.printf("ack 0x00\n");
+ // write command
+ // EEPROM address. Datasheet says 0x0E BUT!!! accessing EEPROM requires ading 0x20. Hence, 0x2E
+ ch2 = i2c.write(0x2E);
+ // prints if sensor acknowledges
+ if (!ch2) console.printf("no ack address location\n");
+ console.printf("ack 0x0E\n");
+ // delete old address
+ // LSB
+ i2c.write(0x00);
+ // MSB
+ i2c.write(0x00);
+ // use CRC-8 calculator to obtain PEC bit http://www.sunshine2k.de/coding/javascript/crc/crc_js.html
+ // I send 2E0000 --> PEC 0x6F
+ ch3 = i2c.write(0x6F);
+ // prints if sensor acknowledges
+ if(!ch3) console.printf("no PEC\n");
+ else console.printf("PEC success\n");
+ // release the bus
+ i2c.stop();
+ wait(1);
+
+//-----set new address----------------
+
+ // send start bit
+ i2c.start();
+ // send universal device address 0x00
+ i2c.write(0x00);
+ // prints if sensor acknowledges
+ if (!ch) console.printf("no ack\n");
+ else console.printf("ack\n");
+ // send EEPROM location for slave address
+ ch2 = i2c.write(0x2E);
+ // prints if sensor acknowledges
+ if (!ch2) console.printf("no ack slave address location\n");
+ else console.printf("ack 2\n");
+ //write new address anything between 0x0000 and 0x007F (default 0x5A, PEC 0xE1)
+ // LSB
+ i2c.write(0x04);
+ // MSB
+ i2c.write(0x00);
+ // send PEC calculated from CRC-8
+ // I send 2E0400 -> PEC 0x3B
+ i2c.write(0x3B);
+ // release the bus
+ i2c.stop();
+ wait(1);
+
+//----read address to make sure it worked------------
+
+ // send start bit
+ i2c.start();
+ // send universal address
+ ch = i2c.write(0x00);
+ // prints if sensor acknowledges
+ if (!ch) console.printf("no ack\n");
+ else console.printf("ack\n");
+ // send EEPROM slave location address
+ ch2 = i2c.write(0x2E);
+ // send repeated start
+ i2c.start();
+ // send universal address 0x00 (seven bit) and use 1 as the eight bit -> 0x01
+ i2c.write(0x01); // last bit 1 indicates read request
+ // read LSB
+ p1 = i2c.read(1);
+ // read MSB
+ p2 = i2c.read(1);
+ // read PEC
+ i2c.read(0);
+ // release the bus
+ i2c.stop();
+ wait(0.1);
+ // print hex
+ console.printf("0x%x%x\nMSB 0x%x, LSB 0x%x\n", p2, p1, p2, p1);
+ wait(10);
+}
+
+int main()
+{
+ console.printf("IrThermo Test\n");
+ i2c.write(IrThermo_Addr, data_add, 1, 1);
+ i2c.read(IrThermo_Addr, data_read, 2, 0);
+ console.printf("Sensor Address: %x\n",data_read[0]);
+ //changeAddress();
+
+ while(1) {
+ i2c.write(IrThermo_Addr, data_write, 1, 1);
+ i2c.read(IrThermo_Addr, data_read, 2, 0);
+
+ console.printf("Raw Data: %x %x\n",(data_read[0]), (data_read[1]));
+ temperature = (int) ((int)data_read[1] << 8) | data_read[0];
+ temperature = (temperature * 0.02 - 273.15);
+ if (data_write[0]==Tamb) {
+ console.printf("Ambient temperature= %d\n", temperature);
+ } else {
+ console.printf("Object temperature= %d\n", temperature);
+ }
+ myled = !myled;
+ wait(1.0);
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Thu Mar 14 18:10:31 2019 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/mbed_official/code/mbed/builds/235179ab3f27 \ No newline at end of file