====== Schnelle Funktionen zur Abfrage der Knöpfe und Pixel zeichnen ======
{{ :lehrkraefte:blc:informatik:glf19:oxocard:upload_ivobuttons.py |}} Dieses Programm muss nur einmal auf die OxoCard geladen und ausgeführt werden, um die Bibliothek auf der OxoCard abzulegen. Es erscheint dann ein grünes OK auf der OxoCard. Im Simulator passiert nichts.
{{ :lehrkraefte:blc:informatik:glf19:oxocard:ivobuttons.py |}} Diese Datei muss im gleichen Verzeichnis liegen, wie die eigene Programmdatei, damit die Funktionen auch im Simulator zur Verfügung stehen. Eventuell muss die Datei auch in TigerJython geöffnet sein, damit es funktioniert.
#Initialisierung der Oxocard
try:
from machine import Pin, deepsleep, ADC, reset
from globals import __np
import time
Pin(2, Pin.OUT).value(1) # audio ampli on
Pin(15, Pin.OUT).value(0) # neopix on
__np.set(37, 0xffff00, update = True)
# Möglichkeit zum Ausschalten...
for i in range(50):
if Pin(13, Pin.IN, Pin.PULL_DOWN).value() == 1 and Pin(27, Pin.IN, Pin.PULL_DOWN).value() == 1:
print("Power off")
for k in [250, 100, 50, 20, 10, 5, 1, 0]:
for i in range(8):
__np.set(9*i+1, k << 16, update = False)
__np.set(7*i+8, k << 16, update = False)
__np.show()
time.sleep(0.5)
Pin(2, Pin.OUT).value(0) # audio ampli off
Pin(15, Pin.OUT).value(1) # neopix off
deepsleep()
time.sleep(0.02)
except ImportError:
pass
###################################
# Start vom eigentlichen Programm #
###################################
from oxocard import *
from ivobuttons import *
def hsv2rgb(h,s,v):
c = v*s
x = c*(1-abs(h*6 % 2 -1))
m = c-v
rgb = (0,0,0)
if (h<1/6):
rgb = (c,x,0)
elif h<2/6:
rgb = (x,c,0)
elif h<3/6:
rgb = (0,c,x)
elif h<4/6:
rgb = (0,x,c)
elif h<5/6:
rgb = (x,0,c)
else:
rgb = (c,0,x)
rgb = ((int((rgb[0]+m)*255)), (int((rgb[1]+m)*255)),(int((rgb[2]+m)*255)))
return rgb
clear(BLACK)
dirs = ((0,1),(1,0),(0,-1), (-1,0))
x = 0
y = 0
d = 0
h = 0.0
a = 0
b = 0
dd = 0
ivobuttons.delay=0
fps = getms()
while True:
for i in range(24):
fastDot(x,y,hsv2rgb((h+i/40)%1, 1, (i/24)**1.5))
x+=dirs[d][0]
y+=dirs[d][1]
if (x>7 or x<0 or y>7 or y<0):
x-=dirs[d][0]
y-=dirs[d][1]
d=(d+1)%4
x+=dirs[d][0]
y+=dirs[d][1]
if (i==0):
a = x
b = y
dd = d
fastRepaint()
s = ivobuttons.states()
if (s & IVO_R2):
sleep(0.05)
if (s & IVO_R3):
sleep(0.15)
h = (h+0.005)%1
x = a
y = b
d = dd
fps2 = getms()
print("%d fps" % int(1000/(fps2-fps)))
fps = fps2
====== HSV-Farben, Gamma-Faktor ======
Folgender Code enthält eine Funktion **hsv2rgb**, um Farbangaben von HSV (Hue, Saturation, Value, d.h. Farbton, Sättigung, Helligkeit) nach RGB umzurechnen. Zusätzlich ist eine Funktion **gamma**, um Bildschirm-RGB-Farben auf OxoCard-RGB-Farben umzurechnen. Ein Beispiel mit einem Farbverlauf ist hier zu finden:
#Initialisierung der Oxocard
try:
from machine import Pin, deepsleep, ADC, reset
from globals import __np
import time
Pin(2, Pin.OUT).value(1) # audio ampli on
Pin(15, Pin.OUT).value(0) # neopix on
__np.set(37, 0xffff00, update = True)
# Möglichkeit zum Ausschalten...
for i in range(50):
if Pin(13, Pin.IN, Pin.PULL_DOWN).value() == 1 and Pin(27, Pin.IN, Pin.PULL_DOWN).value() == 1:
print("Power off")
for k in [250, 100, 50, 20, 10, 5, 1, 0]:
for i in range(8):
__np.set(9*i+1, k << 16, update = False)
__np.set(7*i+8, k << 16, update = False)
__np.show()
time.sleep(0.5)
Pin(2, Pin.OUT).value(0) # audio ampli off
Pin(15, Pin.OUT).value(1) # neopix off
deepsleep()
time.sleep(0.02)
except ImportError:
pass
###################################
# Start vom eigentlichen Programm #
###################################
from oxocard import *
# Farbe von Hue (Farbton, von 0 bis 1.0), Saturation (Sättigung, von 0 bis 1) und Value (Helligkeit, von 0 bis 1)
# Formel von von https://www.rapidtables.com/convert/color/hsv-to-rgb.html
def hsv2rgb(h,s,v):
c = v*s
x = c*(1-abs(h*6 % 2 -1))
m = c-v
rgb = (0,0,0)
if (h<1/6):
rgb = (c,x,0)
elif h<2/6:
rgb = (x,c,0)
elif h<3/6:
rgb = (0,c,x)
elif h<4/6:
rgb = (0,x,c)
elif h<5/6:
rgb = (x,0,c)
else:
rgb = (c,0,x)
rgb = ((int((rgb[0]+m)*255)), (int((rgb[1]+m)*255)),(int((rgb[2]+m)*255)))
return rgb
# Wendet einen Gamma-Faktor (default 2) auf einen RGB-Wert an.
def gamma(rgb, gamma=2):
return (int((rgb[0]/255)**gamma*255), int((rgb[1]/255)**gamma*255),int((rgb[2]/255)**gamma*255))
def regenbogen(offset=0):
for y in range(8):
for x in range(8):
# Nummer des Pixels, von 0 bis 63
nr = (x+8*y+offset)%64
# Hue (Farbton ist nr/64)
rgb = hsv2rgb(nr/64,1,1)
dot(x,y,gamma(rgb))
enableRepaint(False)
while True:
for i in range(64):
regenbogen(i)
repaint()
====== Bild-Konverter ======
Das folgende TigerJython Programm transformiert ein
beliebiges Bild in eine matrix, die mit image(matrix) auf der OxoCard ausgegeben werden kann.
{{ :lehrkraefte:blc:informatik:glf19:oxocard:imageconverter.py |}}
Verwendung:
#Initialisierung der Oxocard
try:
from machine import Pin, deepsleep, ADC, reset
from globals import __np
import time
Pin(2, Pin.OUT).value(1) # audio ampli on
Pin(15, Pin.OUT).value(0) # neopix on
__np.set(37, 0xffff00, update = True)
# Möglichkeit zum Ausschalten...
for i in range(50):
if Pin(13, Pin.IN, Pin.PULL_DOWN).value() == 1 and Pin(27, Pin.IN, Pin.PULL_DOWN).value() == 1:
print("Power off")
for k in [250, 100, 50, 20, 10, 5, 1, 0]:
for i in range(8):
__np.set(9*i+1, k << 16, update = False)
__np.set(7*i+8, k << 16, update = False)
__np.show()
time.sleep(0.5)
Pin(2, Pin.OUT).value(0) # audio ampli off
Pin(15, Pin.OUT).value(1) # neopix off
deepsleep()
time.sleep(0.02)
except ImportError:
pass
###################################
# Start vom eigentlichen Programm #
###################################
from oxocard import *
while True:
# Art 0, gamma 2
matrix=(((12,15,17),(14,16,19),(60,37,22),(37,34,32),(66,40,24),(46,38,33),(12,15,18),(12,15,17),),((13,15,18),(30,33,36),(142,37,0),(49,18,4),(153,37,0),(82,32,8),(39,40,43),(21,23,26),),((45,36,30),(46,28,18),(80,21,1),(26,17,12),(117,28,0),(34,14,5),(85,24,2),(36,22,14),),((77,42,20),(128,30,0),(58,57,58),(57,53,50),(37,36,36),(52,51,51),(188,44,0),(45,24,14),),((25,21,19),(78,20,1),(70,58,50),(227,113,42),(190,109,56),(115,84,63),(30,11,3),(30,23,19),),((17,19,21),(38,38,38),(96,44,17),(251,122,42),(201,126,77),(105,47,17),(64,64,65),(7,8,10),),((4,5,6),(51,51,53),(87,55,34),(231,125,54),(100,75,62),(125,95,76),(49,50,51),(4,5,6),),((9,11,13),(13,15,17),(34,36,39),(34,22,15),(37,35,34),(29,32,34),(14,16,19),(9,11,13),),)
image(matrix)
sleep(1)
# Art 0, gamma 1.4
matrix=(((30,35,39),(33,38,42),(92,66,46),(67,62,60),(100,70,49),(77,67,62),(31,35,40),(30,35,39),),((31,36,40),(57,60,65),(169,66,3),(80,40,15),(178,66,1),(115,60,24),(68,70,74),(44,48,51),),((76,65,57),(77,54,40),(113,45,6),(52,38,31),(147,55,3),(63,34,17),(119,49,8),(65,46,34),),((111,72,43),(158,57,3),(91,89,90),(89,84,82),(66,65,65),(84,82,83),(206,74,1),(76,50,34),),((50,44,42),(112,43,6),(104,90,82),(235,144,73),(208,140,89),(146,117,95),(57,29,12),(58,47,42),),((38,42,45),(67,67,68),(129,75,38),(252,152,72),(216,155,110),(137,78,39),(96,97,97),(21,24,26),),((14,16,18),(82,83,85),(121,88,63),(238,155,86),(133,109,94),(154,127,109),(81,81,82),(15,17,19),),((25,29,33),(31,35,39),(62,65,68),(62,46,36),(66,64,62),(56,59,62),(34,37,41),(25,29,33),),)
image(matrix)
sleep(1)
# Art 1, gamma 2
matrix=(((12,15,18),(12,15,18),(20,13,9),(53,55,58),(37,25,18),(60,60,63),(12,15,18),(12,15,18),),((11,14,17),(17,19,22),(235,57,0),(39,9,0),(233,56,0),(44,13,2),(49,51,55),(25,29,31),),((33,33,33),(15,9,7),(193,46,0),(14,6,4),(227,56,0),(31,9,1),(121,29,0),(21,17,15),),((31,18,10),(125,29,0),(127,127,127),(25,25,25),(75,75,75),(135,134,137),(249,59,0),(21,9,6),),((41,41,43),(129,30,0),(166,168,168),(245,169,110),(222,160,112),(81,74,70),(37,8,0),(33,31,31),),((11,14,17),(55,55,55),(105,48,20),(253,184,128),(235,134,69),(158,73,29),(94,96,97),(2,3,4),),((0,1,1),(82,83,84),(62,31,15),(249,82,6),(45,40,40),(237,207,182),(51,51,51),(0,0,0),),((9,11,13),(9,11,13),(32,34,37),(11,9,9),(73,73,74),(20,23,25),(9,11,13),(9,11,13),),)
image(matrix)
sleep(1)
====== Labyrinth ======
Anleitung:
* Schütteln, um Zufall zu erzeugen.
* Neigen Sie die OxoCard, um den roten Punkt in die untere rechte Ecke des Labyrinths zu steuern
{{ :lehrkraefte:blc:informatik:glf19:oxocard:laby.py |}}