import neopixel

class NeoPixel(neopixel.NeoPixel):

  def __init__(self,pin, n):
    neopixel.NeoPixel.__init__(self,pin, n)

    from uos import urandom
    self.hrnd = [0] * self.n
    tmprnd=urandom(self.n)
    for i in range(0,self.n):
      self.hrnd[i] = tmprnd[i]*0.0039

  # HSV values in [0..1]  returns [r, g, b] values from 0 to 255
  # From http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/
  def hsv_to_rgb(self,h, s, v):
    h_i = int((h*6))
    f = h*6 - h_i
    p = v * (1 - s)
    q = v * (1 - f*s)
    t = v * (1 - (1 - f) * s)
    if h_i==0: r, g, b = v, t, p 
    if h_i==1: r, g, b = q, v, p 
    if h_i==2: r, g, b = p, v, t 
    if h_i==3: r, g, b = p, q, v 
    if h_i==4: r, g, b = t, p, v 
    if h_i==5: r, g, b = v, p, q 
    return (int(r*256), int(g*256), int(b*256))

  def rnd_rgb(self,pix=-1):
    from uos import urandom
    for i in range(0,self.n):
      if pix != -1:
        i = pix
      for t in range(int(urandom(1)[0]/50)+1):
        self.hrnd[i] += 0.618033988749895
        self.hrnd[i] %= 1
        self[i]=self.hsv_to_rgb(self.hrnd[i],(urandom(1)[0]/510)+0.5, 0.50)
      if pix != -1:
        return
