Считайте данные о потоковой передаче из Arduino Используя коммуникацию последовательного порта

В этом примере показано, как позволить коллбэкам читать, ASCII потоковой передачи отключил данные из Arduino® Due с помощью serialport интерфейс.

Загрузите программу на Arduino

Включите Arduino из-за вашего компьютера.

Загрузите следующую программу на Arduino Должное использование IDE Arduino. Эта программа выписывает непрерывные точки синусоиды, сопровождаемой терминаторами строки "Возврата каретки" и "Перевода строки".

/*
 SineWavePoints
 
 Write sine wave points to the serial port, followed by the Carriage Return and LineFeed terminator.
 */

int i = 0;

// The setup routine runs once when you press reset:
void setup() {
  // Initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

// The loop routine runs over and over again forever:
void loop() {
  // Write the sinewave points, followed by the terminator "Carriage Return" and "Linefeed".
  Serial.print(sin(i*50.0/360.0));
  Serial.write(13);
  Serial.write(10);
  i += 1;
}

Установите связь с Arduino

Создайте serialport экземпляр, чтобы соединиться с вашим Должным Arduino.

Найдите последовательный порт, с которым соединяется Arduino. Можно идентифицировать порт от IDE Arduino.

serialportlist("available")'
ans = 3×1 string
    "COM1"
    "COM3"
    "COM13"

Соединитесь с Arduino, Должным путем создания serialport объект с помощью скорости порта и скорости в бодах задан в коде Arduino.

arduinoObj = serialport("COM13",9600)
arduinoObj = 
Serialport with properties

                 Port: "COM13"
             BaudRate: 9600
    NumBytesAvailable: 0
      NumBytesWritten: 0

Show all properties

Подготовьте serialport Объект начать передавать данные потоком

Сконфигурируйте serialport объект путем очистки старых данных и конфигурирования его свойств.

Установите Terminator свойство совпадать с терминатором строки, который вы задали в коде Arduino.

configureTerminator(arduinoObj,"CR/LF");

Сбросьте serialport объект удалить любые старые данные.

flush(arduinoObj);

Подготовьте UserData свойство хранить данные Arduino. Data поле struct сохраняет значение синусоиды и Count поле сохраняет значение оси X синусоиды.

arduinoObj.UserData = struct("Data",[],"Count",1)
arduinoObj = 
Serialport with properties

                 Port: "COM13"
             BaudRate: 9600
    NumBytesAvailable: 10626
      NumBytesWritten: 0

Show all properties

Создайте функцию обратного вызова readSineWaveData это читает, первые 1 000 ASCII отключили точки данных синусоиды и строят результат.

function readSineWaveData(src, ~)

% Read the ASCII data from the serialport object.
data = readline(src);

% Convert the string data to numeric type and save it in the UserData
% property of the serialport object.
src.UserData.Data(end+1) = str2double(data);

% Update the Count value of the serialport object.
src.UserData.Count = src.UserData.Count + 1;

% If 1001 data points have been collected from the Arduino, switch off the
% callbacks and plot the data.
if src.UserData.Count > 1001
    configureCallback(src, "off");
    plot(src.UserData.Data(2:end));
end
end

Установите BytesAvailableFcnMode свойство к "terminatorBytesAvailableFcn свойство к @readSineWaveData. Функция обратного вызова readSineWaveData инициирован, когда новые данные о синусоиде (с терминатором строки) доступны, чтобы быть считанными из Arduino.

configureCallback(arduinoObj,"terminator",@readSineWaveData);

Функция обратного вызова открывает графическое окно MATLAB с графиком первых 1 000 точек данных синусоиды.