В этом примере показано, как позволить коллбэкам читать, ASCII потоковой передачи отключил данные из Arduino® Due с помощью serialport
интерфейс.
Включите 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; }
Создайте 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
свойство к "terminator
"и BytesAvailableFcn
свойство к @readSineWaveData
. Функция обратного вызова readSineWaveData
инициирован, когда новые данные о синусоиде (с терминатором строки) доступны, чтобы быть считанными из Arduino.
configureCallback(arduinoObj,"terminator",@readSineWaveData);
Функция обратного вызова открывает графическое окно MATLAB с графиком первых 1 000 точек данных синусоиды.