Подскажите, может быть кто-то сталкивался с подобным. Хочу записать в массив байтов (да хоть в любой) полученные символы в виде байтов через SerialPort. Т.е. я отправляю через терминал один за другим с минимальной временной задержкой два сообщения в виде символов(не байтов): "message 01 02 03 04 05 message1 06 07 08 09 0A" В результате я хочу чтобы в одном массиве скажем array1 поместились бы 01 02 03 04 05 а в другом array2 - 06 07 08 09 0A. Я думал о Serial.ParseInt, но в таком случае я не могу разделить байты, т.к. получается число 0102030405. Serial.Timeout тоже не сработает, т.к. сообщений много, они разной длинны и скорость передачи достаточно большая.
Попробуй так: String inString = ""; char inChar; if(Serial.available()) // Слушаем порт { inChar = Serial.read(); // Читаем символ inString = inString+inChar; // Переводим Char в String, набираем нужное кол-во символов if(inString.length()==2) // Поймали 2 символа { /* Заливаем в массив */ inString=""; // Обнуляем строку }
Правда я теперь думаю, как в массив байтов все это засунуть, т.к. string не работает с массивами, только char... Разобрался вроде, inString.toInt()
Спасибо за помощь, но честно говоря, это я не очень понял. Я написал так как ниже, но если отправить "4120" 5 раз например и прочитать, то ответ такой: 41 20 4 12 0 41 20 4 12 0 41 20 Т.е. сначала ответ верный, потом какая-то лабуда. Вчера и сегодня ковырялся, ошибку найти не смог. В байтах выглядит так: 34 31 0D 0A 32 30 0D 0A 0A 34 0D 0A 31 32 0D 0A 30 0A 0D 0A 34 31 0D 0A 32 30 0D 0A 0A 34 0D 0A 31 32 0D 0A 30 0A 0D 0A 34 31 0D 0A 32 30 0D 0A Т.е. лишняя 0A. Откуда берется - непонятно. String BUFFER[8]; String inString = ""; char inChar; void setup() { Serial.begin(115200); } void loop() { if(Serial.available()) // Слушаем порт { inChar = Serial.read(); // Читаем символ inString = inString+inChar; // Переводим Char в String, набираем нужное кол-во символов if(inString.length() == 2) // Поймали 2 символа { BUFFER[0] = inString; inString = ""; // Обнуляем строку Serial.println(BUFFER[0]); }}}
"Текстовые строки в Ардуино объявляются как массив (array) типа char (символов - литер), оканчивающийся символом "конца строки"." Отправил "41 20" и if(inString.length() == 3) и все заработало)
Еще подскажите, пожалуйста, как можно перевести строку в байты? Т.е. я отправляю 1A и хочу чтобы в массив попала 0x1A или 26. Можно стринг перевести в int, а потом в HEX, но при переводе в int A-F теряются и в итоге получает не 1A, а просто 1.