Rainbows on a WiPy 2.0

Having got my WiPy connected to my Wireless network I wrote the following script mainly as a way of testing the process of updating main.py (which is the python script that is executed automatically when the4 WiPy 2.0 finishes booting), but I felt like a bit of fun too.

Unfortunately there is a limit to what you can do with a single LED!

You don’t need to include #!/usr/bin/python at the beginning of the script but I’ve left it in as I originally wrote the script on my desktop using Python and added in the WiPy specific bits later – one of the nice things about using Micro Python is that most of the time your scripts will just work with Python.

#!/usr/bin/python
#
# main.py
#
# This  program  is free software: you can redistribute it and/or modify  it
# under the terms of the GNU General Public License as published by the Free
# Software  Foundation, either version 3 of the License, or (at your option)
# any later version.
#
# This  program  is  distributed  in the hope that it will  be  useful,  but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public  License
# for more details.
#
# You  should  have received a copy of the GNU General Public License  along
# with this program. If not, see <http://www.gnu.org/licenses/>
#
import pycom
import time

def to_hex(r, g, b):
  h = int(r*255)
  h = h * 256 + int(g*255)
  return h * 256 + int(b*255)

def hsv_to_rgb(h, s, v): # Taken from colorsys.py on github
  if s == 0.0: return [v, v, v]
  i = int(h*6.0)
  f = (h*6.0) - i
  p = v*(1.0 - s)
  q = v*(1.0 - s*f)
  t = v*(1.0 - s*(1.0-f))
  i = i%6
  if i == 0: return [v, t, p]
  if i == 1: return [q, v, p]
  if i == 2: return [p, v, t]
  if i == 3: return [p, q, v]
  if i == 4: return [t, p, v]
  if i == 5: return [v, p, q]

# Note - hsv_to_rgb returns floating point fractional values (0-1.0)

# Disable heartbeat (otherwise setting the LED colour will fail).
pycom.heartbeat(False)

n = 360 # Colour range  # (0-360 degrees)
s = 1.0 # Saturation    # (0-1.0)
v = 0.5 # Vibrance      # (0-1.0)

while True: # Loop for ever.
  for j in range(0, n, 1):
    r, g, b = hsv_to_rgb(j*1.0/n, s, v)
    pycom.rgbled(to_hex(r, g, b))
    time.sleep(0.02)

# Turn off the LED and enable heartbeat again.
pycom.rgbled(0)
pycom.heartbeat(True)

If you only want to cycle through all the colours of the rainbow a limited number of times replace the while loop with a for loop.

for i in range(2): # Cycle through rainbow twice.

References

Advertisements
This entry was posted in Hardware, PyCom and tagged , . Bookmark the permalink.

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s