Hello,
I've spent few hours trying to identify the issue, but no luck.. Code stop/halt on line 163, sometimes it cycling loop() again from the start.
I'm getting rid of using Strings in my program (as it is freezing after a few days and need a restart). So, probably I messed up with char arrays just can't figure out where and why
![]()
Any help/advice is highly appreciated! Thanks!
Arduino IDE v.1.8.13
Board: Arduino Nano (ATMega328 (Old Bootloader))
const int inpBuffMaxLen = 200;
char inputBuffer[inpBuffMaxLen];
int minTemp = 0;
int maxTemp = 0;
int obrMinTemp = 0;
int obrMaxTemp = 0;
char smsPhoneStr[12] = "";
char smsPhoneStr2[12] = "";
bool bEnableSms = false;
bool bObratkaEnableSms = false;
int smsIntervalMins;
long lastSmsSentMSec = -9999000;
class CommonA
{
public:
static int indexOf(const char* source, const char* find)
{
int srcLen = strlen(source);
int fndLen = strlen(find);
if (srcLen == 0 || fndLen == 0 || fndLen > srcLen)
{
return -1;
}
const char* ptr = strstr(source, find);
if (ptr) {
int index = ptr - source;
if (index >= 0)
{
return index;
}
}
return -1;
}
static void strRemove(char* str, int pos)
{
int len = strlen(str);
int ind = 0;
for (int i = pos; i < len; i++)
{
str[ind] = str[i];
ind++;
}
str[ind] = '\0';
}
};
void setup(void)
{
Serial.begin(9600);
}
void loop(void)
{
httpGetSMSConfig();
delay(300000);
}
bool httpGetSMSConfig()
{
bool bRes = false;
bool bConnect = true;
if (bConnect)
{
inputBuffer[0] = '\0';
strcat(inputBuffer, "HTTPCODE:200|L:54|D:\r\nsmsdet=40,55,0,30,60,1,81234567861 81234567861,9,999,");
char* resStr = &inputBuffer[0];
Serial.println(resStr);
int index = -1;
if ((index = CommonA::indexOf(resStr, "smsdet=")) > -1)
{
bRes = true;
CommonA::strRemove(resStr, index + 8);
//mintemp
index = CommonA::indexOf(resStr, ",");
char minTempStr[5] = "";
memcpy(minTempStr, resStr, index);
minTempStr[index] = '\0';
Serial.print(F("Mintemp: "));
Serial.println(minTempStr);
CommonA::strRemove(resStr, index + 1);
minTemp = atoi(minTempStr);
//maxtemp
index = CommonA::indexOf(resStr, ",");
char maxTempStr[5] = "";
memcpy(maxTempStr, resStr, index);
maxTempStr[index] = '\0';
Serial.print(F("Maxtemp: "));
Serial.println(maxTempStr);
CommonA::strRemove(resStr, index + 1);
maxTemp = atoi(maxTempStr);
//bEnableSMS
index = CommonA::indexOf(resStr, ",");
char enableSmsStr = resStr[index - 1];
Serial.print(F("enableSMS: "));
Serial.println(enableSmsStr);
CommonA::strRemove(resStr, index + 1);
if (enableSmsStr == '1')
{
bEnableSms = true;
}
else
{
bEnableSms = false;
}
//obrMinTemp
index = CommonA::indexOf(resStr, ",");
char obrMinTempStr[5] = "";
memcpy(obrMinTempStr, resStr, index);
obrMinTempStr[index] = '\0';
Serial.print(F("ObrMin: "));
Serial.println(obrMinTempStr);
CommonA::strRemove(resStr, index + 1);
obrMinTemp = atoi(obrMinTempStr);
//obrMaxTemp
index = CommonA::indexOf(resStr, ",");
char obrMaxTempStr[5] = "";
memcpy(obrMaxTempStr, resStr, index);
obrMaxTempStr[index] = '\0';
Serial.print(F("ObrMax: "));
Serial.println(obrMaxTempStr);
CommonA::strRemove(resStr, index + 1);
obrMaxTemp = atoi(obrMaxTempStr);
//bObratkaEnableSMS
index = CommonA::indexOf(resStr, ",");
char obratkaEnableSmsStr = resStr[index - 1];
Serial.print(F("ObrEnabled: "));
Serial.println(obratkaEnableSmsStr);
CommonA::strRemove(resStr, index + 1);
if (obratkaEnableSmsStr == '1')
{
bObratkaEnableSms = true;
}
else
{
bObratkaEnableSms = false;
}
//phone
index = CommonA::indexOf(resStr, ",");
char phones[25];
memcpy(phones, resStr, index);
phones[index] = '\0';
Serial.print(F("phoneWhole "));
Serial.println(phones);
int ind2 = -1;
if ((ind2 = CommonA::indexOf(phones, " ")) > -1)
{
//second num
memcpy(smsPhoneStr, phones, index);
smsPhoneStr[index] = '\0';
CommonA::strRemove(phones, index + 1);
memcpy(smsPhoneStr2, phones, strlen(phones));
smsPhoneStr2[strlen(phones)] = '\0';
}
else
{
memcpy(smsPhoneStr, phones, strlen(phones));
smsPhoneStr[strlen(phones)] = '\0';
smsPhoneStr2[0] = '\0';
}
Serial.print(F("Phone: "));
Serial.println(smsPhoneStr);
CommonA::strRemove(resStr, index + 1);
//smsIntervalMins
index = CommonA::indexOf(resStr, ",");
char smsIntervalMinsStr[10];
memcpy(smsIntervalMinsStr, resStr, index);
smsIntervalMinsStr[index] = '\0';
Serial.print(F("SMS Interval (mins): "));
Serial.println(smsIntervalMinsStr);
CommonA::strRemove(resStr, index + 1);
smsIntervalMins = atoi(smsIntervalMinsStr);
//lastSmsSentMins
index = CommonA::indexOf(resStr, ",");
char smsLastSentStr[5];
memcpy(smsLastSentStr, resStr, index);
Serial.print(F("SMS Last sent (mins): "));
Serial.println(smsLastSentStr);
CommonA::strRemove(resStr, index + 1);
int val = atoi(smsLastSentStr);
if (val <= 0)
{
lastSmsSentMSec = -1;
}
else
{
lastSmsSentMSec = val;
}
}
}
}