const size_t maxBufferSize = 20; // max length of an expected answer
byte buffer[maxBufferSize];
size_t nextSlot = 0;
bool foundIt(const char * message, const size_t bufferSize) {
bool correct = true;
for (size_t i = nextSlot; i < bufferSize; i++) {
if (buffer[i] != message[i - nextSlot]) {
correct = false;
break;
}
}
if (correct && nextSlot) {
for (size_t i = 0; i < nextSlot; i++) {
if (buffer[i] != message[bufferSize - nextSlot + i]) {
correct = false;
break;
}
}
}
return correct;
}
bool received(const char * message) {
size_t bufferSize = strlen(message);
if (bufferSize > maxBufferSize) return false;
int r = Serial.read();
if (r != -1) {
buffer[nextSlot++] = r;
if (nextSlot >= bufferSize) nextSlot = 0;
if (foundIt(message, bufferSize)) {
memset(buffer, 0, maxBufferSize);
return true;
}
}
return false;
}
void setup() {
Serial.begin(115200); Serial.println("type Hello");
while (!received("Hello")) yield();
Serial.println("Got it");
}
void loop() {}