Jag håller på och gör om en befintlig kod så jag kan styra den via seriell monitor.
Jag har ett par olika driftlägen under enum som jag försöker skifta mellan med hjälp av seriell monitor. Får till det när jag bara använder en bokstav/siffra men jag behöver ord för att styra.
Jag hittade det här exemplet på nätet, men kan inte få den att fungera ihop med enum switch. Hur gör jag kopplingen?
Kod: Markera allt
// Example 3 - Receive with start- and end-markers
const byte numChars = 32;
char receivedChars[numChars];
boolean newData = false;
void setup() {
Serial.begin(9600);
Serial.println("<Arduino is ready>");
}
void loop() {
recvWithStartEndMarkers();
showNewData();
}
void recvWithStartEndMarkers() {
static boolean recvInProgress = false;
static byte ndx = 0;
char startMarker = '<';
char endMarker = '>';
char rc;
while (Serial.available() > 0 && newData == false) {
rc = Serial.read();
if (recvInProgress == true) {
if (rc != endMarker) {
receivedChars[ndx] = rc;
ndx++;
if (ndx >= numChars) {
ndx = numChars - 1;
}
}
else {
receivedChars[ndx] = '\0'; // terminate the string
recvInProgress = false;
ndx = 0;
newData = true;
}
}
else if (rc == startMarker) {
recvInProgress = true;
}
}
}
void showNewData() {
if (newData == true) {
Serial.print("This just in ... ");
Serial.println(receivedChars);
newData = false;
}
}
Här är enum driftlägen satta:
Kod: Markera allt
enum operatingState { OFF = 0, SETP, RUN, TUNE_P, TUNE_I, TUNE_D, AUTO};
operatingState opState = OFF;
Kod: Markera allt
recvWithStartEndMarkers();
showNewData();
opState = receivedChars;
Serial.println(opState);
delay(1000);
switch (opState)
{
case OFF:
Off();
break;
case SETP:
Tune_Sp();
break;
case RUN:
Run();
break;
case TUNE_P:
TuneP();
break;
case TUNE_I:
TuneI();
break;
case TUNE_D:
TuneD();
break;