Одномерный массив в n -мерный массив с некоторыми условиями.
- Войдите на сайт для отправки комментариев
Пнд, 24/02/2020 - 16:28
Добрый день. Помогите с кодом. Задача расписана в самом коде.
byte exByte[5][8] = {
{0xA1, 0x00, 0x69, 0x6E, 0x70, 0x75, 0x74, 0x20},
{0xA2, 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65},
{0xA3, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20},
{0xA4, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20},
{0xA5, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20}
};
String input_string = "";
char incomingByte; // from serial
void setup()
{
Serial.begin(115200);
/*задача: добить входящую строку пробелами. В начало добавить три
пробела, в конец добить до длинны 21 знак. В итоге получим строку
из 21 знака. Эту строку нужно преобразовать в byte, разделить на
три блока по 7 байт и заменить содержимое exByte начиная с exByte[2]
не трогая первый байт массива.
Например получили строку:
some data
добили пробелами, загнали в промежуточный массив:
{0x20,0x20,0x20,0x73,0x6F,0x6D,0x65,0x20,0x64,0x61,0x74,0x61,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20}
разделили на три части и разложили в нужные места.
В итоге exByte должен стать таким:
{0xA1, 0x00, 0x69, 0x6E, 0x70, 0x75, 0x74, 0x20},
{0xA2, 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65},
{0xA3, 0x20, 0x20, 0x20, 0x73, 0x6F, 0x6D, 0x65},
{0xA4, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x20},
{0xA5, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20}
*/
}
void loop()
{
/////////////////////////////////////////////////////////////////
//получаем из компорта данные
while (Serial.available() > 0)
{
char c = Serial.read();
byte b = c;
if (c == '\n')
{
// парсим
myParcer(input_string);
input_string = "";
}
else
{
if (b != 0)
input_string += c;
}
}
//////////////////////////////////////////////////////////////////
}
// парсер и вывод в сериал /////////////////
void myParcer(String input_str)
{
byte buf[22];
int pos;
String newStr;
Serial.print("input string = ");
Serial.println(input_str);
if (input_str.substring(0, 3) == "TT+")
{
pos = input_string.lastIndexOf('\r');
newStr = input_str.substring(3, pos);
//три пробела с начала
newStr = " " + newStr;
//наверняка в конце
for (int i = 0; i < 21; i++ )
{
newStr = newStr + " ";
}
// в массив байт
newStr.getBytes(buf, sizeof(buf));
//////////////////////////////////////////////////////////
// это не нравится
for (int i = 0; i < 7; i++)
{ //первые 7 в массив
exByte[2][i + 1] = buf[i];
Serial.print(exByte[2][i + 1], HEX); Serial.print(" ");
}
Serial.println("");
for (int i = 0; i < 7; i++)
{ //вторые 7 в массив
exByte[3][i + 1] = buf[i + 7];
Serial.print(exByte[3][i + 1], HEX); Serial.print(" ");
}
Serial.println("");
for (int i = 0; i < 7; i++)
{ // третьи 7 в массив
exByte[4][i + 1] = buf[i + 14];
Serial.print(exByte[4][i + 1], HEX); Serial.print(" ");
}
Serial.println("");
/////////////////////////////////////////////////////////////
//полученный массив в сериал
for (int b = 0; b < 5; b++)
{
for (int i = 0; i < 8; i++)
{
Serial.print(exByte[b][i], HEX); Serial.print(" ");
}
Serial.println("");
}
}
}
Как сделать кусок
for (int i = 0; i < 7; i++)
{ //первые 7 в массив
exByte[2][i + 1] = buf[i];
Serial.print(exByte[2][i + 1], HEX); Serial.print(" ");
}
Serial.println("");
for (int i = 0; i < 7; i++)
{ //вторые 7 в массив
exByte[3][i + 1] = buf[i + 7];
Serial.print(exByte[3][i + 1], HEX); Serial.print(" ");
}
Serial.println("");
for (int i = 0; i < 7; i++)
{ // третьи 7 в массив
exByte[4][i + 1] = buf[i + 14];
Serial.print(exByte[4][i + 1], HEX); Serial.print(" ");
}
Serial.println("");
универсальным? Спасибо.
Положить цикл копирования внутрь другого цикла, где переменная k будет инкрементироваться на N. Тогда точно универсальным станет.