Объединить ASCII в строку для сравнения - PullRequest
0 голосов
/ 13 февраля 2020

Я использую Arduino с Serial BUS и пытаюсь заставить его взаимодействовать в соответствии со словом ASCII, которое я посылаю в шину. Я просмотрел множество сайтов и нашел множество решений, но не смог найти то, что искал.

Например, если я отправлю «123»:

char requestBuffer[10];    
void loop(){
   if (Serial.available() > 0){
       int bytesRead = Serial.readBytesUntil('\n', requestBuffer, 10);

       char mott[3];
       mott[0] = (int)requestBuffer[0];
       mott[1] = (int)requestBuffer[1];
       mott[2] = (int)requestBuffer[2];

       Serial.println(mott); // it does print 123
       if ( mott == 123 ){   // doesn't works
           blablabla.
       }
   } 
}

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

1 Ответ

2 голосов
/ 13 февраля 2020

char mott[3]; должно быть char mott[4] = {0};, иначе в вашем вызове println отсутствует терминатор NUL. В настоящее время поведение вашей программы не определено. Ваш println в настоящее время работает из-за несчастного случая.

Получив массив mott, используйте int n = atoi(mott);, чтобы преобразовать строку char в int. Здесь массив mott распадается на указатель char*, который является приемлемым типом для atoi.

(выражение mott == 123 сравнивает указатель char* с первый элемент массива mott в 123, что почти наверняка не так.)

...