Мой код ниже работает отлично, когда я пишу число или только внутри него. Тем не менее, я хочу написать (len-3), но он снова возвращается, как будто я пишу len внутри него. Как я могу решить это ?? Я получаю длину массива с помощью:
int len = sizeof(tmp)/sizeof(tmp[0]);
Переменная сообщения является строкой и получает:
char received = Serial.read();
if (Index<(len-3)){
message=tmp[Index++]=received;
Serial.print(message);
}
Моя цель - написать dv35! 1234567890 * asdfqwertyuiopmnbvcx # asdas код должен возвращать ту его часть, которая находится между '!' и '#' тогда во время части if else код должен получить некоторые его части. Однако последняя часть должна возвращаться до 3 символов до конца массива. но это не сработало должным образом. он возвращает все оставшиеся части. (Как будто я пишу только len внутри него). длина входных данных нестабильна, поэтому часть сообщения изменяется в зависимости от длины всего массива. Он должен вернуть 3 символа до конца. Вот весь мой код:
char tmp[200] = {0};
String pack;
String command;
String Size;
String messum;
String message;
String checksum;
int len = sizeof(tmp)/sizeof(tmp[0]);
int Index = 0;
bool Seen = false;
void setup(){
Serial.begin(9600);
}
void loop(){
while (Serial.available() > 0){
char received = Serial.read();
if (received == '!'){
Seen = true;
}
else if (received == '#'){
return strdup(tmp);
}
else if (Seen == true){
if(Index<2){
//Serial.print("P");
pack=tmp[Index++] = received;
Serial.print(pack);
}
else if(Index<4){
//Serial.print("C");
command=tmp[Index++] = received;
Serial.print(command);
}
else if(Index<6){
//Serial.print("S");
Size=tmp[Index++] = received;
Serial.print(Size);
}
else if (Index<(len-3)){
Serial.print("M");
message=tmp[Index++]=received;
Serial.print(message);
}
}
}
return NULL;
//input: dv35!1234567890*asdfqwertyuiopmnbvcx#asdas
}