-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.ts
145 lines (129 loc) · 4.27 KB
/
main.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/**
* Interaction for MeArm and SG90 servos
*/
enum Gripper {
//% block="offen"
Open = 0,
//% block="geschlossen"
Closed = 180
}
/**
* User-defined blocks
*/
//% weight=100 color=#0fbc11 icon=""
namespace meArm {
class meArm {
bottomPin: AnalogPin
leftPin: AnalogPin
rightPin: AnalogPin
gripperPin: AnalogPin
bottomValue: number
leftValue: number
rightValue: number
constructor(bottomPin: AnalogPin, leftPin: AnalogPin, rightPin: AnalogPin, gripperPin: AnalogPin) {
this.bottomPin = bottomPin
this.leftPin = leftPin
this.rightPin = rightPin
this.gripperPin = gripperPin
initServo(this.bottomPin)
initServo(this.leftPin)
initServo(this.rightPin)
}
move(bottom: number, left: number, right: number) {
this.bottomValue = bottom
this.leftValue = left
this.rightValue = right
moveServo(this.bottomPin, bottom)
moveServo(this.leftPin, left)
moveServo(this.rightPin, right)
}
moveGripper(value: number) {
deinitServo(this.bottomPin)
deinitServo(this.leftPin)
deinitServo(this.rightPin)
initServo(this.gripperPin)
moveServo(this.gripperPin, value)
control.waitMicros(100000)
deinitServo(this.gripperPin)
initServo(this.bottomPin)
initServo(this.leftPin)
initServo(this.rightPin)
move(this.bottomValue, this.leftValue, this.rightValue)
}
}
let m: meArm
/**
* MeArm initialisieren
* @param bottomPin Servomotor (unten) an Pin initialisieren
* @param leftPin Servomotor (links) an Pin initialisieren
* @param rightPin Servomotor (rechts) an Pin initialisieren
* @param gripperPin Servomotor (Greifer) an Pin initialisieren
*/
//% blockId=MeArm_init
//% block="MeArm initialisieren. Verwendete Pins:|unten: %bottomPin|links: %leftPin|rechts: %rightPin|Greifer: %gripperPin"
//% bottomPin.defl=AnalogPin.C4
//% leftPin.defl=AnalogPin.C5
//% rightPin.defl=AnalogPin.C6
//% gripperPin.defl=AnalogPin.C16
export function init(bottomPin: AnalogPin, leftPin: AnalogPin, rightPin: AnalogPin, gripperPin: AnalogPin) {
m = new meArm(bottomPin, leftPin, rightPin, gripperPin)
}
/**
* Servo initialisieren
* @param pin Servomotor an Pin initialisieren
*/
//% blockId=servo_init
//% block="Servo an Pin %pin|initialisieren"
//% advanced=true
export function initServo(pin: AnalogPin) {
pins.analogSetPeriod(pin, 20000)
}
/**
* Servo deinitialisieren
* @param pin Servomotor an Pin deinitialisieren
*/
//% blockId=servo_deInit
//% block="Servo an Pin %pin|deinitialisieren"
//% advanced=true
export function deinitServo(pin: AnalogPin) {
pins.analogWritePin(pin, 0)
}
/**
* Servomotor auf bestimmten Winkel fahren
* @param pin Servo-Pin
* @param value Servo-Winkel von 0 bis 180 Grad
*/
//% blockId=servo_move
//% block="Servo an %pin|auf %value|Grad bewegen"
//% advanced=true
//% value.min=0 value.max=180 value.defl=90
export function moveServo(pin: AnalogPin, value: number) {
if (value > 180) { value = 180 }
if (value < 0) { value = 0 }
let servo = (value * 5) / 9 + 27
pins.analogWritePin(pin, servo)
}
/**
* MeArm an bestimmte Winkelkombination fahren
* @param bottom Winkel für unteren Motor
* @param left Winkel für unteren Motor
* @param right Winkel für unteren Motor
*/
//% blockId=MeArm_move
//% block="MeArm auf %bottom|, %left|, %right| bewegen"
//% bottom.min=0 bottom.max=180 bottom.defl=90
//% left.min=0 left.max=180 left.defl=90
//% right.min=0 right.max=180 right.defl=90
export function move(bottom: number, left: number, right: number) {
m.move(bottom, left, right)
}
/**
* MeArm Greifer bewegen
* @param status Status des Greifers
*/
//% blockId=MeArm_gripper
//% block="MeArm Greifer auf %status|stellen"
export function greifer(status: Gripper) {
m.moveGripper(status)
}
}