View Single Post
Old 15-09-2015, 02:36 AM   #2
ttai
Đệ tử 1 túi
 
Tham gia ngày: Dec 2005
Bài gửi: 12
:
5. Để giao tiếp với cổng com, có thể dùng cutecom, hoặc chính bản thân terminal. Nếu dùng cutecom thì cũng tương tự với các chương trình khác. Ví dụ với terminal thôi:

Code:
#Thiết lập com /dev/ttyUSB0 với baudrate cần thiết, 
stty -F /dev/ttyUSB0 speed 115200 raw #raw tức là hiển thị tất cả, không dấu thứ gì

#Dùng lệnh cat để đưa chuỗi nhận được ra stdout (tức là màn hình terminal)
cat /dev/ttyUSB0

#Nếu muốn có thể cho chuỗi này vào một file định sẵn
cat /dev/ttyUSB0 > filename.txt
Với dữ liệu nhận được, để vẽ đồ thị theo thời gian thực thì cũng đơn giản với linux. Hãy dùng python. Trước đây mình dùng matplotlib nhưng cảm thấy matplotlib châm, không đáp ứng được yêu cầu thời gian thực, nên mình dùng thư viện pyqtgraph, download ở đây pyqtgraph.org

Code python:
Code:
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
import serial
import numpy as np
ser=serial.Serial('/dev/ttyUSB1',115200)

win=pg.GraphicsWindow()
win.setWindowTitle('DC motor speed display using PyQtGraph')

p1=win.addPlot()
p2=win.addPlot()
data1=[]
curve1=p1.plot(data1,pen=(255,255,0),name='Speed (RPM)')
curve2=p2.plot(data1,pen=(0,255,255))
ptr1=0
def update():
	global data1, curve1, ptr1
	speed=float(ser.readline())
	data1.append(speed)
	ptr1+=1
	curve1.setData(data1)
	curve2.setData(data1)
	curve2.setPos(ptr1,0)
	if ptr1>50:
		del data1[0]

timer=pg.QtCore.QTimer()
timer.timeout.connect(update)
timer.start(50)

## Start Qt event loop unless running in interactive mode or using pyside.
if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()
Trong code python này mình dùng 2 plot để thử vẽ 2 đồ thị cùng một lúc, tuy nhiên luồng data thì chỉ có 1, chưa có thời gian làm nữa. Các bạn thử xem. Do chỉ có một luồng data cần vẽ biểu đồ nên khi gửi lên python không cần xử lý chuỗi nữa. Nếu có cần xử lý chuỗi trên python cũng không có gì phức tạp.

Đây là đồ thị thời gian thực, đáp ứng rất nhanh theo thực tế ở mạch điều khiển. Code python trên nếu chiu khó tinh chỉnh sẽ cho ra đồ thị đẹp và chuyên nghiệp hơn. Nếu muốn đẹp hơn nữa thì matplotlib, nhưng matplotlib khá chậm, không đáp ứng được yêu cầu thời gian thực.

ttai vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn