Skip to content

Commit 2c42fa8

Browse files
committed
+ version 0.1.05
+ added option 0,1,2,4,8 to set the speeds tested + added option a to select the address range + added version string + improved help page
1 parent de108c6 commit 2c42fa8

File tree

1 file changed

+97
-12
lines changed

1 file changed

+97
-12
lines changed

sketches/MultiSpeedI2CScanner/MultiSpeedI2CScanner.ino

Lines changed: 97 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//
22
// FILE: MultiSpeedI2CScanner.ino
33
// AUTHOR: Rob Tillaart
4-
// VERSION: 0.1.04
4+
// VERSION: 0.1.05
55
// PURPOSE: I2C scanner @different speeds
66
// DATE: 2013-11-05
77
// URL: http://forum.arduino.cc/index.php?topic=197360
@@ -12,12 +12,18 @@
1212
#include <Wire.h>
1313
#include <Arduino.h>
1414

15+
const char version[] = "0.1.05";
16+
1517
// scans devices from 50 to 800KHz I2C speeds.
1618
// lower than 50 is not possible
1719
// DS3231 RTC works on 800 KHz. TWBR = 2; (?)
18-
long speed[] = {
20+
const long allSpeed[] = {
1921
50, 100, 200, 250, 400, 500, 800 };
20-
const int speeds = sizeof(speed)/sizeof(speed[0]);
22+
long speed[sizeof(allSpeed)/sizeof(allSpeed[0])];
23+
int speeds;
24+
25+
int addressStart = 0;
26+
int addressEnd = 127;
2127

2228
// DELAY BETWEEN TESTS
2329
#define RESTORE_LATENCY 5 // for delay between tests of found devices.
@@ -39,13 +45,15 @@ void setup()
3945
{
4046
Serial.begin(115200);
4147
Wire.begin();
48+
setSpeed('0');
4249
displayHelp();
4350
}
4451

4552

4653
void loop()
4754
{
48-
switch (getCommand())
55+
char command = getCommand();
56+
switch (command)
4957
{
5058
case 's':
5159
state = ONCE;
@@ -58,25 +66,38 @@ void loop()
5866
Serial.print(F("<delay="));
5967
Serial.println(delayFlag?F("5>"):F("0>"));
6068
break;
69+
6170
case 'e':
6271
// eeprom test TODO
6372
break;
73+
6474
case 'h':
6575
header = !header;
6676
Serial.print(F("<header="));
6777
Serial.println(header?F("yes>"):F("no>"));
6878
break;
69-
case '?':
70-
state = HELP;
71-
break;
7279
case 'p':
7380
printAll = !printAll;
7481
Serial.print(F("<print="));
7582
Serial.println(printAll?F("all>"):F("found>"));
7683
break;
84+
85+
case '0':
86+
case '1':
87+
case '2':
88+
case '4':
89+
case '8':
90+
setSpeed(command);
91+
break;
92+
93+
case 'a':
94+
setAddress();
95+
break;
96+
7797
case 'q':
98+
case '?':
7899
state = HELP;
79-
break;
100+
break;
80101
default:
81102
break;
82103
}
@@ -102,6 +123,57 @@ void loop()
102123
}
103124
}
104125

126+
127+
void setAddress()
128+
{
129+
if (addressStart == 0)
130+
{
131+
addressStart = 8;
132+
addressEnd = 120;
133+
}
134+
else
135+
{
136+
addressStart = 0;
137+
addressEnd = 127;
138+
}
139+
Serial.print(F("<address Range = "));
140+
Serial.print(addressStart);
141+
Serial.print(F(".."));
142+
Serial.print(addressEnd);
143+
Serial.println(F(">"));
144+
145+
}
146+
147+
void setSpeed(char sp)
148+
{
149+
switch(sp)
150+
{
151+
case '1':
152+
speed[0] = 100;
153+
speeds = 1;
154+
break;
155+
case '2':
156+
speed[0] = 200;
157+
speeds = 1;
158+
break;
159+
case '4':
160+
speed[0] = 400;
161+
speeds = 1;
162+
break;
163+
case '8':
164+
speed[0] = 800;
165+
speeds = 1;
166+
break;
167+
case '0':
168+
speeds = sizeof(allSpeed)/sizeof(allSpeed[0]);
169+
for (int i=0; i< speeds; i++)
170+
{
171+
speed[i] = allSpeed[i];
172+
}
173+
break;
174+
}
175+
}
176+
105177
char getCommand()
106178
{
107179
char c = '\0';
@@ -114,14 +186,25 @@ char getCommand()
114186

115187
void displayHelp()
116188
{
117-
Serial.println(F("\nArduino I2C Scanner - 0.1.03\n"));
189+
Serial.print(F("\nArduino I2C Scanner - "));
190+
Serial.println(version);
191+
Serial.println();
192+
Serial.println(F("Scanmode:"));
118193
Serial.println(F("\ts = single scan"));
119194
Serial.println(F("\tc = continuous scan - 1 second delay"));
120195
Serial.println(F("\tq = quit continuous scan"));
121-
Serial.println(F("\td = toggle latency delay between successful tests."));
196+
Serial.println(F("\td = toggle latency delay between successful tests. 0 - 5 ms"));
197+
Serial.println(F("Output:"));
122198
Serial.println(F("\tp = toggle printAll - printFound."));
123199
Serial.println(F("\th = toggle header - noHeader."));
124-
Serial.println(F("\t? = help - this page"));
200+
Serial.println(F("\ta = toggle address range, 0..127 - 8..120"));
201+
Serial.println(F("Speeds:"));
202+
Serial.println(F("\t0 = 50 - 800 Khz"));
203+
Serial.println(F("\t1 = 100 KHz only"));
204+
Serial.println(F("\t2 = 200 KHz only"));
205+
Serial.println(F("\t4 = 400 KHz only"));
206+
Serial.println(F("\t8 = 800 KHz only"));
207+
Serial.println(F("\n\t? = help - this page"));
125208
Serial.println();
126209
}
127210

@@ -159,7 +242,7 @@ void I2Cscan()
159242
// 0000 1XX X High Speed master code
160243
// 1111 1XX X reserved - future purposes
161244
// 1111 0XX X 10-bit slave addressing
162-
for (uint8_t address = 8; address < 120; address++)
245+
for (uint8_t address = addressStart; address <= addressEnd; address++)
163246
{
164247
bool printLine = printAll;
165248
bool found[speeds];
@@ -184,6 +267,7 @@ void I2Cscan()
184267
Serial.print(F("\t"));
185268
Serial.print(address, DEC);
186269
Serial.print(F("\t0x"));
270+
if (address < 0x10) Serial.print(0, HEX);
187271
Serial.print(address, HEX);
188272
Serial.print(F("\t"));
189273

@@ -207,3 +291,4 @@ void I2Cscan()
207291
}
208292
}
209293

294+

0 commit comments

Comments
 (0)