Ошибка 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


1 ответ


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

2

Вы хотите отправить данные на компьютерную обработку или распечатать их для чтения пользователем? Функции write отправляют необработанные данные. Для печати данных на последовательный монитор используются функции print и println.

Существует две функции write. Первая отправляет один байт. Вторая отправляет массив байтов. Функции записи для отправки массива целых чисел нет. Вы можете преобразовать массив целых чисел в массив байтов, чтобы отправить массив как необработанные байты для обработки на принимающей стороне. Но тогда вам, возможно, сначала следует отправить принимающей стороне некоторые контрольные данные о пакете данных.

 Serial.write((byte*) datos, sizeof(datos));

Если вы хотите вывести числа на последовательный монитор, функции print имеют варианты, которые принимают число и преобразуют его в строку. Но нет функции print для вывода массива чисел. Вы должны вывести их одно за другим в цикле for. И поставить между ними какой-нибудь разделитель (запятую, пробел, новую строку).

,