Побеждаем кольцевой буфер

image
С этим пока не разобралась.

Спойлер

//Modem.h

//Modem.h
#pragma once
#include <Arduino.h>

class Modem {
  public:
    bool substring_search(char temp);
  private:
};

//Modem.cpp


//Modem.cpp
#include "Modem.h"

bool Modem::substring_search(char _temp) {
  const char _inStr[] = "+CCALR: 1";
  const uint8_t _len = 9;
  static uint8_t _search_counter;

  if (_temp == _inStr[_search_counter]) {
    _search_counter++;

    if (_search_counter == _len) {
      _search_counter = 0;
      return true;
    }

  } else {
    _search_counter = 0;

    if (_temp == _inStr[_search_counter]) {
      substring_search(_temp);
    }

  }

  return false;
}


Скетч

#include "Modem.h"
Modem sim800;

void setup() {
  Serial.begin(9600);
}


void loop() {
  static char text[] = "2rnATATE1OKrnAT++++++++CCALR: 1";
  static uint8_t len_text = sizeof(text) / sizeof(text[0]);
  static uint32_t tmr;
  static uint8_t counter;

  if (millis() - tmr >= 100) {
    tmr = millis();
    if (counter >= len_text - 1)counter = 0;
    Serial.print(counter);
    Serial.print(".");
    Serial.print(text[counter]);
    Serial.println("");
    if (sim800.substring_search(text[counter])) Serial.println("Network_found");
    counter++;
  }
}

У меня вот по такому коду есть вопросы.
К примеру я ищу строку ATE1
Если исходная строка равна 2rnATE1OKrnAT++++++++CCALR: 1 то всё работает
Если исходная строка равна 2rnATATE1OKrnAT++++++++CCALR: 1 то строка не ищется
Добавила обнуление счётчика и повторный вызов функции с тем же байтом

    if (_temp == _inStr[_search_counter]) {
      substring_search(_temp);
    }

Это верное решение?

И ещё вопрос,
Я хочу вызывать функцию с параметром для поиска
sim800.substring_search(text[counter], “OKrn”)

Соответственно, функция не работает
invalid types ‘char[int]’ for array subscript

bool Modem::substring_search(char _temp, char _inStr) {
  //const char _inStr[] = "+CCALR: 1";
  //const uint8_t _len = 9;
uint8_t _len = sizeof(_inStr) / sizeof(_inStr[0]);

  static uint8_t _search_counter;

  if (_temp == _inStr[_search_counter]) {
    _search_counter++;

    if (_search_counter == _len) {
      _search_counter = 0;
      return true;
    }

  } else {
    _search_counter = 0;

    if (_temp == _inStr[_search_counter]) {
      substring_search(_temp, _inStr);
    }

  }

  return false;
}