С этим пока не разобралась.
Спойлер
//Modem.h
#pragma once
#include <Arduino.h>
class Modem {
public:
bool substring_search(char temp);
private:
};
//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;
}