Прочитать с последовательного монитора и поместить в массив байтов
Я здесь новичок, и это мой первый вопрос. Я хотел бы прочитать данные с последовательного монитора и сохранить информацию в массиве байтов. затем я хочу напечатать этот массив на последовательном мониторе. Это код, который я пробовал:
byte A[6];
void setup()
{
}
void loop() {
A[6] = Serial.read();
Serial.write (A);
}
@M.HARTAOUI, 👍2
Обсуждение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
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
- В чем разница между Serial.write и Serial.print? И когда они используются?
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Программы построения последовательных данных
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Очистить существующий массив при получении новой последовательной команды
https://majko.co.uk/blog/reading-serial-arduino https://majko.co.uk/blog/arrays-pointers-what-c, @Majenko