Ошибка Serial.write(buf, len). Как убрать ошибку и передать массив байтов?
int angleServo1,angleServo2 = 0;
const int axisX=A0; // ось Х подключена к A0
const int axisY=A1; // ось Y подключена к A1
int valX, valY = 0; // переменные для хранения записей осей
int datos[3];
#include <SPI.h>
void setup()
{
Serial.begin(9600);
}
void loop()
{
valX = analogRead(axisX); // Значение по оси X
valY = analogRead(axisY); // Значение оси Y
// масштабируем значение в интервале 0-180
angleServo1=map(valX,0,800,100,-100);
angleServo2=map(valY,0,810,100,-100);
datos[0] = angleServo1;
datos[1] = angleServo2;
Serial.write(datos, sizeof(datos));
delay(100);
}
ошибка: нет соответствующей функции для вызова «HardwareSerial::write(int [3], unsigned int)»
как убрать ошибку и передать массив байтов?
1 ответ
Лучший ответ:
Вы хотите отправить данные на компьютерную обработку или распечатать их для чтения пользователем? Функции write
отправляют необработанные данные. Для печати данных на последовательный монитор используются функции print
и println
.
Существует две функции write
. Первая отправляет один байт. Вторая отправляет массив байтов. Функции записи для отправки массива целых чисел нет. Вы можете преобразовать массив целых чисел в массив байтов, чтобы отправить массив как необработанные байты для обработки на принимающей стороне. Но тогда вам, возможно, сначала следует отправить принимающей стороне некоторые контрольные данные о пакете данных.
Serial.write((byte*) datos, sizeof(datos));
Если вы хотите вывести числа на последовательный монитор, функции print
имеют варианты, которые принимают число и преобразуют его в строку. Но нет функции print
для вывода массива чисел. Вы должны вывести их одно за другим в цикле for. И поставить между ними какой-нибудь разделитель (запятую, пробел, новую строку).
примечание: sizeof возвращает размер массива в байтах, @Juraj
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
- В чем разница между Serial.write и Serial.print? И когда они используются?
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Программы построения последовательных данных
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Очистить существующий массив при получении новой последовательной команды
byte datos[3]; изменено, я протестирую код. Я не уверен, что он будет работать. Так как байт небольшого значения., @Sergey Kuntsevich
это говорит вам, что
HardwareSerial::write()
не имеет функции, которая будет принимать два аргумента, где первый - массив целых чисел, а второй - беззнаковое целое число... я думаю, что у HardwareSerial::write() есть только функция, которая принимает один аргумент, который является целым числом, а не массивом, @jsotolaпопробуйте это: Serial.print(datos);, @DH12043
Смотрите: https://github.com/arduino/ArduinoCore-avr/blob/3d09a51bd20f095e1354243e6d8addedfcb6001e/cores/arduino/Print.h#L56-L59, @per1234
@jsotola, что? write(int)? есть
write(byte)
иwrite(buff[], size)
, @Jurajне правильно выразился... думаю, мозг был в нейтральном состоянии... serial.write() принимает массив байтов, а не массив целых чисел, @jsotola