-
Notifications
You must be signed in to change notification settings - Fork 0
/
microbitDraw.py
91 lines (77 loc) · 2.44 KB
/
microbitDraw.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#microbitDraw
import serial
from PyQt5 import QtCore
from PyQt5.QtWidgets import *
import pyqtgraph as pg
from PyQt5.QtGui import *
import sys
COM = 'COM5'
BAUD_RATE = 115200
TIMEOUT = 1
DATA_FREQ = 25
class SerialConn:
def __init__(self):
self.ser = serial.Serial(COM, BAUD_RATE, timeout=TIMEOUT)
def readData(self):
FAILURE = (False, ())
try:
line = self.ser.readline().decode("utf-8")
except:
return FAILURE
if not line:
return FAILURE
ret = line.strip().split(",")
try:
x, y, penDown, clear = [int(ret[0]), int(ret[1]), int(ret[2]), int(ret[3])]
except:
return FAILURE
return (True, (-x, y, penDown, clear))
def close(self):
self.ser.close()
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__()
self.setWindowTitle("PyQtGraph")
self.setGeometry(100, 100, 600, 500)
self.normalPen = pg.mkBrush(30, 255, 30, 255)
self.cursorPen = pg.mkBrush(255, 30, 30, 255)
self.serial = SerialConn()
self.data = []
self.UiComponents()
def UiComponents(self):
widget = QWidget()
label = QLabel("Drawing console")
label.setWordWrap(True)
plot = pg.plot()
self.scatter = pg.ScatterPlotItem(size=10, brush=self.normalPen)
plot.addItem(self.scatter)
plot.setRange(xRange=[-70, 70], yRange=[-70, 70])
layout = QGridLayout()
label.setMinimumWidth(130)
widget.setLayout(layout)
layout.addWidget(label, 1, 0)
layout.addWidget(plot, 0, 1, 3, 1)
self.setCentralWidget(widget)
self.updateScatter()
self.timer = QtCore.QTimer()
self.timer.setInterval(DATA_FREQ)
self.timer.timeout.connect(self.update_plot_data)
self.timer.start()
def updateScatter(self):
self.scatter.setData(self.data)
def update_plot_data(self):
(success, (x, y, penDown, clear)) = self.serial.readData()
if not success: return
if clear:
self.data = []
elif self.data:
if penDown:
self.data[-1]['brush'] = self.normalPen
else:
self.data.pop()
self.data.append({'pos': (x, y), 'brush': self.cursorPen})
self.updateScatter()
app = QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())