Skip to content

Commit dfe7d9b

Browse files
authored
Add files via upload
1 parent 2769b8e commit dfe7d9b

File tree

3 files changed

+225
-0
lines changed

3 files changed

+225
-0
lines changed

GLCD Protractor/PCD8544.py

+153
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
from micropython import const
2+
from pyb import Pin, SPI
3+
from utime import sleep_ms
4+
from ustruct import pack
5+
import framebuf
6+
7+
8+
PCD8544_DC_pin = 'X2'
9+
PCD8544_CS_pin = 'X3'
10+
PCD8544_RST_pin = 'X1'
11+
PCD8544_SCK_pin = 'X6'
12+
PCD8544_MOSI_pin = 'X8'
13+
14+
PCD8544_FUNCTION_SET = const(0x20)
15+
PCD8544_POWER_DOWN = const(0x04)
16+
PCD8544_ADDRESSING_VERT = const(0x02)
17+
PCD8544_EXTENDED_INSTR = const(0x01)
18+
19+
PCD8544_DISPLAY_BLANK = const(0x08)
20+
PCD8544_DISPLAY_ALL = const(0x09)
21+
PCD8544_DISPLAY_NORMAL = const(0x0C)
22+
PCD8544_DISPLAY_INVERSE = const(0x0D)
23+
24+
PCD8544_TEMP_COEFF_0 = const(0x04)
25+
PCD8544_TEMP_COEFF_1 = const(0x05)
26+
PCD8544_TEMP_COEFF_2 = const(0x06)
27+
PCD8544_TEMP_COEFF_3 = const(0x07)
28+
29+
PCD8544_BIAS_1_100 = const(0x10)
30+
PCD8544_BIAS_1_80 = const(0x11)
31+
PCD8544_BIAS_1_65 = const(0x12)
32+
PCD8544_BIAS_1_48 = const(0x13)
33+
PCD8544_BIAS_1_40 = const(0x14)
34+
PCD8544_BIAS_1_24 = const(0x15)
35+
PCD8544_BIAS_1_18 = const(0x16)
36+
PCD8544_BIAS_1_10 = const(0x17)
37+
PCD8544_SET_VOP = const(0x80)
38+
PCD8544_COL_ADDR = const(0x80)
39+
PCD8544_BANK_ADDR = const(0x40)
40+
41+
CMD = False
42+
DAT = True
43+
44+
LOW = False
45+
HIGH = True
46+
47+
PCD8544_GLCD_WIDTH = const(84)
48+
PCD8544_GLCD_HEIGHT = const(48)
49+
50+
51+
class PCD8544(framebuf.FrameBuffer):
52+
def __init__(self):
53+
self.width = PCD8544_GLCD_WIDTH
54+
self.height = PCD8544_GLCD_HEIGHT
55+
56+
self.BLACK = const(0xFF)
57+
self.WHITE = const(0x00)
58+
59+
self.PCD8544_CS = Pin(PCD8544_CS_pin, Pin.OUT_PP)
60+
self.PCD8544_RST = Pin(PCD8544_RST_pin, Pin.OUT_PP)
61+
self.PCD8544_SCK = Pin(PCD8544_SCK_pin, Pin.OUT_PP)
62+
self.PCD8544_MOSI = Pin(PCD8544_MOSI_pin, Pin.OUT_PP)
63+
64+
self.PCD8544_SPI = SPI(1, SPI.CONTROLLER, baudrate = 4_000_000, polarity = 0, phase = 0)
65+
66+
self.PCD8544_DC = Pin(PCD8544_DC_pin, Pin.OUT_PP)
67+
68+
self.buffer = bytearray((self.height * self.width) // 8) #84 x 48 = 504
69+
super().__init__(self.buffer, self.width, self.height, framebuf.MONO_VLSB)
70+
71+
self.init()
72+
73+
74+
75+
def init(self):
76+
self.function = PCD8544_FUNCTION_SET
77+
self.disp_reset()
78+
self.addressing(True)
79+
self.set_contrast(PCD8544_BIAS_1_40, PCD8544_TEMP_COEFF_2, 63)
80+
self.disp_invert(False)
81+
self.clear()
82+
83+
84+
def disp_reset(self):
85+
self.PCD8544_CS.value(HIGH)
86+
self.PCD8544_DC.value(HIGH)
87+
88+
self.PCD8544_RST.value(HIGH)
89+
sleep_ms(10)
90+
self.PCD8544_RST.value(LOW)
91+
sleep_ms(20)
92+
self.PCD8544_RST.value(HIGH)
93+
94+
95+
def send(self, value, mode):
96+
self.PCD8544_CS.value(LOW)
97+
self.PCD8544_DC.value(mode)
98+
99+
if(mode == DAT):
100+
self.PCD8544_SPI.write(pack('B'*len(value), *value))
101+
else:
102+
self.PCD8544_SPI.write(bytearray([value]))
103+
104+
self.PCD8544_CS.value(HIGH)
105+
106+
107+
def set_xy(self, x_pos, y_pos):
108+
self.send((PCD8544_COL_ADDR | x_pos), CMD)
109+
self.send((PCD8544_BANK_ADDR | y_pos), CMD)
110+
111+
112+
def addressing(self, horizontal_or_vertical = True):
113+
if(horizontal_or_vertical == True):
114+
self.function &= ~PCD8544_ADDRESSING_VERT
115+
else:
116+
self.function |= PCD8544_ADDRESSING_VERT
117+
118+
self.send(self.function, CMD)
119+
120+
121+
def clear(self):
122+
self.send(([0] * 504), DAT) #84 x 48 = 504
123+
self.set_xy(0, 0)
124+
125+
126+
def disp_invert(self, mode):
127+
if(mode == True):
128+
self.send(PCD8544_DISPLAY_INVERSE, CMD)
129+
else:
130+
self.send(PCD8544_DISPLAY_NORMAL, CMD)
131+
132+
133+
def disp_power(self, mode):
134+
if(mode == True):
135+
self.function &= ~PCD8544_POWER_DOWN
136+
else:
137+
self.function |= PCD8544_POWER_DOWN
138+
139+
self.send(self.function, CMD)
140+
141+
142+
def set_contrast(self, bias = PCD8544_BIAS_1_40, t_coff = PCD8544_TEMP_COEFF_2, contrast = 63):
143+
self.send((self.function | PCD8544_EXTENDED_INSTR), CMD)
144+
self.send(t_coff, CMD)
145+
self.send(bias, CMD)
146+
self.send(PCD8544_SET_VOP | contrast, CMD)
147+
self.send((self.function & ~PCD8544_EXTENDED_INSTR), CMD)
148+
149+
150+
151+
def show(self):
152+
self.send(self.buffer, DAT)
153+

GLCD Protractor/img.bmp

602 Bytes
Binary file not shown.

GLCD Protractor/main.py

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
from PCD8544 import PCD8544
2+
from pyb import Accel, LED
3+
from utime import sleep_ms
4+
import framebuf
5+
import math
6+
7+
8+
degrees = 0
9+
10+
led_1 = LED(3)
11+
led_2 = LED(4)
12+
13+
glcd = PCD8544()
14+
15+
glcd.fill(glcd.WHITE)
16+
glcd.show()
17+
18+
accel = Accel()
19+
20+
21+
img = framebuf.FrameBuffer(bytearray(
22+
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\xc0\xe0\xe0\x70\x30\xf8\xf8\x98\x1c\x7c\xfc\xee\x06\x1e'
23+
b'\x7e\x7e\x06\x06\x06\x7e\x7e\x06\x06\x06\x7e\x7e\x7e\x06\xce\xfc\x7c\x1c\x98\xf8\xf8\x30\x70\xe0\xe0\xc0\xc0\x80\x00\x00\x00\x00'
24+
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xe0\xf0\x38\x3c\x7c\xe6\xc7\x0f\x3d\x39\x01'
25+
b'\x07\x07\x04\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x03'
26+
b'\x01\x00\x06\x07\x03\x11\x3d\x1f\xcf\xe7\xfe\x7c\x38\x70\xe0\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xf0\xfc\x9e\x1f'
27+
b'\x3b\x33\x33\x07\x06\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xc0\xe0\x70\x38\x18\x0c\x0c\x06\x06\x07\x03\x03\x03\x03\x03\x03\x03\x03'
28+
b'\x03\x03\x03\x03\x03\x06\x06\x0c\x0c\x1c\x38\x30\x70\xe0\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x06\x07\x23\x73\x33\x3f\x9e\xbc\xf0'
29+
b'\xc0\x00\x00\x00\x00\xf0\xfe\x9f\x3b\x31\x33\x33\x03\x00\x00\x00\x00\x00\x00\x00\xc0\xf0\x7c\x1e\x0f\x03\x01\x00\x00\x00\x00\x00'
30+
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x07\x0f\x3c\xf0\xc0'
31+
b'\x00\x00\x00\x00\x00\x00\x00\x03\x13\x33\x33\x39\x1f\xff\xf8\x80\xfe\xff\x3b\x33\x33\x33\x01\x00\x00\x00\x00\x00\x00\x00\x00\xf8'
32+
b'\xff\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
33+
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x33\x33\x39\xff\xff\x07\x0f\x0f\x03'
34+
b'\x03\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x0f\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
35+
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x0f\x03\x00\x00\x00\x00\x00\x00\x00'
36+
b'\x00\x00\x03\x03\x03\x03\x0f\x0f'),
37+
76, 48, framebuf.MONO_VLSB)
38+
39+
40+
def show_value(value):
41+
glcd.text("Deg:" + str("%3.1f" %value), 6, 1, glcd.BLACK)
42+
glcd.line(42, 47, (42 + int(28 * math.sin(value * 0.0175))), int(47 - (28 * math.cos(value * 0.0175))), glcd.BLACK)
43+
44+
45+
def map_value(v, x_min, x_max, y_min, y_max):
46+
return (y_min + (((y_max - y_min) / (x_max - x_min)) * (v - x_min)))
47+
48+
49+
def contrain(value, min_value, max_value):
50+
if(value > max_value):
51+
return max_value
52+
53+
elif(value < min_value):
54+
return min_value
55+
56+
else:
57+
return value
58+
59+
60+
while(True):
61+
acc_x, acc_y, acc_z = accel.filtered_xyz()
62+
degrees = contrain(acc_x, -80, 80)
63+
degrees = map_value(degrees, -80, 80, -90, 90)
64+
glcd.fill(glcd.WHITE)
65+
glcd.blit(img, 3, 10)
66+
glcd.ellipse(42, 47, 3, 3, glcd.BLACK, True)
67+
show_value(degrees)
68+
i = int(map_value(degrees, -90, 90, 0, 255))
69+
led_1.intensity(i)
70+
led_2.intensity(255 - i)
71+
glcd.show()
72+
sleep_ms(600)

0 commit comments

Comments
 (0)