summaryrefslogtreecommitdiff
path: root/Python code/rgbled.py
diff options
context:
space:
mode:
Diffstat (limited to 'Python code/rgbled.py')
-rwxr-xr-xPython code/rgbled.py85
1 files changed, 85 insertions, 0 deletions
diff --git a/Python code/rgbled.py b/Python code/rgbled.py
new file mode 100755
index 0000000..8d699b4
--- /dev/null
+++ b/Python code/rgbled.py
@@ -0,0 +1,85 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+from __future__ import division
+import wx, math
+from wx.lib.colourchooser.pycolourchooser import PyColourChooser
+from serialrgb import SerialRGB
+
+def hsv2rgb(h, s, v):
+ h *= 360.0
+ hi = math.floor(h / 60)
+ f = (h / 60) - hi
+ p = v * (1 - s)
+ q = v * (1 - s * f)
+ t = v * (1 - s * (1 - f))
+ if hi == 0 or hi == 6:
+ return (v, t, p)
+ elif hi == 1:
+ return (q, v, p)
+ elif hi == 2:
+ return (p, v, t)
+ elif hi == 3:
+ return (p, q, v)
+ elif hi == 4:
+ return (t, p, v)
+ else:
+ return (v, p, q)
+
+def rgb2hsv(r, g, b):
+ minimum = min([r, g, b])
+ maximum = max([r, g, b])
+ if maximum == minimum:
+ h = 0
+ elif maximum == r:
+ h= 60 * (0 + ((g - b) / (maximum - minimum)))
+ elif maximum == g:
+ h= 60 * (2 + ((b - r) / (maximum - minimum)))
+ else:
+ h= 60 * (4 + ((r - g) / (maximum - minimum)))
+ if h < 0:
+ h += 360
+ s = 0 if maximum == 0 else ((maximum - minimum) / maximum)
+ return (h / 360.0, s, maximum)
+
+class rgbled_frame(wx.Frame):
+ def __init__(self, rgbled):
+ wx.Frame.__init__(self, None, title="RGBLED", size=(500, 300))
+ self.rgbled = rgbled
+
+ mainpanel = wx.Panel(self, -1)
+
+ self.cpctrl = PyColourChooser(mainpanel, -1)
+ self.cpctrl.SetValue(wx.Colour(0,0,0,255))
+
+ self.timer = wx.Timer(self)
+
+ self.Bind(wx.EVT_TIMER, self.on_timer, self.timer)
+ self.timer.Start(100)
+
+ def on_timer(self, evt):
+ colour = self.cpctrl.GetValue()
+ r = colour.Red()
+ g = colour.Green()
+ b = colour.Blue()
+ if isinstance(self.rgbled, SerialRGB):
+ self.rgbled.change_color((r, g, b))
+
+class rgbled_app(wx.App):
+ def OnInit(self):
+ self.rgbled = None
+ portdlg = wx.TextEntryDialog(None, "Serial port:")
+ if portdlg.ShowModal() == wx.ID_OK:
+ self.rgbled = SerialRGB(portdlg.GetValue())
+ frame = rgbled_frame(self.rgbled)
+ portdlg.Destroy()
+ frame.Show()
+ self.SetTopWindow(frame)
+ return True
+ def OnExit(self):
+ if isinstance(self.rgbled,SerialRGB):
+ self.rgb2hsv.close_connection()
+
+if __name__ == '__main__':
+ myapp = rgbled_app()
+ myapp.MainLoop()