lehrkraefte:blc:informatik:glf20:ivobuttons

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:blc:informatik:glf20:ivobuttons [2020/12/03 13:17]
Ivo Blöchliger [API]
lehrkraefte:blc:informatik:glf20:ivobuttons [2020/12/13 17:05]
Ivo Blöchliger [Installation auf der OxoCard]
Line 5: Line 5:
 ==== Interface ==== ==== Interface ====
   * ''ivobuttons'':   * ''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.+    * ''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.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).     * ''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.B ''if ivobuttons.states() & IVO_L2:'' ergibt ''True'', wenn der linke untere Knopf gedrückt wurde.
   * Zeichnungsroutinen:   * 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 wenn ''fastRepaint()'' aufgerufen wird, wird gezeichnet.     * ''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 wenn ''fastRepaint()'' aufgerufen wird, wird gezeichnet.
     * ''fastGetDot(x,y)'' liefert die aktuelle Farbe vom Pixel x,y als Tripel.     * ''fastGetDot(x,y)'' liefert die aktuelle Farbe vom Pixel x,y als Tripel.
     * ''fastRepaint()'' zeigt die gezeichneten Pixel an.     * ''fastRepaint()'' zeigt die gezeichneten Pixel an.
 +  * ''getms()'' liefert die Anzahl ms seit Systemstart (um z.B. ein game zu timen).
  
- +<WRAP info 40%> 
- +**Anordnung und Werte der Knöpfe** 
 +|IVO_L1=1|  |  |  |IVO_R1=8|  
 +|IVO_L2=2|IVO_L3=4|  |IVO_R3=32|IVO_R2=16|  
 +</WRAP>
 ===== Verwendung im TigerJython Simulator ===== ===== Verwendung im TigerJython Simulator =====
 Dazu muss folgende Datei **im gleichen** Ordner gespeichert werden wie Ihre Programmdatei: {{ :lehrkraefte:blc:informatik:glf19:oxocard:ivobuttons.py |}} Dazu muss folgende Datei **im gleichen** Ordner gespeichert werden wie Ihre Programmdatei: {{ :lehrkraefte:blc:informatik:glf19:oxocard:ivobuttons.py |}}
Line 24: Line 28:
 <code python install.py> <code python install.py>
 from oxocard import * 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*y]\ndef fastRepaint():\n __np._np.write()\ndef getms():\n return time.ticks_ms()\n"+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: with uio.open('ivobuttons.py', 'wb') as f:
     f.write(program)     f.write(program)
Line 31: Line 35:
 </code> </code>
  
 +
 +===== Beispiele =====
 +<hidden Demo 24 neue Pixel pro Frame, läuft mit 30 fps>
 +<code python ivosdemo.py>
 +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
 +
 +</code>
 +</hidden>
 +
 +<hidden 64 neue Pixel pro Bild>
 +<code python scrolling.py>
 +from oxocard import *
 +from ivobuttons import *
 +
 +for n in range(121): 
 +    for y in range(8):
 +        for x in range(8):  
 +            if x > y:
 +                fastDot((x+n)%8, (y+n)%8, (x*32, y*32,0))  # rgb-Werte von 0 bis 255.
 +            else:
 +                fastDot((x+n)%8, (y+n)%8, (0, x*32, y*32))    
 +    fastRepaint()  # Erst jetzt wird das gezeichnete angezeigt.
 +
 +</code>
 +</hidden>
  • lehrkraefte/blc/informatik/glf20/ivobuttons.txt
  • Last modified: 2020/12/13 17:05
  • by Ivo Blöchliger