74 lines
2.5 KiB
Python
74 lines
2.5 KiB
Python
import machine,neopixel
|
|
|
|
from time import sleep
|
|
|
|
|
|
|
|
words={"it":[0,1],
|
|
|
|
"is":[3,4],
|
|
|
|
"twenty":[6,11],
|
|
|
|
"-one":[13,15],
|
|
|
|
}
|
|
|
|
bigletters={"a":[0,2,4,6,8,10],
|
|
|
|
"b":[1,3,5,7,9,11],
|
|
|
|
}
|
|
|
|
|
|
|
|
class display(object):
|
|
|
|
"""Initialises a NeoPixel-String."""
|
|
|
|
def __init__(self,DataPin,Rows=1,Columns=17):
|
|
|
|
self.np=neopixel.NeoPixel(machine.Pin(DataPin),Rows*Columns)
|
|
|
|
self.number=Rows*Columns
|
|
|
|
self.Rows=Rows
|
|
|
|
self.Columns=Columns
|
|
|
|
|
|
|
|
def write(self,Pos,Colour=(0,0,0), Immediate=True):
|
|
|
|
"""write(Pos,Colour=(0,0,0), Immediate=True): Writes a colour (given as an RGB triplet) to the Pixel
|
|
|
|
at position 'Pos'. If 'Immediate' is set, change immediately, otherwise, wait until the display is
|
|
|
|
explicitly written or a write with 'Immediate' is called."""
|
|
|
|
if Pos >= self.number:
|
|
|
|
print("Out of range")
|
|
|
|
else:
|
|
|
|
self.np[Pos]=Colour
|
|
|
|
if Immediate:
|
|
|
|
self.np.write()
|
|
|
|
|
|
|
|
def clear(self,Immediate=True):
|
|
|
|
"""Clears all pixels"""
|
|
|
|
for i in range(self.number):
|
|
|
|
self.np[i]=(0,0,0)
|
|
|
|
if Immediate:
|
|
|
|
self.np.write()
|
|
|
|
|
|
|
|
def writeword(self,word,colour=(50,50,50)):
|
|
|
|
try:
|
|
|
|
Begin=words[word][0]
|
|
|
|
End=words[word][1]
|
|
|
|
print("Writing '%s' from %s to %s" % (word,Begin,End))
|
|
|
|
for i in range(Begin,End+1):
|
|
|
|
self.write(i,colour,False)
|
|
|
|
self.np.write()
|
|
|
|
except KeyError:
|
|
|
|
print("No such word")
|
|
|
|
|
|
|
|
def writesentence(self,sentence,color=(25,25,0)):
|
|
|
|
self.clear(Immediate=False)
|
|
|
|
for word in sentence.split(" "):
|
|
|
|
self.writeword(word,color)
|
|
|
|
|
|
|
|
def scrollleft(self):
|
|
|
|
for i in range(1,self.number):
|
|
|
|
if int(i/self.Columns) == int((i-1)/self.Columns):
|
|
|
|
self.np[i-1]=self.np[i]
|
|
|
|
self.np.write()
|
|
|
|
|
|
|
|
def scrollright(self):
|
|
|
|
self.np[0]=(0,0,0)
|
|
|
|
for i in range(self.number-1,0,-1):
|
|
|
|
if int(i/self.Columns) == int((i+1)/self.Columns):
|
|
|
|
self.np[i]=self.np[i-1]
|
|
|
|
self.np.write()
|
|
|
|
|
|
|
|
def Num2Column(self,Number):
|
|
|
|
return(Number-int(Number/self.Columns)*self.Columns)
|
|
|
|
|
|
|
|
def Num2Row(self,Number):
|
|
|
|
return(int(Number/self.Columns))
|
|
|
|
|