ivobuttons Bibliothek
Diese Bibliothek wurde geschrieben, weil die von TigerJython zur Verfügung gestellten Routinen zum Zeichnen und zum Auslesen der Buttons für meinen Geschmack viel zu langsam sind. Die Bibliothek ist sehr minimalistisch, macht keine Überprüfungen (wird z.B. ausserhalb des Bildschirms gezeichnet, kann das Programm z.B. einfach abstürzen).
Interface
ivobuttons
:ivobuttons.states()
liefert eine Zahl zwischen 0 und 63, je nachdem, welche Tasten gedrückt wurden. Die Tasten haben den Wert 1,2,4,8,16,32. Man erhält die Summe. Achtung: nach jeder Abfrage vollständig auswerten!ivobuttons.delay
die Zeit in ms, bis eine Taste wiederholt wird (kann z.B. auf Null gesetzt werden).ivobuttons.repeat_delay
die Zeit ms, die zwischen zwei Wiederholungen vergeht. (kann auf auf Null gesetzt werden).IVO_R1
,IVO_R2
, etc. Damit können die Knöpfe abgefragt werden, z.Bif ivobuttons.states() & IVO_L2:
ergibtTrue
, wenn der linke untere Knopf gedrückt wurde.
- Zeichnungsroutinen:
fastDot(x,y,c)
setzt den Pixel x,y auf die Farbe c im Hintergrund, wobei c ein Tripel sein muss, z.B. (200,20,100) oder auch RED, GREEN, etc. Erst wennfastRepaint()
aufgerufen wird, wird gezeichnet.fastGetDot(x,y)
liefert die aktuelle Farbe vom Pixel x,y als Tripel.fastRepaint()
zeigt die gezeichneten Pixel an.
getms()
liefert die Anzahl ms seit Systemstart (um z.B. ein game zu timen).
Anordnung und Werte der Knöpfe
IVO_L1=1 | IVO_R1=8 | |||
IVO_L2=2 | IVO_L3=4 | IVO_R3=32 | IVO_R2=16 |
Verwendung im TigerJython Simulator
Dazu muss folgende Datei im gleichen Ordner gespeichert werden wie Ihre Programmdatei: ivobuttons.py
Installation auf der OxoCard
Sollte die Bibliothek auf der OxoCard noch nicht installiert sein, kann folgendes Programm auf die OxoCard geladen werden und einmalig ausgeführt werden:
- install.py
from oxocard import * program = "import time\nfrom machine import Pin\nfrom globals import __np\nIVO_L1 = 1\nIVO_L2 = 2\nIVO_L3 = 4\nIVO_R1 = 8\nIVO_R2 = 16\nIVO_R3 = 32\n# L1 R1\n#\n# L2 L3 R3 R2\nclass Ivobuttons:\n def __init__(self):\n self.pins = [Pin(p, Pin.IN, Pin.PULL_UP if p==0 else Pin.PULL_DOWN) for p in (0, 32, 33, 14, 13, 27)]\n self.wait = [0 for p in range(6)]\n self.first = [True for p in range(6)]\n self.delay = 400\n self.repeat_delay=0\n def states(self):\n res=0\n for i in range(6):\n ms = time.ticks_ms()\n if self.pins[i].value()==(0 if i==0 else 1):\n if self.wait[i]<ms:\n if self.first[i]:\n self.wait[i] = ms+self.delay\n self.first[i] = False\n else:\n self.wait[i] = ms+self.repeat_delay\n res+=1<<i\n else:\n self.first[i] = True\n self.wait[i] = 0\n return res\nivobuttons = Ivobuttons()\ndef fastDot(x,y,c):\n __np._np[x+y*8]=c\ndef fastGetDot(x,y):\n return __np._np[x+y*8]\ndef fastRepaint():\n __np._np.write()\ndef getms():\n return time.ticks_ms()\n" with uio.open('ivobuttons.py', 'wb') as f: f.write(program) print("File written!") display("OK", GREEN)