-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrgbLEDclass.py
More file actions
122 lines (108 loc) · 3.59 KB
/
Copy pathrgbLEDclass.py
File metadata and controls
122 lines (108 loc) · 3.59 KB
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
from random import randint
from time import sleep
from machine import Pin, PWM
#RGBLed is a class to control rgb leds
class RGBLed:
def __init__(self, rPinNum=23, gPinNum=21, bPinNum=19, duty=1023, freq=120):
self.duty = duty #max duty cycle
self.freq = freq #requency of pwm
self.rPinNum = rPinNum
self.gPinNum = gPinNum
self.bPinNum = bPinNum
#Pin objects
self.rPin = Pin(rPinNum, Pin.OUT)
self.gPin = Pin(gPinNum, Pin.OUT)
self.bPin = Pin(bPinNum, Pin.OUT)
#pwm objects
self.rPWM = PWM(self.rPin)
self.gPWM = PWM(self.gPin)
self.bPWM = PWM(self.bPin)
self.setFreq(self.freq)
#setFreq sets the frequency for each pwm pin
def setFreq(self, freq):
self.freq = freq
self.rPWM.freq(freq)
self.gPWM.freq(freq)
self.bPWM.freq(freq)
#setDuty sets the max duty cycle
def setDuty(self, duty):
self.duty = duty
def setRDuty(self, duty):
self.rDuty = duty
selfrPWM.duty(duty)
def setRFreq(self, freq):
self.rFreq = freq
self.rPWM.freq(freq)
def setGDuty(self, duty):
self.gDuty = duty
self.gPWM.duty(duty)
def setGFreq(self, freq):
self.gFreq = freq
self.gPWM.freq(freq)
def setBDuty(self, duty):
self.bDuty = duty
self.bPWM.duty(duty)
def setBFreq(self, freq):
self.bFreq = freq
self.bPWM.freq(freq)
#flame attemps to simulate a flame
def flame(self):
increment = True
last = self.duty
while True:
if increment:
last = last + randint(1,10)
else:
last = last - randint(1,10)
if last > self.duty:
increment = False
elif last < self.duty / 2:
increment = True
r = randint(last - (last // 10), last)
g = randint(r // 90, r // 11)
b = randint(0,g-(g // 4))
s = randint(20, 40 )
flicker = randint(0, 100)
if flicker < 5:
self.flicker(flicker + 5)
elif flicker == 13 or flicker == 17:
self.flickerGreen(flicker)
elif flicker == 23:
self.flickerBlue(flicker//2)
self.rPWM.duty(r)
self.gPWM.duty(g)
self.bPWM.duty(b)
sleep((s / 100))
def flicker(self, count):
for c in range(count):
r = randint(self.duty// 4, self.duty)
g = randint(r // 90, r // 11)
b = randint(0,g // 2)
s = randint(5, 20 ) #flicker speed
self.rPWM.duty(r)
self.gPWM.duty(g)
self.bPWM.duty(b)
sleep((s / 100))
def flickerGreen(self, count):
for c in range(count):
r = randint(self.duty// 4, self.duty)
g = randint(r // 20, r // 4)
b = randint(0,r // 2)
s = randint(5, 20 ) #flicker speed
self.rPWM.duty(g)
self.gPWM.duty(r)
self.bPWM.duty(b)
sleep((s / 100))
def flickerBlue(self, count):
for c in range(count):
r = randint(self.duty// 2, self.duty)
g = randint(r // 50, r // 10)
b = randint(0,g )
s = randint(5, 20 ) #flicker speed
self.rPWM.duty(g)
self.gPWM.duty(b)
self.bPWM.duty(r)
sleep((s / 100))
if __name__ == "__main__":
rgb = RGBLed()
rgb.flame()