@tigerpython/robotics-libraries 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/CHANGELOG +68 -0
  2. package/LICENSE +373 -0
  3. package/README.md +81 -0
  4. package/calliope/README.md +15 -0
  5. package/calliope/callibot.py +176 -0
  6. package/calliope/callibotmot.py +46 -0
  7. package/calliope/callimk.py +143 -0
  8. package/calliope/cbalarm.py +14 -0
  9. package/calliope/cpglow.py +76 -0
  10. package/calliope/cpmike.py +16 -0
  11. package/calliope/cprover.py +33 -0
  12. package/calliope/cputils.py +23 -0
  13. package/calliope/libraries.json +10 -0
  14. package/calliope/libraries.raw.json +10 -0
  15. package/calliope/min/callibot.py +97 -0
  16. package/calliope/min/callibotmot.py +23 -0
  17. package/calliope/min/callimk.py +47 -0
  18. package/calliope/min/cbalarm.py +6 -0
  19. package/calliope/min/cpglow.py +29 -0
  20. package/calliope/min/cpmike.py +8 -0
  21. package/calliope/min/cprover.py +9 -0
  22. package/calliope/min/cputils.py +7 -0
  23. package/dist/index.d.mts +124 -0
  24. package/dist/index.d.ts +124 -0
  25. package/dist/index.js +2896 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/index.mjs +2862 -0
  28. package/dist/index.mjs.map +1 -0
  29. package/microbit/README.md +48 -0
  30. package/microbit/controller.py +212 -0
  31. package/microbit/huskylens.py +479 -0
  32. package/microbit/libraries.json +19 -0
  33. package/microbit/libraries.raw.json +19 -0
  34. package/microbit/mbalarm.py +15 -0
  35. package/microbit/mbbitbot.py +127 -0
  36. package/microbit/mbglow.py +77 -0
  37. package/microbit/mbled.py +56 -0
  38. package/microbit/mbmarsrover.py +216 -0
  39. package/microbit/mbminibit.py +139 -0
  40. package/microbit/mbrobot.py +401 -0
  41. package/microbit/mbrobot_legacy.py +90 -0
  42. package/microbit/mbrobot_plus.py +179 -0
  43. package/microbit/mbrobot_plusV2.py +490 -0
  44. package/microbit/mbrobot_plusV3.py +427 -0
  45. package/microbit/mbrobotmot.py +49 -0
  46. package/microbit/mbthetabot.py +167 -0
  47. package/microbit/mbwait.py +50 -0
  48. package/microbit/mbxgo.py +173 -0
  49. package/microbit/min/controller.py +42 -0
  50. package/microbit/min/huskylens.py +145 -0
  51. package/microbit/min/mbalarm.py +6 -0
  52. package/microbit/min/mbbitbot.py +40 -0
  53. package/microbit/min/mbglow.py +29 -0
  54. package/microbit/min/mbled.py +18 -0
  55. package/microbit/min/mbmarsrover.py +62 -0
  56. package/microbit/min/mbminibit.py +50 -0
  57. package/microbit/min/mbrobot.py +82 -0
  58. package/microbit/min/mbrobot_legacy.py +45 -0
  59. package/microbit/min/mbrobot_plus.py +75 -0
  60. package/microbit/min/mbrobot_plusV2.py +102 -0
  61. package/microbit/min/mbrobot_plusV3.py +194 -0
  62. package/microbit/min/mbrobotmot.py +25 -0
  63. package/microbit/min/mbthetabot.py +47 -0
  64. package/microbit/min/mbwait.py +23 -0
  65. package/microbit/min/mbxgo.py +37 -0
  66. package/package.json +54 -0
