-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathi2c.cpp
103 lines (87 loc) · 2.32 KB
/
i2c.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <Arduino.h>
#include <Wire.h>
#include "declares.h"
#include "settings.h"
short nDevices;
void writeTo(uint8_t deviceAddress, uint16_t settingFlag, uint16_t FlagValue)
{
Wire.beginTransmission(deviceAddress);
Wire.write(settingFlag);
Wire.write(FlagValue);
Wire.endTransmission();
delay(10);
}
int16_t readFrom(uint8_t deviceAddress, uint16_t settingFlag, uint16_t numBytes)
{
int numOfBytes;
Wire.beginTransmission(deviceAddress);
Wire.write(0);
Wire.endTransmission();
Wire.requestFrom(deviceAddress, numBytes);
int16_t rData = -1;
numOfBytes = Wire.available();
// Serial.print(F("numOfBytes Available: ");
// Serial.println(numOfBytes);
if (numOfBytes > 0) {
for (int i = 0; i < numOfBytes; i++) {
uint8_t aData = Wire.read();
// Serial.print(F("Value ");
// Serial.print(i);
// Serial.print(F(": ");
// Serial.print(aData);
if (numBytes > 1) {
uint8_t bData = Wire.read();
rData = (aData << 8) | bData;
}
else {
rData = aData;
}
}
// rData = Wire.read();
// if (numBytes > 1) {
// uint8_t b;
// b = Wire.read();
// rData = (rData << 8) | b;
// Serial.println("Second Byte");
}
return rData;
}
void SearchDevices()
{
uint8_t findaddress;
uint8_t error;
Serial.println(F("\nScanning Bus..."));
int nDevices = 0;
for (findaddress = 1; findaddress < 127; findaddress++ )
{
// The i2c_scanner uses the return value of the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(findaddress);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print(F("Found device at address 0x"));
if (findaddress < 16)
Serial.print(F("0"));
Serial.print(findaddress, HEX);
Serial.println(F(" !"));
// bms.address = findaddress;
nDevices++;
}
else if (error == 4)
{
Serial.print(F("Unknown error at address 0x"));
if (findaddress < 16)
Serial.print(F("0"));
Serial.println(findaddress, HEX);
}
}
if (nDevices == 0)
Serial.println(F("No I2C devices found\n"));
else
Serial.println(F("done\n"));
String buf = String("Found " + String(nDevices) + " device(s)");
printScreen(20, 20, buf);
delay(1000);
return;
}