From aedc42f9ff57eb7fb456ef6fd9e94c099ff84076 Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Sat, 29 Jan 2011 23:19:05 +0100 Subject: Initial commit --- Python code/rgbled.py | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100755 Python code/rgbled.py (limited to 'Python code/rgbled.py') 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() -- cgit v1.2.3-54-g00ecf