Прочитать с последовательного монитора и поместить в массив байтов

Я здесь новичок, и это мой первый вопрос. Я хотел бы прочитать данные с последовательного монитора и сохранить информацию в массиве байтов. затем я хочу напечатать этот массив на последовательном мониторе. Это код, который я пробовал:

byte A[6];

void setup()
{
}

void loop() {
  A[6] = Serial.read();
  Serial.write (A);
}

, 👍2

Обсуждение

https://majko.co.uk/blog/reading-serial-arduino https://majko.co.uk/blog/arrays-pointers-what-c, @Majenko


1 ответ


Лучший ответ:

1

Если вы хотите только распечатать его, я бы посоветовал не хранить его. Но если вы хотите выполнить некоторые вычисления, вы можете сохранить их.

Проблема, которую вы создаете, заключается в том, что вы всегда сохраняете значение в 6-м элементе массива A, однако A имеет только элементы от A[0] до A[5], поэтому A[6] находится за пределами места хранения, и в результате при сбоях (иногда) или, по крайней мере, неожиданном поведении.

Чтобы это исправить, вам нужно сохранить значение в правильном элементе A, а для этого вам нужна индексная переменная. Поскольку вы можете хранить только 6 значений, после 6-го начните с 0 и обработайте его.

Нравится:

byte arr[6];
index arrIndex;

void setup()
{
   arrIndex = 0;
}

void loop() {
  // Чтение серийного номера.
  arr[arrIndex] = Serial.read();

  // Увеличиваем счетчик
  arrIndex++;

  // Если максимум прочитан, выводим значения и сбрасываем их.
  if (arrIndex == 6) {
     // Печатаем элементы.
     for (index = 0; index < 6; index++)
     {
        Serial.write(A[index]);
     }

     // Перезапускаем счетчик.
     arrIndex = 0;
  }
}

Улучшение: вместо 6 везде используйте определение:

#define MAX_ELEMENTS 6
,

Эй, Мишель, Благодарю за ваш ответ-- Я попробовал ваш код, но какой-то вопросительный знак продолжает появляться. если я напечатаю, например, 11111. Последовательный монитор покажет ????????????????????????????????????????????????????????? ????????????????????????????????????????????????????11111, @M.HARTAOUI

Я предполагаю, что считанные данные представляют собой символы. Если вы попытаетесь распечатать значения, отличные от ascii, вы можете получить сообщение ? значения... Попробуйте преобразовать его в строку (например, с помощью itoa(...)). Или, возможно, поможет использование массива int (не уверен, не могу проверить это здесь)., @Michel Keijzers

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

используйте https://www.arduino.cc/reference/en/language/functions/communication/serial/available/, @Michel Keijzers

Пожалуйста, удачи в вашем проекте, @Michel Keijzers