Skip to content

Commit c3ee322

Browse files
committed
Add toggle pin option to system check sketch
1 parent a9decf9 commit c3ee322

File tree

3 files changed

+159
-5
lines changed

3 files changed

+159
-5
lines changed

Firmware/Test Sketches/System_Check/System_Check.ino

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -197,17 +197,47 @@ bool i2cBorked = false;
197197
void setup()
198198
{
199199
Serial.begin(115200);
200+
delay(250);
201+
202+
// int pinNumber1 = 21;
203+
// int pinNumber2 = 22;
204+
// clearBuffer();
205+
// pinMode(pinNumber1, OUTPUT);
206+
// pinMode(pinNumber2, OUTPUT);
207+
//
208+
// Serial.printf("\n\rToggling pin %d. Press x to exit\n\r", pinNumber1);
209+
// Serial.printf("\n\rToggling pin %d. Press x to exit\n\r", pinNumber2);
210+
//
211+
// while (Serial.available() == 0)
212+
// {
213+
// digitalWrite(pinNumber1, HIGH);
214+
// digitalWrite(pinNumber2, HIGH);
215+
// for (int x = 0 ; x < 100 ; x++)
216+
// {
217+
// delay(30);
218+
// if (Serial.available()) break;
219+
// }
220+
//
221+
// digitalWrite(pinNumber1, LOW);
222+
// digitalWrite(pinNumber2, LOW);
223+
// for (int x = 0 ; x < 100 ; x++)
224+
// {
225+
// delay(30);
226+
// if (Serial.available()) break;
227+
// }
228+
// }
229+
// pinMode(pinNumber1, INPUT);
230+
// pinMode(pinNumber2, INPUT);
231+
//
232+
// Serial.println("Done");
200233

201234
Wire.begin();
202235

203-
unsigned long startTime = millis();
204-
205236
//begin/end wire transmission should take a few ms. If it's taking longer,
206237
//it's likely the I2C bus being shorted or pulled in
207-
238+
unsigned long startTime = millis();
208239
Wire.beginTransmission(0x15); //Dummy address
209240
int endValue = Wire.endTransmission();
210-
211241
if (millis() - startTime > 100) i2cBorked = true;
212242

213243
beginBoard(); //Determine what hardware platform we are running on and check on button

Firmware/Test Sketches/System_Check/menuSystem.ino

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ void menuSystem()
139139

140140
Serial.println(F("s) Scan I2C"));
141141
Serial.println(F("S) Verbose scan of I2C"));
142+
Serial.println(F("t) Toggle pin"));
142143
Serial.println(F("r) Reset"));
143144

144145
byte incoming = getByteChoice(menuTimeout); //Timeout after x seconds
@@ -213,7 +214,50 @@ void menuSystem()
213214
Serial.println();
214215
}
215216
Serial.println("Done");
216-
} else if (incoming == STATUS_GETBYTE_TIMEOUT)
217+
}
218+
else if (incoming == 't')
219+
{
220+
Serial.println("Select pin to toggle:");
221+
Serial.println("0 - Stat LED");
222+
Serial.println("21 - SDA");
223+
Serial.println("22 - SCL");
224+
Serial.println("23 - SD COPI");
225+
Serial.println("13 - Power Control");
226+
int pinNumber = getNumber(menuTimeout); //Timeout after x seconds
227+
228+
if (pinNumber >= 0 && pinNumber < STATUS_PRESSED_X)
229+
{
230+
Wire.end();
231+
delete sd;
232+
233+
clearBuffer();
234+
pinMode(pinNumber, OUTPUT);
235+
236+
Serial.printf("\n\rToggling pin %d. Press x to exit\n\r", pinNumber);
237+
238+
while (Serial.available() == 0)
239+
{
240+
digitalWrite(pinNumber, HIGH);
241+
for (int x = 0 ; x < 100 ; x++)
242+
{
243+
delay(30);
244+
if (Serial.available()) break;
245+
}
246+
247+
digitalWrite(pinNumber, LOW);
248+
for (int x = 0 ; x < 100 ; x++)
249+
{
250+
delay(30);
251+
if (Serial.available()) break;
252+
}
253+
}
254+
pinMode(pinNumber, INPUT);
255+
256+
Serial.println("Done");
257+
ESP.restart();
258+
}
259+
}
260+
else if (incoming == STATUS_GETBYTE_TIMEOUT)
217261
{
218262
//break;
219263
}

Firmware/Test Sketches/System_Check/support.ino

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,83 @@ uint8_t getByteChoice(int numberOfSeconds)
5353

5454
return (incoming);
5555
}
56+
57+
//Get a string/value from user, remove all non-numeric values
58+
//Returns STATUS_GETNUMBER_TIMEOUT if input times out
59+
//Returns STATUS_PRESSED_X if user presses 'x'
60+
int64_t getNumber(int numberOfSeconds)
61+
{
62+
clearBuffer();
63+
64+
//Get input from user
65+
char cleansed[20]; //Good for very large numbers: 123,456,789,012,345,678\0
66+
67+
long startTime = millis();
68+
int spot = 0;
69+
while (spot < 20 - 1) //Leave room for terminating \0
70+
{
71+
while (Serial.available() == 0) //Wait for user input
72+
{
73+
delay(10); //Yield to processor
74+
if (online.gnss == true)
75+
i2cGNSS.checkUblox(); //Regularly poll to get latest data
76+
77+
if ( (millis() - startTime) / 1000 >= numberOfSeconds)
78+
{
79+
if (spot == 0)
80+
{
81+
Serial.println(F("No user input received. Do you have line endings turned on?"));
82+
return (STATUS_GETNUMBER_TIMEOUT); //Timeout. No user input.
83+
}
84+
else if (spot > 0)
85+
{
86+
break; //Timeout, but we have data
87+
}
88+
}
89+
}
90+
91+
//See if we timed out waiting for a line ending
92+
if (spot > 0 && (millis() - startTime) / 1000 >= numberOfSeconds)
93+
{
94+
Serial.println(F("Do you have line endings turned on?"));
95+
break; //Timeout, but we have data
96+
}
97+
98+
byte incoming = Serial.read();
99+
if (incoming == '\n' || incoming == '\r')
100+
{
101+
Serial.println();
102+
break;
103+
}
104+
105+
if ((isDigit(incoming) == true) || ((incoming == '-') && (spot == 0))) // Check for digits and a minus sign
106+
{
107+
Serial.write(incoming); //Echo user's typing
108+
cleansed[spot++] = (char)incoming;
109+
}
110+
111+
if (incoming == 'x')
112+
{
113+
return (STATUS_PRESSED_X);
114+
}
115+
}
116+
117+
cleansed[spot] = '\0';
118+
119+
int64_t largeNumber = 0;
120+
int x = 0;
121+
if (cleansed[0] == '-') // If our number is negative
122+
{
123+
x = 1; // Skip the minus
124+
}
125+
for ( ; x < spot ; x++)
126+
{
127+
largeNumber *= 10;
128+
largeNumber += (cleansed[x] - '0');
129+
}
130+
if (cleansed[0] == '-') // If our number is negative
131+
{
132+
largeNumber = 0 - largeNumber; // Make it negative
133+
}
134+
return (largeNumber);
135+
}

0 commit comments

Comments
 (0)