이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
직렬 포트 통신을 사용하여 Arduino에서 스트리밍 데이터 읽어오기
이 예제에서는 serialport
인터페이스를 사용하여 Arduino®
Due에서 스트리밍 ASCII 종결 데이터를 읽어오는 콜백을 활성화하는 방법을 보여줍니다.
Arduino에서 프로그램 불러오기
Arduino Due를 컴퓨터에 연결합니다.
Arduino IDE를 사용하여 Arduino Due에서 다음 프로그램을 불러옵니다. 이 프로그램은 "캐리지 리턴" 및 "라인 피드" 종결자가 뒤에 오는, 사인파의 연속적인 점들을 기록합니다.
/* 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에 대한 연결 설정하기
Arduino Due에 연결할 serialport
인스턴스를 만듭니다.
Arduino가 연결되어 있는 직렬 포트를 찾습니다. Arduino IDE에서 이 직렬 포트를 식별할 수 있습니다.
serialportlist("available")'
ans = 3×1 string
"COM1"
"COM3"
"COM13"
Arduino 코드에 지정된 포트와 전송 속도를 사용하여 serialport
객체를 만들어 Arduino Due에 연결합니다.
arduinoObj = serialport("COM13",9600)
arduinoObj = Serialport with properties Port: "COM13" BaudRate: 9600 NumBytesAvailable: 0 NumBytesWritten: 0 Show all properties
데이터 스트리밍을 시작하기 위한 serialport
객체 준비하기
오래된 데이터를 지우고 그 속성을 구성하여 serialport
객체를 구성합니다.
Arduino 코드에 지정된 종결자와 일치하도록 Terminator
속성을 설정합니다.
configureTerminator(arduinoObj,"CR/LF");
serialport
객체를 플러시하여 오래된 데이터를 모두 제거합니다.
flush(arduinoObj);
Arduino 데이터를 저장하기 위한 UserData
속성을 준비합니다. 구조체의 Data
필드는 사인파 값을 저장하고, Count
필드는 사인파의 x축 값을 저장합니다.
arduinoObj.UserData = struct("Data",[],"Count",1)
arduinoObj = Serialport with properties Port: "COM13" BaudRate: 9600 NumBytesAvailable: 10626 NumBytesWritten: 0 Show all properties
처음 1000개의 ASCII 종결 사인파 데이터 점을 읽어오고 그 결과를 플로팅하는 콜백 함수 readSineWaveData
를 만듭니다.
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);
콜백 함수가 호출되면 처음 1000개의 사인파 데이터 점 플롯이 있는 MATLAB®
Figure 창이 열립니다.