Sensor I2C Coragem

Committer:
brunnobbco
Date:
Mon Jun 29 20:36:27 2020 +0000
Revision:
0:4c3c977e65f0
Sensor I2C Coragem

Who changed what in which revision?

UserRevisionLine numberNew contents of line
brunnobbco 0:4c3c977e65f0 1 #include "mbed.h"
brunnobbco 0:4c3c977e65f0 2
brunnobbco 0:4c3c977e65f0 3 //#define ADDR (0x6D<<1)
brunnobbco 0:4c3c977e65f0 4
brunnobbco 0:4c3c977e65f0 5 Serial pc(p25, p8); // tx, rx
brunnobbco 0:4c3c977e65f0 6 DigitalOut ADR(P0_12);
brunnobbco 0:4c3c977e65f0 7
brunnobbco 0:4c3c977e65f0 8 I2C i2c(p13, p15);
brunnobbco 0:4c3c977e65f0 9
brunnobbco 0:4c3c977e65f0 10
brunnobbco 0:4c3c977e65f0 11 char buffer[2];
brunnobbco 0:4c3c977e65f0 12 uint16_t aux;
brunnobbco 0:4c3c977e65f0 13
brunnobbco 0:4c3c977e65f0 14 int main()
brunnobbco 0:4c3c977e65f0 15 {
brunnobbco 0:4c3c977e65f0 16 ADR=1;
brunnobbco 0:4c3c977e65f0 17 char sco_bit;
brunnobbco 0:4c3c977e65f0 18 i2c.frequency(100000);
brunnobbco 0:4c3c977e65f0 19
brunnobbco 0:4c3c977e65f0 20 const int addr = 0x6d << 1;
brunnobbco 0:4c3c977e65f0 21 char readdata[3];
brunnobbco 0:4c3c977e65f0 22
brunnobbco 0:4c3c977e65f0 23 while(1)
brunnobbco 0:4c3c977e65f0 24 {
brunnobbco 0:4c3c977e65f0 25 int ret, value, value1, value2;
brunnobbco 0:4c3c977e65f0 26 sco_bit = 1;
brunnobbco 0:4c3c977e65f0 27 pc.printf("Lendo valor em registrador 0xA5…\r\n");
brunnobbco 0:4c3c977e65f0 28
brunnobbco 0:4c3c977e65f0 29 buffer[0] = 0xA5;
brunnobbco 0:4c3c977e65f0 30
brunnobbco 0:4c3c977e65f0 31 //ret = i2c.write((addr << 1) & 0xFE);
brunnobbco 0:4c3c977e65f0 32 ret = i2c.write(addr, buffer, 1);
brunnobbco 0:4c3c977e65f0 33
brunnobbco 0:4c3c977e65f0 34 if (!ret) // 0:ACK 1:NACK
brunnobbco 0:4c3c977e65f0 35 {
brunnobbco 0:4c3c977e65f0 36 ret = i2c.read(addr, readdata, 3);
brunnobbco 0:4c3c977e65f0 37
brunnobbco 0:4c3c977e65f0 38 if (ret)
brunnobbco 0:4c3c977e65f0 39 pc.printf("Erro B %d.\r\n", ret);
brunnobbco 0:4c3c977e65f0 40 }
brunnobbco 0:4c3c977e65f0 41 else
brunnobbco 0:4c3c977e65f0 42 pc.printf("Erro A %d.\r\n", ret);
brunnobbco 0:4c3c977e65f0 43
brunnobbco 0:4c3c977e65f0 44 if (!ret)
brunnobbco 0:4c3c977e65f0 45 {
brunnobbco 0:4c3c977e65f0 46 buffer[0] = 0xA5;
brunnobbco 0:4c3c977e65f0 47 buffer[1] = readdata[0] & 0x07;
brunnobbco 0:4c3c977e65f0 48 buffer[2] = readdata[1] & 0x0f;
brunnobbco 0:4c3c977e65f0 49 buffer[3] = readdata[2] & 0x0d;
brunnobbco 0:4c3c977e65f0 50 ret = i2c.write(addr, buffer, 4);
brunnobbco 0:4c3c977e65f0 51
brunnobbco 0:4c3c977e65f0 52 if (ret == 0) // 0:ACK 1:NACK
brunnobbco 0:4c3c977e65f0 53 {
brunnobbco 0:4c3c977e65f0 54 buffer[0] = 0x30;
brunnobbco 0:4c3c977e65f0 55 buffer[1] = 0x0A;
brunnobbco 0:4c3c977e65f0 56 i2c.write(addr, buffer, 2);
brunnobbco 0:4c3c977e65f0 57 i2c.read(addr, sco_bit, 1);
brunnobbco 0:4c3c977e65f0 58
brunnobbco 0:4c3c977e65f0 59 if (!sco_bit)
brunnobbco 0:4c3c977e65f0 60 {
brunnobbco 0:4c3c977e65f0 61 buffer[0] = 0x06;
brunnobbco 0:4c3c977e65f0 62 i2c.write(addr, buffer, 1);
brunnobbco 0:4c3c977e65f0 63 i2c.read(addr, readdata[0], 3);
brunnobbco 0:4c3c977e65f0 64 buffer[0] = 0x07;
brunnobbco 0:4c3c977e65f0 65 i2c.write(addr, buffer, 1);
brunnobbco 0:4c3c977e65f0 66 i2c.read(addr, readdata[1], 3);
brunnobbco 0:4c3c977e65f0 67 buffer[0] = 0x08;
brunnobbco 0:4c3c977e65f0 68 i2c.write(addr, buffer, 1);
brunnobbco 0:4c3c977e65f0 69 i2c.read(addr, readdata[2], 3);
brunnobbco 0:4c3c977e65f0 70
brunnobbco 0:4c3c977e65f0 71 pc.printf("Valor lido: %d\n", readdata);
brunnobbco 0:4c3c977e65f0 72 }
brunnobbco 0:4c3c977e65f0 73 }
brunnobbco 0:4c3c977e65f0 74 else
brunnobbco 0:4c3c977e65f0 75 pc.printf("Erro C %d.\r\n", ret);
brunnobbco 0:4c3c977e65f0 76 }
brunnobbco 0:4c3c977e65f0 77 }
brunnobbco 0:4c3c977e65f0 78 }