Matrix X,Y plotting 8x8 Character Font with the Neopixel service

.

8x8 Character Font set for NeoPixel Display matrix
import math
import random
port = "COM15"
pin = 3
pixelCount = 216
# starting arduino
arduino = Runtime.start("arduino","Arduino")
arduino.connect(port)

# starting neopixle
neopixel = Runtime.start("neopixel","NeoPixel")
neopixel.setPin(pin)
neopixel.setPixelCount(pixelCount)

# attach the two services
neopixel.attach(arduino)
neopixel.setBrightness(15)
 
def XYtoPixel(x1,y1,r,g,b): #supply x,y, and rgb colour
 x1=int(x1)
 y1=int(y1)
 z = x1 & 1       #test odd or even column
 if  z == 0 :     #Even colum
   i = 16 * (16 - (x1+1))+y1
 else :           #odd column
   i = 16 * (16 - x1) - (y1+1)  
 neopixel.setPixel(int(i),r,g,b)  

def charPlot(CC,x,y,r,g,b): # bitmap,x/y coords and colour
 for i in range(0,8):
  for j in range(0,8):
     if  (bitstream[1+(65*CC)+((i*8)+(7-j))]=="1") :
       XYtoPixel(x+j,y-i,r,g,b)
     else :
       XYtoPixel(x+j,y-i,0,0,0)  

bitstream = """
0011000001111000110011001100110011111100110011001100110000000000
1111110001100110011001100111110001100110011001101111110000000000
0011110001100110110000001100000011000000011001100011110000000000
1111100001101100011001100110011001100110011011001111100000000000
1111111001100010011010000111100001101000011000101111111000000000
1111111001100010011010000111100001101000011000001111000000000000
0011110001100110110000001100000011001110011001100011111000000000
1100110011001100110011001111110011001100110011001100110000000000
0111100000110000001100000011000000110000001100000111100000000000
0001111000001100000011000000110011001100110011000111100000000000
1110011001100110011011000111100001101100011001101110011000000000
1111000001100000011000000110000001100010011001101111111000000000
1100011011101110111111101111111011010110110001101100011000000000
1100011011100110111101101101111011001110110001101100011000000000
0011100001101100110001101100011011000110011011000011100000000000
1111110001100110011001100111110001100000011000001111000000000000
0111100011001100110011001100110011011100011110000001110000000000
1111110001100110011001100111110001101100011001101110011000000000
0111100011001100111000000111000000011100110011000111100000000000
1111110010110100001100000011000000110000001100000111100000000000
1100110011001100110011001100110011001100110011001111110000000000
1100110011001100110011001100110011001100011110000011000000000000
1100011011000110110001101101011011111110111011101100011000000000
1100011011000110011011000011100000111000011011001100011000000000
1100110011001100110011000111100000110000001100000111100000000000
1111111011000110100011000001100000110010011001101111111000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000011110000000110001111100110011000111011000000000
1110000001100000011000000111110001100110011001101101110000000000
0000000000000000011110001100110011000000110011000111100000000000
0001110000001100000011000111110011001100110011000111011000000000
0000000000000000011110001100110011111100110000000111100000000000
0011100001101100011000001111000001100000011000001111000000000000
0000000000000000011101101100110011001100011111000000110011111000
1110000001100000011011000111011001100110011001101110011000000000
0011000000000000011100000011000000110000001100000111100000000000
0000110000000000000011000000110000001100110011001100110001111000
1110000001100000011001100110110001111000011011001110011000000000
0111000000110000001100000011000000110000001100000111100000000000
0000000000000000110011001111111011111110110101101100011000000000
0000000000000000111110001100110011001100110011001100110000000000
0000000000000000011110001100110011001100110011000111100000000000
0000000000000000110111000110011001100110011111000110000011110000
0000000000000000011101101100110011001100011111000000110000011110
0000000000000000110111000111011001100110011000001111000000000000
0000000000000000011111001100000001111000000011001111100000000000
0001000000110000011111000011000000110000001101000001100000000000
0000000000000000110011001100110011001100110011000111011000000000
0000000000000000110011001100110011001100011110000011000000000000
0000000000000000110001101101011011111110111111100110110000000000
0000000000000000110001100110110000111000011011001100011000000000
0000000000000000110011001100110011001100011111000000110011111000
0000000000000000111111001001100000110000011001001111110000000000
"""
for bb in range(1,53):
  charPlot(bb,4,15,255,255,255)

print("finish")
 

 


Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
GroG's picture

Awesome Gareth, as all your

Awesome Gareth, as all your work is !
perhaps there should be a default char set as part of neopixel ... hmmm
Initially it was my intention to have a pixel matrix  .. but then i realized alot of what i wanted to show would need to be scrolled, and then i found out the flex one i got could wrap around a ABS sewer pie cover.

I wonder how ledgible scrolling text would be ... hmmm...

Gareth's picture

Top hat and Tails

Well calculated with the Top Hat.... I will try out some scrolling code.

Having used the Neopixel service, It needs speeding up (currently 1 second for 8x8 character), as far as I can see there is no pre-buffer for you to set your matrix pattern and then flash it into view (or did i miss something). current python code sends indiviual pixels which are slow over the MRLCOMM pipeline.

A slight faster approach to current Python code might be clear the screen (as that is build into the Service) and then just plot only "on" state LEDs.... (i.e. why plot a black led.)

....Yes inbuild Charater-set would be the fastest way to go, I dont think there will be much of overhead on the memory side of things.

Gareth's picture

Speed/2 ....Confirmation ฅʕ•̫͡•ʔฅ

neopixel.clear()

and plotting just the "ON" Pixels ....... halves the speed of displaying.  ฅʕ•̫͡•ʔฅ

Gareth's picture

Actually its better than that.....

In the above Python character stream (3392 pixel stream) there are 2113 "OFF" pixels and only 1279 "ON" pixels

3392 = 1 second/character (on average) ploting ON and OFF states

1297 = approx 1/3 Second/character (on average) clear screen then plot ON states