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

Обсуждение

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


1 ответ


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

2

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

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

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

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

,

примечание: sizeof возвращает размер массива в байтах, @Juraj