@@ -0,0 +1,176 @@
1
+ # callibot.py
2
+ # Version 1.3, 17-Sept-2021 /JA
3
+ # new: Touchsensors
4
+
5
+ import gc
6
+ from calliope_mini import i2c, sleep
7
+
8
+ _axe = 0.06
9
+
10
+ def w(d1, d2, s1, s2):
11
+ try:
12
+ i2c.write(0x20, bytearray([0x00, d1, s1]))
13
+ i2c.write(0x20, bytearray([0x02, d2, s2]))
14
+ except:
15
+ print("Please switch on Robot!")
16
+ while True:
17
+ pass
18
+
19
+ def setSpeed(speed):
20
+ global _v
21
+ _v = speed + 40
22
+ #_v = int(speed * 1.1) + 35
23
+
24
+ def forward():
25
+ w(0, 0, _v, _v)
26
+
27
+ def backward():
28
+ w(1, 1, _v, _v)
29
+
30
+ def stop():
31
+ w(0, 0, 0, 0)
32
+
33
+ def right():
34
+ v = int(_v * 1.1)
35
+ w(0 if _v > 0 else 1, 1 if _v > 0 else 0, v , v)
36
+
37
+ def left():
38
+ v = int(_v * 1.1)
39
+ w(1 if _v > 0 else 0, 0 if _v > 0 else 1, v, v)
40
+
41
+ def rightArc(r):
42
+ v = abs(_v)
43
+ if r < _axe:
44
+ v1 = 0
45
+ else:
46
+ f = (r - _axe) / (r + _axe) * (1 - v * v / 200000)
47
+ v1 = int(f * v)
48
+ if _v > 0:
49
+ w(0, 0, v, v1)
50
+ else:
51
+ w(1, 1, v1, v)
52
+
53
+ def leftArc(r):
54
+ v = abs(_v)
55
+ if r < _axe:
56
+ v1 = 0
57
+ else:
58
+ f = (r - _axe) / (r + _axe) * (1 - v * v / 200000)
59
+ v1 = int(f * v)
60
+ if _v > 0:
61
+ w(0, 0, v1, v)
62
+ else:
63
+ w(1, 1, v, v1)
64
+
65
+ def setLEDLeft(on):
66
+ try:
67
+ i2c.write(0x21, bytearray([0,0]))
68
+ except:
69
+ print("Please switch on Robot!")
70
+ while True:
71
+ pass
72
+ if on == 1:
73
+ i2c.write(0x21, bytearray([0,0x01]))
74
+ else:
75
+ i2c.write(0x21, bytearray([0,0]))
76
+
77
+ def setLEDRight(on):
78
+ try:
79
+ i2c.write(0x21, bytearray([0,0]))
80
+ except:
81
+ print("Please switch on Robot!")
82
+ while True:
83
+ pass
84
+ if on == 1:
85
+ i2c.write(0x21, bytearray([0,0x02]))
86
+ else:
87
+ i2c.write(0x21, bytearray([0,0]))
88
+
89
+ def setLED(on):
90
+ try:
91
+ i2c.write(0x21, bytearray([0,0]))
92
+ except:
93
+ print("Please switch on Robot!")
94
+ while True:
95
+ pass
96
+ if on == 1:
97
+ i2c.write(0x21, bytearray([0,0x03]))
98
+ else:
99
+ i2c.write(0x21, bytearray([0,0]))
100
+
101
+ def irLeftValue():
102
+ try:
103
+ buffer = i2c.read(0x21,1)
104
+ if (buffer[0] == 130 or buffer[0] == 131):
105
+ return 1
106
+ else:
107
+ return 0
108
+ except:
109
+ print("Please switch on Robot!")
110
+ while True:
111
+ pass
112
+
113
+ def irRightValue():
114
+ try:
115
+ buffer = i2c.read(0x21,1)
116
+ if (buffer[0] == 129 or buffer[0] == 131):
117
+ return 1
118
+ else:
119
+ return 0
120
+ except:
121
+ print("Please switch on Robot!")
122
+ while True:
123
+ pass
124
+
125
+ def getDistance():
126
+ try:
127
+ buffer = i2c.read(0x21,3)
128
+ dist = (256 * buffer[1] + buffer[2])/10
129
+ return dist
130
+ except:
131
+ print("Please switch on Robot!")
132
+ while True:
133
+ pass
134
+
135
+ def tsValue():
136
+ try:
137
+ buffer = i2c.read(0x21,1)
138
+ if (buffer[0] == 0x8C or buffer[0] == 0x8F):
139
+ return 1
140
+ else:
141
+ return 0
142
+ except:
143
+ print("Please switch on Robot!")
144
+ while True:
145
+ pass
146
+
147
+ def tsLeftValue():
148
+ try:
149
+ buffer = i2c.read(0x21,1)
150
+ if (buffer[0] == 0x88 or buffer[0] == 0x8B):
151
+ return 1
152
+ else:
153
+ return 0
154
+ except:
155
+ print("Please switch on Robot!")
156
+ while True:
157
+ pass
158
+
159
+ def tsRightValue():
160
+ try:
161
+ buffer = i2c.read(0x21,1)
162
+ if (buffer[0] == 0x84 or buffer[0] == 0x87):
163
+ return 1
164
+ else:
165
+ return 0
166
+ except:
167
+ print("Please switch on Robot!")
168
+ while True:
169
+ pass
170
+
171
+ exit = stop
172
+ delay = sleep
173
+ _v = 90 # entspricht default Speed 50
174
+
175
+
176
+
@@ -0,0 +1,46 @@
1
+ # callibotmot.py
2
+ # Version 1.0, Apr 24, 2021 / AR
3
+
4
+ import gc
5
+ from calliope_mini import i2c, sleep
6
+ import machine
7
+
8
+ class Motor:
9
+ def __init__(self, id):
10
+ self._id = id
11
+
12
+ def _w(self, d, s):
13
+ if self._id == 0:
14
+ _self = 0x00
15
+ else:
16
+ _self = 0x02
17
+ try:
18
+ i2c.write(0x20, bytearray([_self, d, s]))
19
+ except:
20
+ print("Please switch on mbRobot!")
21
+ while True:
22
+ pass
23
+
24
+ def rotate(self, s):
25
+ v = abs(s)
26
+ v = v + 50
27
+ if s > 0:
28
+ self._w(0, v)
29
+ elif s < 0:
30
+ self._w(1, v)
31
+ else:
32
+ self._w(0, 0)
33
+
34
+
35
+ delay = sleep
36
+ def setLED(on):
37
+ if on == 1:
38
+ i2c.write(0x21, bytearray([0,0x03]))
39
+ else:
40
+ i2c.write(0x21, bytearray([0,0]))
41
+
42
+ motL = Motor(0)
43
+ motR = Motor(2)
44
+
45
+
46
+
@@ -0,0 +1,143 @@
1
+ # callimk.py (motionkit2)
2
+ import gc
3
+ from calliope_mini import i2c, sleep
4
+ i2c.init()
5
+ _v = 30
6
+ _axe = 0.09
7
+
8
+
9
+ def w(d1, d2, s1, s2):
10
+ i2c.write(0x10, bytearray([0x00, d1, s1]))
11
+ i2c.write(0x10, bytearray([0x02, d2, s2]))
12
+
13
+
14
+ def forward():
15
+ w(0, 0, _v, _v)
16
+
17
+
18
+ def backward():
19
+ w(1, 1, _v, _v)
20
+
21
+
22
+ def stop():
23
+ w(0, 0, 0, 0)
24
+
25
+
26
+ def right():
27
+ w(0 if _v > 0 else 1, 1 if _v > 0 else 0, _v, _v)
28
+
29
+
30
+ def left():
31
+ w(1 if _v > 0 else 0, 0 if _v > 0 else 1, _v, _v)
32
+
33
+
34
+ def rightArc(r):
35
+ v = abs(_v)
36
+ if r < _axe:
37
+ v1 = 0
38
+ else:
39
+ f = (r - _axe) / (r + _axe) * (1 - v * v / 200000)
40
+ v1 = int(f * v)
41
+ if _v > 0:
42
+ w(0, 0, v, v1)
43
+ else:
44
+ w(1, 1, v1, v)
45
+
46
+
47
+ def leftArc(r):
48
+ v = abs(_v)
49
+ if r < _axe:
50
+ v1 = 0
51
+ else:
52
+ f = (r - _axe) / (r + _axe) * (1 - v * v / 200000)
53
+ v1 = int(f * v)
54
+ if _v > 0:
55
+ w(0, 0, v1, v)
56
+ else:
57
+ w(1, 1, v, v1)
58
+
59
+
60
+ def setSpeed(speed):
61
+ global _v
62
+ if speed < 15:
63
+ _v = 15
64
+ else:
65
+ _v = speed
66
+
67
+
68
+ def motorL(dir, speed):
69
+ i2c.write(0x10, bytearray([0x00, dir, speed]))
70
+
71
+
72
+ def motorR(dir, speed):
73
+ i2c.write(0x10, bytearray([0x02, dir, speed]))
74
+
75
+
76
+ def led(right_left, on_off):
77
+ buf_led = bytearray(2)
78
+ if right_left == 0:
79
+ buf_led[0] = 0x0B
80
+ else:
81
+ buf_led[0] = 0x0C
82
+ buf_led[1] = on_off
83
+ i2c.write(0x10, buf_led)
84
+
85
+
86
+ def setLEDLeft(on):
87
+ led(1, on)
88
+
89
+
90
+ def setLEDRight(on):
91
+ led(0, on)
92
+
93
+
94
+ def setLED(on):
95
+ led(1, on)
96
+ led(0, on)
97
+
98
+
99
+ def rgbLED(red, green, blue):
100
+ buf_rgbLed_red = bytearray(2)
101
+ buf_rgbLed_red[0] = 0x18
102
+ buf_rgbLed_red[1] = red
103
+ buf_rgbLed_green = bytearray(2)
104
+ buf_rgbLed_green[0] = 0x19
105
+ buf_rgbLed_green[1] = green
106
+ buf_rgbLed_blue = bytearray(2)
107
+ buf_rgbLed_blue[0] = 0x1A
108
+ buf_rgbLed_blue[1] = blue
109
+ i2c.write(0x10, buf_rgbLed_red)
110
+ i2c.write(0x10, buf_rgbLed_green)
111
+ i2c.write(0x10, buf_rgbLed_blue)
112
+
113
+
114
+ def getDistance():
115
+ i2c.write(0x10, bytearray([0x28]))
116
+ sleep(20)
117
+ data = i2c.read(0x10, 2)
118
+ distance = (data[0] << 8) | data[1]
119
+ return distance
120
+
121
+
122
+ def irLeftValue():
123
+ i2c.write(0x10, bytearray([0x1D]))
124
+ data = i2c.read(0x10, 1)[0]
125
+ return 0 if (data & 0x01) != 0 else 1
126
+
127
+
128
+ def irRightValue():
129
+ i2c.write(0x10, bytearray([0x1D]))
130
+ data = i2c.read(0x10, 1)[0]
131
+ return 0 if (data & 0x02) != 0 else 1
132
+
133
+
134
+ def setServo(S, Angle):
135
+ if S == "S1":
136
+ Servo = 0x14
137
+ if S == "S2":
138
+ Servo = 0x15
139
+ i2c.write(0x10, bytearray([Servo, Angle]))
140
+
141
+
142
+ exit = stop
143
+ delay = sleep
@@ -0,0 +1,14 @@
1
+ # cbalarm.py
2
+ import music
3
+
4
+ _m = ['c6:1', 'r', 'c6,1', 'r', 'r', 'r']
5
+
6
+ def setAlarm(on):
7
+ if on:
8
+ music.play(_m, wait = False, loop = True)
9
+ else:
10
+ music.stop()
11
+
12
+
13
+ def beep():
14
+ music.pitch(2000, 200, wait = False)
@@ -0,0 +1,76 @@
1
+ # cpglow.py
2
+ # Version 1.0, Dec. 5, 2018
3
+
4
+ from calliope_mini import *
5
+
6
+ _x = 0
7
+ _y = 0
8
+ _dir = 0
9
+ _speed = 50
10
+ _trace = True
11
+ _visible = False
12
+
13
+ def makeGlow():
14
+ global _visible
15
+ display.set_pixel(2, 2, 9)
16
+ _visible = True
17
+
18
+ def clear():
19
+ display.clear()
20
+
21
+ def forward():
22
+ _forward(1)
23
+
24
+ def back():
25
+ _forward(-1)
26
+
27
+ def right(angle):
28
+ global _dir
29
+ _dir = (_dir + angle) % 360
30
+
31
+ def left(angle):
32
+ right(-angle)
33
+
34
+ def setPos(x, y):
35
+ global _x, _y
36
+ _x = x
37
+ _y = y
38
+ _render()
39
+
40
+ def getPos():
41
+ return _x, _y
42
+
43
+ def setSpeed(speed):
44
+ global _speed
45
+ _speed = speed
46
+
47
+ def showTrace(enable):
48
+ global _trace
49
+ _trace = enable
50
+
51
+ def isLit():
52
+ return (display.get_pixel(_x + 2, 4 - (_y + 2)) == 9)
53
+
54
+ def _forward(s):
55
+ global _x, _y
56
+ sleep(2000 - _speed * 20)
57
+ d = _dir // 45
58
+ if d in [1, 2, 3]:
59
+ _x += s
60
+ if d in [5, 6, 7]:
61
+ _x -= s
62
+ if d in [0, 1, 7]:
63
+ _y += s
64
+ if d in [3, 4, 5]:
65
+ _y -= s
66
+ _render()
67
+
68
+ def _render():
69
+ if not _visible:
70
+ print("Use \"makeGlow()\" to create a Glow.")
71
+ raise Exception("Glow not initialized.")
72
+ if not _trace:
73
+ display.clear()
74
+ if -2 <= _x <= 2 and -2 <= _y <= 2:
75
+ display.set_pixel(_x + 2, 4 - (_y + 2), 9)
76
+
@@ -0,0 +1,16 @@
1
+ # cpmike.py
2
+
3
+ from calliope_mini import pin3, running_time, sleep
4
+
5
+ _click_time = running_time()
6
+
7
+ def isClicked(level = 10, rearm_time = 500):
8
+ global _click_time
9
+ if running_time() - _click_time < rearm_time:
10
+ sleep(10)
11
+ return False
12
+ v = pin3.read_analog()
13
+ if v < 518 - level:
14
+ _click_time = running_time()
15
+ return True
16
+ return False
@@ -0,0 +1,33 @@
1
+ # cprover.py
2
+
3
+ from calliope_mini import pin28, pin29, pin30
4
+
5
+ def forward():
6
+ pin28.write_analog(v)
7
+ pin29.write_digital(1)
8
+ pin30.write_digital(1)
9
+
10
+ def left():
11
+ pin28.write_analog(v)
12
+ pin29.write_digital(0)
13
+ pin30.write_digital(1)
14
+
15
+ def right():
16
+ pin28.write_analog(v)
17
+ pin29.write_digital(1)
18
+ pin30.write_digital(0)
19
+
20
+ def stop():
21
+ pin28.write_digital(0)
22
+
23
+ def move():
24
+ left()
25
+
26
+ def rewind():
27
+ right()
28
+
29
+ def setSpeed(speed):
30
+ global v
31
+ v = int(speed / 100 * 1023)
32
+
33
+ setSpeed(100)
@@ -0,0 +1,23 @@
1
+ # cputils.py
2
+ # V1.1, Dec 5, 2018
3
+ # Additional classes / global functions for Calliope
4
+
5
+
6
+ def cat(filename):
7
+ with open(filename) as f:
8
+ line = f.readline()
9
+ while line:
10
+ print(line[:-1])
11
+ line = f.readline()
12
+
13
+
14
+ from math import asin, atan2, sqrt, degrees
15
+
16
+ def getPitch(a):
17
+ pitch = atan2(a[1], a[2])
18
+ return int(degrees(pitch))
19
+
20
+ def getRoll(a):
21
+ anorm = sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2])
22
+ roll = asin(a[0] / anorm)
23
+ return int(degrees(roll))
@@ -0,0 +1,10 @@
1
+ {
2
+ "cbalarm": "import music\n_g1=['c6:1','r','c6,1','r','r','r']\ndef setAlarm(on):\n\tif on:music.play(_g1,wait=False,loop=True)\n\telse:music.stop()\ndef beep():music.pitch(2000,200,wait=False)",
3
+ "cprover": "from calliope_mini import pin28,pin29,pin30\ndef forward():pin28.write_analog(v);pin29.write_digital(1);pin30.write_digital(1)\ndef left():pin28.write_analog(v);pin29.write_digital(0);pin30.write_digital(1)\ndef right():pin28.write_analog(v);pin29.write_digital(1);pin30.write_digital(0)\ndef stop():pin28.write_digital(0)\ndef move():left()\ndef rewind():right()\ndef setSpeed(speed):global v;v=int(speed/100*1023)\nsetSpeed(100)",
4
+ "callimk": "import gc\nfrom calliope_mini import i2c,sleep\ni2c.init()\n_g1=30\n_g2=.09\ndef w(d1,d2,s1,s2):i2c.write(16,bytearray([0,d1,s1]));i2c.write(16,bytearray([2,d2,s2]))\ndef forward():w(0,0,_g1,_g1)\ndef backward():w(1,1,_g1,_g1)\ndef stop():w(0,0,0,0)\ndef right():w(0 if _g1>0 else 1,1 if _g1>0 else 0,_g1,_g1)\ndef left():w(1 if _g1>0 else 0,0 if _g1>0 else 1,_g1,_g1)\ndef rightArc(r):\n\tA=abs(_g1)\n\tif r<_g2:B=0\n\telse:C=(r-_g2)/(r+_g2)*(1-A*A/200000);B=int(C*A)\n\tif _g1>0:w(0,0,A,B)\n\telse:w(1,1,B,A)\ndef leftArc(r):\n\tA=abs(_g1)\n\tif r<_g2:B=0\n\telse:C=(r-_g2)/(r+_g2)*(1-A*A/200000);B=int(C*A)\n\tif _g1>0:w(0,0,B,A)\n\telse:w(1,1,A,B)\ndef setSpeed(speed):\n\tA=speed;global _g1\n\tif A<15:_g1=15\n\telse:_g1=A\ndef motorL(dir,speed):i2c.write(16,bytearray([0,dir,speed]))\ndef motorR(dir,speed):i2c.write(16,bytearray([2,dir,speed]))\ndef led(right_left,on_off):\n\tA=bytearray(2)\n\tif right_left==0:A[0]=11\n\telse:A[0]=12\n\tA[1]=on_off;i2c.write(16,A)\ndef setLEDLeft(on):led(1,on)\ndef setLEDRight(on):led(0,on)\ndef setLED(on):led(1,on);led(0,on)\ndef rgbLED(red,green,blue):A=bytearray(2);A[0]=24;A[1]=red;B=bytearray(2);B[0]=25;B[1]=green;C=bytearray(2);C[0]=26;C[1]=blue;i2c.write(16,A);i2c.write(16,B);i2c.write(16,C)\ndef getDistance():i2c.write(16,bytearray([40]));sleep(20);A=i2c.read(16,2);B=A[0]<<8|A[1];return B\ndef irLeftValue():i2c.write(16,bytearray([29]));A=i2c.read(16,1)[0];return 0 if A&1!=0 else 1\ndef irRightValue():i2c.write(16,bytearray([29]));A=i2c.read(16,1)[0];return 0 if A&2!=0 else 1\ndef setServo(S,Angle):\n\tif S=='S1':A=20\n\tif S=='S2':A=21\n\ti2c.write(16,bytearray([A,Angle]))\nexit=stop\ndelay=sleep",
5
+ "cpglow": "from calliope_mini import*\n_g1=0\n_g2=0\n_g3=0\n_g4=50\n_g5=True\n_g6=False\ndef makeGlow():global _g6;display.set_pixel(2,2,9);_g6=True\ndef clear():display.clear()\ndef forward():_f1(1)\ndef back():_f1(-1)\ndef right(angle):global _g3;_g3=(_g3+angle)%360\ndef left(angle):right(-angle)\ndef setPos(x,y):global _g1,_g2;_g1=x;_g2=y;_f2()\ndef getPos():return _g1,_g2\ndef setSpeed(speed):global _g4;_g4=speed\ndef showTrace(enable):global _g5;_g5=enable\ndef isLit():return display.get_pixel(_g1+2,4-(_g2+2))==9\ndef _f1(s):\n\tglobal _g1,_g2;sleep(2000-_g4*20);d=_g3//45\n\tif d in[1,2,3]:_g1+=s\n\tif d in[5,6,7]:_g1-=s\n\tif d in[0,1,7]:_g2+=s\n\tif d in[3,4,5]:_g2-=s\n\t_f2()\ndef _f2():\n\tif not _g6:print('Use \"makeGlow()\" to create a Glow.');raise Exception('Glow not initialized.')\n\tif not _g5:display.clear()\n\tif-2<=_g1<=2 and-2<=_g2<=2:display.set_pixel(_g1+2,4-(_g2+2),9)",
6
+ "callibotmot": "import gc\nfrom calliope_mini import i2c,sleep\nimport machine\nclass Motor:\n\tdef __init__(A,id):A._id=id\n\tdef _f2(B,d,s):\n\t\tif B._id==0:A=0\n\t\telse:A=2\n\t\ttry:i2c.write(32,bytearray([A,d,s]))\n\t\texcept:\n\t\t\tprint('Please switch on mbRobot!')\n\t\t\twhile True:0\n\tdef rotate(B,s):\n\t\tA=abs(s);A=A+50\n\t\tif s>0:B._f2(0,A)\n\t\telif s<0:B._f2(1,A)\n\t\telse:B._f2(0,0)\ndelay=sleep\ndef setLED(on):\n\tif on==1:i2c.write(33,bytearray([0,3]))\n\telse:i2c.write(33,bytearray([0,0]))\nmotL=Motor(0)\nmotR=Motor(2)",
7
+ "callibot": "_B=True\n_A='Please switch on Robot!'\nimport gc\nfrom calliope_mini import i2c,sleep\n_g1=.06\ndef w(d1,d2,s1,s2):\n\ttry:i2c.write(32,bytearray([0,d1,s1]));i2c.write(32,bytearray([2,d2,s2]))\n\texcept:\n\t\tprint(_A)\n\t\twhile _B:0\ndef setSpeed(speed):global _g2;_g2=speed+40\ndef forward():w(0,0,_g2,_g2)\ndef backward():w(1,1,_g2,_g2)\ndef stop():w(0,0,0,0)\ndef right():A=int(_g2*1.1);w(0 if _g2>0 else 1,1 if _g2>0 else 0,A,A)\ndef left():A=int(_g2*1.1);w(1 if _g2>0 else 0,0 if _g2>0 else 1,A,A)\ndef rightArc(r):\n\tA=abs(_g2)\n\tif r<_g1:B=0\n\telse:C=(r-_g1)/(r+_g1)*(1-A*A/200000);B=int(C*A)\n\tif _g2>0:w(0,0,A,B)\n\telse:w(1,1,B,A)\ndef leftArc(r):\n\tA=abs(_g2)\n\tif r<_g1:B=0\n\telse:C=(r-_g1)/(r+_g1)*(1-A*A/200000);B=int(C*A)\n\tif _g2>0:w(0,0,B,A)\n\telse:w(1,1,A,B)\ndef setLEDLeft(on):\n\ttry:i2c.write(33,bytearray([0,0]))\n\texcept:\n\t\tprint(_A)\n\t\twhile _B:0\n\tif on==1:i2c.write(33,bytearray([0,1]))\n\telse:i2c.write(33,bytearray([0,0]))\ndef setLEDRight(on):\n\ttry:i2c.write(33,bytearray([0,0]))\n\texcept:\n\t\tprint(_A)\n\t\twhile _B:0\n\tif on==1:i2c.write(33,bytearray([0,2]))\n\telse:i2c.write(33,bytearray([0,0]))\ndef setLED(on):\n\ttry:i2c.write(33,bytearray([0,0]))\n\texcept:\n\t\tprint(_A)\n\t\twhile _B:0\n\tif on==1:i2c.write(33,bytearray([0,3]))\n\telse:i2c.write(33,bytearray([0,0]))\ndef irLeftValue():\n\ttry:\n\t\tA=i2c.read(33,1)\n\t\tif A[0]==130 or A[0]==131:return 1\n\t\telse:return 0\n\texcept:\n\t\tprint(_A)\n\t\twhile _B:0\ndef irRightValue():\n\ttry:\n\t\tA=i2c.read(33,1)\n\t\tif A[0]==129 or A[0]==131:return 1\n\t\telse:return 0\n\texcept:\n\t\tprint(_A)\n\t\twhile _B:0\ndef getDistance():\n\ttry:A=i2c.read(33,3);B=(256*A[1]+A[2])/10;return B\n\texcept:\n\t\tprint(_A)\n\t\twhile _B:0\ndef tsValue():\n\ttry:\n\t\tA=i2c.read(33,1)\n\t\tif A[0]==140 or A[0]==143:return 1\n\t\telse:return 0\n\texcept:\n\t\tprint(_A)\n\t\twhile _B:0\ndef tsLeftValue():\n\ttry:\n\t\tA=i2c.read(33,1)\n\t\tif A[0]==136 or A[0]==139:return 1\n\t\telse:return 0\n\texcept:\n\t\tprint(_A)\n\t\twhile _B:0\ndef tsRightValue():\n\ttry:\n\t\tA=i2c.read(33,1)\n\t\tif A[0]==132 or A[0]==135:return 1\n\t\telse:return 0\n\texcept:\n\t\tprint(_A)\n\t\twhile _B:0\nexit=stop\ndelay=sleep\n_g2=90",
8
+ "cputils": "def cat(filename):\n\twith open(filename)as B:\n\t\tA=B.readline()\n\t\twhile A:print(A[:-1]);A=B.readline()\nfrom math import asin,atan2,sqrt,degrees\ndef getPitch(a):A=atan2(a[1],a[2]);return int(degrees(A))\ndef getRoll(a):A=sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]);B=asin(a[0]/A);return int(degrees(B))",
9
+ "cpmike": "from calliope_mini import pin3,running_time,sleep\n_g1=running_time()\ndef isClicked(level=10,rearm_time=500):\n\tA=False;global _g1\n\tif running_time()-_g1<rearm_time:sleep(10);return A\n\tB=pin3.read_analog()\n\tif B<518-level:_g1=running_time();return True\n\treturn A"
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "cbalarm": "# cbalarm.py\nimport music\n\n_m = ['c6:1', 'r', 'c6,1', 'r', 'r', 'r']\n\ndef setAlarm(on):\n if on:\n music.play(_m, wait = False, loop = True) \n else:\n music.stop()\n \n \ndef beep():\n music.pitch(2000, 200, wait = False)",
3
+ "cprover": "# cprover.py\n \nfrom calliope_mini import pin28, pin29, pin30\n\ndef forward():\n pin28.write_analog(v)\n pin29.write_digital(1)\n pin30.write_digital(1)\n\ndef left():\n pin28.write_analog(v)\n pin29.write_digital(0)\n pin30.write_digital(1)\n\ndef right():\n pin28.write_analog(v)\n pin29.write_digital(1)\n pin30.write_digital(0)\n\ndef stop():\n pin28.write_digital(0)\n\ndef move():\n left()\n\ndef rewind(): \n right()\n\ndef setSpeed(speed):\n global v\n v = int(speed / 100 * 1023)\n\nsetSpeed(100)\n",
4
+ "callimk": "# callimk.py (motionkit2)\nimport gc\nfrom calliope_mini import i2c, sleep\ni2c.init()\n_v = 30\n_axe = 0.09\n\n\ndef w(d1, d2, s1, s2):\n i2c.write(0x10, bytearray([0x00, d1, s1]))\n i2c.write(0x10, bytearray([0x02, d2, s2]))\n\n\ndef forward():\n w(0, 0, _v, _v)\n\n\ndef backward():\n w(1, 1, _v, _v)\n\n\ndef stop():\n w(0, 0, 0, 0)\n\n\ndef right():\n w(0 if _v > 0 else 1, 1 if _v > 0 else 0, _v, _v)\n\n\ndef left():\n w(1 if _v > 0 else 0, 0 if _v > 0 else 1, _v, _v)\n\n\ndef rightArc(r):\n v = abs(_v)\n if r < _axe:\n v1 = 0\n else:\n f = (r - _axe) / (r + _axe) * (1 - v * v / 200000)\n v1 = int(f * v)\n if _v > 0:\n w(0, 0, v, v1)\n else:\n w(1, 1, v1, v)\n\n\ndef leftArc(r):\n v = abs(_v)\n if r < _axe:\n v1 = 0\n else:\n f = (r - _axe) / (r + _axe) * (1 - v * v / 200000)\n v1 = int(f * v)\n if _v > 0:\n w(0, 0, v1, v)\n else:\n w(1, 1, v, v1)\n\n\ndef setSpeed(speed):\n global _v\n if speed < 15:\n _v = 15\n else:\n _v = speed\n\n\ndef motorL(dir, speed):\n i2c.write(0x10, bytearray([0x00, dir, speed]))\n\n\ndef motorR(dir, speed):\n i2c.write(0x10, bytearray([0x02, dir, speed]))\n\n\ndef led(right_left, on_off):\n buf_led = bytearray(2)\n if right_left == 0:\n buf_led[0] = 0x0B\n else:\n buf_led[0] = 0x0C\n buf_led[1] = on_off\n i2c.write(0x10, buf_led)\n\n\ndef setLEDLeft(on):\n led(1, on)\n\n\ndef setLEDRight(on):\n led(0, on)\n\n\ndef setLED(on):\n led(1, on)\n led(0, on)\n\n\ndef rgbLED(red, green, blue):\n buf_rgbLed_red = bytearray(2)\n buf_rgbLed_red[0] = 0x18\n buf_rgbLed_red[1] = red\n buf_rgbLed_green = bytearray(2)\n buf_rgbLed_green[0] = 0x19\n buf_rgbLed_green[1] = green\n buf_rgbLed_blue = bytearray(2)\n buf_rgbLed_blue[0] = 0x1A\n buf_rgbLed_blue[1] = blue\n i2c.write(0x10, buf_rgbLed_red)\n i2c.write(0x10, buf_rgbLed_green)\n i2c.write(0x10, buf_rgbLed_blue)\n\n\ndef getDistance():\n i2c.write(0x10, bytearray([0x28]))\n sleep(20)\n data = i2c.read(0x10, 2)\n distance = (data[0] << 8) | data[1]\n return distance\n\n\ndef irLeftValue():\n i2c.write(0x10, bytearray([0x1D]))\n data = i2c.read(0x10, 1)[0]\n return 0 if (data & 0x01) != 0 else 1\n\n\ndef irRightValue():\n i2c.write(0x10, bytearray([0x1D]))\n data = i2c.read(0x10, 1)[0]\n return 0 if (data & 0x02) != 0 else 1\n\n\ndef setServo(S, Angle):\n if S == \"S1\":\n Servo = 0x14\n if S == \"S2\":\n Servo = 0x15\n i2c.write(0x10, bytearray([Servo, Angle]))\n\n\nexit = stop\ndelay = sleep\n",
5
+ "cpglow": "# cpglow.py\n# Version 1.0, Dec. 5, 2018\n\nfrom calliope_mini import *\n\n_x = 0\n_y = 0\n_dir = 0\n_speed = 50\n_trace = True\n_visible = False\n\ndef makeGlow():\n global _visible\n display.set_pixel(2, 2, 9)\n _visible = True\n\ndef clear():\n display.clear()\n \ndef forward(): \n _forward(1)\n\ndef back(): \n _forward(-1)\n \ndef right(angle):\n global _dir\n _dir = (_dir + angle) % 360\n\ndef left(angle):\n right(-angle)\n\ndef setPos(x, y):\n global _x, _y\n _x = x\n _y = y\n _render()\n\ndef getPos():\n return _x, _y\n\ndef setSpeed(speed):\n global _speed\n _speed = speed\n \ndef showTrace(enable):\n global _trace\n _trace = enable \n\ndef isLit():\n return (display.get_pixel(_x + 2, 4 - (_y + 2)) == 9)\n \ndef _forward(s):\n global _x, _y\n sleep(2000 - _speed * 20)\n d = _dir // 45\n if d in [1, 2, 3]: \n _x += s\n if d in [5, 6, 7]: \n _x -= s\n if d in [0, 1, 7]: \n _y += s\n if d in [3, 4, 5]: \n _y -= s\n _render()\n\ndef _render():\n if not _visible:\n print(\"Use \\\"makeGlow()\\\" to create a Glow.\")\n raise Exception(\"Glow not initialized.\")\n if not _trace:\n display.clear()\n if -2 <= _x <= 2 and -2 <= _y <= 2: \n display.set_pixel(_x + 2, 4 - (_y + 2), 9)\n\n",
6
+ "callibotmot": "# callibotmot.py\n# Version 1.0, Apr 24, 2021 / AR\n\nimport gc\nfrom calliope_mini import i2c, sleep\nimport machine\n\nclass Motor:\n def __init__(self, id):\n self._id = id\n\n def _w(self, d, s):\n if self._id == 0:\n _self = 0x00\n else:\n _self = 0x02 \n try: \n i2c.write(0x20, bytearray([_self, d, s]))\n except:\n print(\"Please switch on mbRobot!\")\n while True:\n pass\n \n def rotate(self, s):\n v = abs(s)\n v = v + 50 \n if s > 0: \n self._w(0, v) \n elif s < 0: \n self._w(1, v) \n else: \n self._w(0, 0) \n\n \ndelay = sleep\ndef setLED(on):\n if on == 1:\n i2c.write(0x21, bytearray([0,0x03])) \n else:\n i2c.write(0x21, bytearray([0,0])) \n\nmotL = Motor(0)\nmotR = Motor(2)\n\n\n\n",
7
+ "callibot": "# callibot.py\n# Version 1.3, 17-Sept-2021 /JA\n# new: Touchsensors\n\nimport gc\nfrom calliope_mini import i2c, sleep\n\n_axe = 0.06\n\ndef w(d1, d2, s1, s2):\n try:\n i2c.write(0x20, bytearray([0x00, d1, s1]))\n i2c.write(0x20, bytearray([0x02, d2, s2]))\n except:\n print(\"Please switch on Robot!\")\n while True:\n pass\n \ndef setSpeed(speed):\n global _v\n _v = speed + 40\n #_v = int(speed * 1.1) + 35 \n\ndef forward():\n w(0, 0, _v, _v)\n\ndef backward():\n w(1, 1, _v, _v)\n \ndef stop():\n w(0, 0, 0, 0)\n \ndef right():\n v = int(_v * 1.1)\n w(0 if _v > 0 else 1, 1 if _v > 0 else 0, v , v) \n\ndef left():\n v = int(_v * 1.1) \n w(1 if _v > 0 else 0, 0 if _v > 0 else 1, v, v)\n\ndef rightArc(r): \n v = abs(_v) \n if r < _axe:\n v1 = 0\n else: \n f = (r - _axe) / (r + _axe) * (1 - v * v / 200000) \n v1 = int(f * v)\n if _v > 0:\n w(0, 0, v, v1)\n else:\n w(1, 1, v1, v)\n\ndef leftArc(r): \n v = abs(_v) \n if r < _axe:\n v1 = 0\n else:\n f = (r - _axe) / (r + _axe) * (1 - v * v / 200000) \n v1 = int(f * v)\n if _v > 0:\n w(0, 0, v1, v)\n else:\n w(1, 1, v, v1)\n\ndef setLEDLeft(on):\n try:\n i2c.write(0x21, bytearray([0,0])) \n except:\n print(\"Please switch on Robot!\")\n while True:\n pass \n if on == 1:\n i2c.write(0x21, bytearray([0,0x01])) \n else:\n i2c.write(0x21, bytearray([0,0])) \n \ndef setLEDRight(on):\n try:\n i2c.write(0x21, bytearray([0,0])) \n except:\n print(\"Please switch on Robot!\")\n while True:\n pass \n if on == 1:\n i2c.write(0x21, bytearray([0,0x02])) \n else:\n i2c.write(0x21, bytearray([0,0])) \n\ndef setLED(on):\n try:\n i2c.write(0x21, bytearray([0,0])) \n except:\n print(\"Please switch on Robot!\")\n while True:\n pass \n if on == 1:\n i2c.write(0x21, bytearray([0,0x03])) \n else:\n i2c.write(0x21, bytearray([0,0])) \n \ndef irLeftValue():\n try:\n buffer = i2c.read(0x21,1) \n if (buffer[0] == 130 or buffer[0] == 131):\n return 1\n else:\n return 0 \n except:\n print(\"Please switch on Robot!\")\n while True:\n pass \n\ndef irRightValue():\n try:\n buffer = i2c.read(0x21,1) \n if (buffer[0] == 129 or buffer[0] == 131):\n return 1\n else:\n return 0 \n except:\n print(\"Please switch on Robot!\")\n while True:\n pass \n \ndef getDistance():\n try:\n buffer = i2c.read(0x21,3)\n dist = (256 * buffer[1] + buffer[2])/10\n return dist\n except:\n print(\"Please switch on Robot!\")\n while True:\n pass \n \ndef tsValue():\n try:\n buffer = i2c.read(0x21,1) \n if (buffer[0] == 0x8C or buffer[0] == 0x8F):\n return 1\n else:\n return 0 \n except:\n print(\"Please switch on Robot!\")\n while True:\n pass \n\ndef tsLeftValue():\n try:\n buffer = i2c.read(0x21,1) \n if (buffer[0] == 0x88 or buffer[0] == 0x8B):\n return 1\n else:\n return 0 \n except:\n print(\"Please switch on Robot!\")\n while True:\n pass \n \ndef tsRightValue():\n try:\n buffer = i2c.read(0x21,1) \n if (buffer[0] == 0x84 or buffer[0] == 0x87):\n return 1\n else:\n return 0 \n except:\n print(\"Please switch on Robot!\")\n while True:\n pass \n \nexit = stop\ndelay = sleep\n_v = 90 # entspricht default Speed 50\n\n\n\n",
8
+ "cputils": "# cputils.py\n# V1.1, Dec 5, 2018\n# Additional classes / global functions for Calliope\n\n\ndef cat(filename):\n with open(filename) as f:\n line = f.readline()\n while line:\n print(line[:-1])\n line = f.readline()\n\n\nfrom math import asin, atan2, sqrt, degrees\n\ndef getPitch(a):\n pitch = atan2(a[1], a[2])\n return int(degrees(pitch))\n\ndef getRoll(a):\n anorm = sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2])\n roll = asin(a[0] / anorm)\n return int(degrees(roll))",
9
+ "cpmike": "# cpmike.py\n\nfrom calliope_mini import pin3, running_time, sleep\n\n_click_time = running_time()\n\ndef isClicked(level = 10, rearm_time = 500):\n global _click_time\n if running_time() - _click_time < rearm_time:\n sleep(10)\n return False\n v = pin3.read_analog()\n if v < 518 - level:\n _click_time = running_time()\n return True\n return False\n"
10
+ }
@@ -0,0 +1,97 @@
1
+ _B=True
2
+ _A='Please switch on Robot!'
3
+ import gc
4
+ from calliope_mini import i2c,sleep
5
+ _g1=.06
6
+ def w(d1,d2,s1,s2):
7
+ try:i2c.write(32,bytearray([0,d1,s1]));i2c.write(32,bytearray([2,d2,s2]))
8
+ except:
9
+ print(_A)
10
+ while _B:0
11
+ def setSpeed(speed):global _g2;_g2=speed+40
12
+ def forward():w(0,0,_g2,_g2)
13
+ def backward():w(1,1,_g2,_g2)
14
+ def stop():w(0,0,0,0)
15
+ def right():A=int(_g2*1.1);w(0 if _g2>0 else 1,1 if _g2>0 else 0,A,A)
16
+ def left():A=int(_g2*1.1);w(1 if _g2>0 else 0,0 if _g2>0 else 1,A,A)
17
+ def rightArc(r):
18
+ A=abs(_g2)
19
+ if r<_g1:B=0
20
+ else:C=(r-_g1)/(r+_g1)*(1-A*A/200000);B=int(C*A)
21
+ if _g2>0:w(0,0,A,B)
22
+ else:w(1,1,B,A)
23
+ def leftArc(r):
24
+ A=abs(_g2)
25
+ if r<_g1:B=0
26
+ else:C=(r-_g1)/(r+_g1)*(1-A*A/200000);B=int(C*A)
27
+ if _g2>0:w(0,0,B,A)
28
+ else:w(1,1,A,B)
29
+ def setLEDLeft(on):
30
+ try:i2c.write(33,bytearray([0,0]))
31
+ except:
32
+ print(_A)
33
+ while _B:0
34
+ if on==1:i2c.write(33,bytearray([0,1]))
35
+ else:i2c.write(33,bytearray([0,0]))
36
+ def setLEDRight(on):
37
+ try:i2c.write(33,bytearray([0,0]))
38
+ except:
39
+ print(_A)
40
+ while _B:0
41
+ if on==1:i2c.write(33,bytearray([0,2]))
42
+ else:i2c.write(33,bytearray([0,0]))
43
+ def setLED(on):
44
+ try:i2c.write(33,bytearray([0,0]))
45
+ except:
46
+ print(_A)
47
+ while _B:0
48
+ if on==1:i2c.write(33,bytearray([0,3]))
49
+ else:i2c.write(33,bytearray([0,0]))
50
+ def irLeftValue():
51
+ try:
52
+ A=i2c.read(33,1)
53
+ if A[0]==130 or A[0]==131:return 1
54
+ else:return 0
55
+ except:
56
+ print(_A)
57
+ while _B:0
58
+ def irRightValue():
59
+ try:
60
+ A=i2c.read(33,1)
61
+ if A[0]==129 or A[0]==131:return 1
62
+ else:return 0
63
+ except:
64
+ print(_A)
65
+ while _B:0
66
+ def getDistance():
67
+ try:A=i2c.read(33,3);B=(256*A[1]+A[2])/10;return B
68
+ except:
69
+ print(_A)
70
+ while _B:0
71
+ def tsValue():
72
+ try:
73
+ A=i2c.read(33,1)
74
+ if A[0]==140 or A[0]==143:return 1
75
+ else:return 0
76
+ except:
77
+ print(_A)
78
+ while _B:0
79
+ def tsLeftValue():
80
+ try:
81
+ A=i2c.read(33,1)
82
+ if A[0]==136 or A[0]==139:return 1
83
+ else:return 0
84
+ except:
85
+ print(_A)
86
+ while _B:0
87
+ def tsRightValue():
88
+ try:
89
+ A=i2c.read(33,1)
90
+ if A[0]==132 or A[0]==135:return 1
91
+ else:return 0
92
+ except:
93
+ print(_A)
94
+ while _B:0
95
+ exit=stop
96
+ delay=sleep
97
+ _g2=90