La traducción de esta página está obsoleta. Haga clic aquí para ver la última versión en inglés.
Leer datos de transmisión desde Arduino usando la comunicación de puertos serie
Este ejemplo muestra cómo habilitar las callbacks para leer datos de transmisión terminados en ASCII desde un Arduino® Due usando la interfaz de serialport
.
Cargar programa en el Arduino
Conecte un Arduino Due a su ordenador.
Cargue el siguiente programa en el Arduino Due usando el Arduino IDE. Este programa escribe puntos continuos de una onda sinusoidal, seguidos de los terminadores "Retorno de carro" y "Salto de línea".
/* 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; }
Establecer una conexión con el Arduino
Cree una instancia serialport
para conectarse a su Arduino Due.
Encuentre el puerto serie al que está conectado el Arduino. Puede identificar el puerto desde el Arduino IDE.
serialportlist("available")'
ans = 3×1 string
"COM1"
"COM3"
"COM13"
Conéctese al Arduino Due creando un objeto serialport
usando el puerto y la tasa de transmisión especificada en el código de Arduino.
arduinoObj = serialport("COM13",9600)
arduinoObj = Serialport with properties Port: "COM13" BaudRate: 9600 NumBytesAvailable: 0 NumBytesWritten: 0 Show all properties
Prepare el objeto serialport
para empezar a transmitir datos.
Configure el objeto serialport
eliminando datos antiguos y configurando sus propiedades.
Defina la propiedad Terminator
para que coincida con el terminador que especificó en el código de Arduino.
configureTerminator(arduinoObj,"CR/LF");
Vacíe el objeto serialport
para eliminar cualquier dato antiguo.
flush(arduinoObj);
Prepare la propiedad UserData
para almacenar los datos de Arduino. El campo Data
de la estructura guarda el valor de la onda sinusoidal y el campo Count
guarda el valor del eje x de la onda sinusoidal.
arduinoObj.UserData = struct("Data",[],"Count",1)
arduinoObj = Serialport with properties Port: "COM13" BaudRate: 9600 NumBytesAvailable: 10626 NumBytesWritten: 0 Show all properties
Cree una función de callback readSineWaveData
que lea los primeros 1000 puntos de datos terminados ASCII de la onda sinusoidal y represente el resultado.
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
Defina la propiedad BytesAvailableFcnMode
como "terminator
" y la propiedad BytesAvailableFcn
como @readSineWaveData
. La función de callback readSineWaveData
se activa cuando hay nuevos datos de onda sinusoidal (con el terminador) disponibles para su lectura en el Arduino.
configureCallback(arduinoObj,"terminator",@readSineWaveData);
La función de callback abre la ventana de la figura de MATLAB con una gráfica de los primeros 1000 puntos de datos de la onda sinusoidal.