Оператор if для char

Tima123
Offline
Зарегистрирован: 29.01.2020

Здравствуйте, уважаемые форумчане. Возник вопрос касательно оператора if.
Недавно начал изучать программирование, поэтому не судите строго.

Использую Arduino Mega 2560. Подключил к нему через аппаратный UART GSM модуль sim800.
Отправляю последовательность АТ-команд. Но АТ-команды не всегда срабатывают, иногда приходит ответ ERROR. Так вот хотелось бы организовать условие при котором будет так, если ответ ОК то переходи к следующей команде, если ERROR то отправь повторно данную команду. Но как сделать пока не понимаю.

вот кусочек кода:

#define gsm Serial2

void setup()
{
gsm.println("AT+CIPMUX=0");
delay(2000);
printSerialData();
}

void printSerialData()
{
while(gsm.available()!=0)
Serial.write(gsm.read());
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

А попробуйте пока без GSM и иных космических технологий - просто сравнить две строки.

Tima123
Offline
Зарегистрирован: 29.01.2020

Я так понял, что нужно считать буфер uart, затем сохранить в отдельный массив. Затем сделать сравнение. Верно?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Tima123 пишет:

Я так понял, что нужно считать буфер uart, затем сохранить в отдельный массив. Затем сделать сравнение. Верно?

Вам сказали

sadman41 пишет:
попробуйте

Вы понимаете, чем это отличается от "задайте ещё один вопрос нихрена не делая самостоятельно"?

Tima123
Offline
Зарегистрирован: 29.01.2020

Я уже понял как нужно делать сравнение двух строк, но мне же нужно дальше разобрать свою задачу.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, если понял, так где скетч? 

Tima123
Offline
Зарегистрирован: 29.01.2020

Ну вот, например

char s1[]="Hello";
char s2[]="HeLlo";

void setup()
{
Serial.begin(9600);
int k=strcmp(s1,s2);
Serial.print(k);
}

void loop() {

}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Теперь складывайте байты из Serial в ASCIIZ строку и сравнивайте с заданным образцом.

Tima123
Offline
Зарегистрирован: 29.01.2020

вот про складывание байтов из Serial можно, пожалуйста, чуть по-подробнее. Пример какой-нибудь.

sadman41
Offline
Зарегистрирован: 19.10.2016

Переходим к следующему: массивы и строки. Пробуйте заполнить один массив символами из другого и, затем, сравнить их. Базовый код - в посте #6.

Tima123
Offline
Зарегистрирован: 29.01.2020

Если я не ошибаюсь, то за копирование отвечает команда strcpy, следовательно код должен быть таким.
 

char s1[]="Hello";
char s2[]="HeLlo";

void setup()
{
Serial.begin(9600);
strcpy(s1, s2);
int k=strcmp(s1,s2);
Serial.print(k);
}

void loop() 
{
  
}

Верно?

sadman41
Offline
Зарегистрирован: 19.10.2016

Можно и так, в целом, но я бы советовал побайтово копировать. Ибо из сериала валится именно так - байт за байтом, целой строки там может не быть на момент анализа первого символа.

Tima123
Offline
Зарегистрирован: 29.01.2020

"побайтово копировать" - вот эта мысль интересна. Это должен быть какой-то цикл или же есть отдельная команда?

sadman41
Offline
Зарегистрирован: 19.10.2016

Вам нужно в массив B помещать байты из сериала по мере их прихода. Один за другим. Попробуйте обоими способами перенести их из массива A и сразу поймете, который из них бессмысленный.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

sadman41 пишет:
Вам нужно в массив B помещать байты из сериала по мере их прихода. Один за другим. Попробуйте обоими способами перенести их из массива A и сразу поймете, который из них бессмысленный.

Вот прям чувствую, что тебе Садман, нужно зверушку какую-нить завести. Котенка лучше, он хоть на ковер ссать не станет. Но тут - к чему душа лежит. Честное слово - усилия будут продуктивнее и положительных эмоций больше.

Или ты курсы по программированию для альтернативных детей открыть собираешься и скилл поднимаешь?