source: EcnlProtoTool/trunk/webapp/webmrbc/Arduino/ServoBlock.cs@ 270

Last change on this file since 270 was 270, checked in by coas-nagasima, 7 years ago

mruby版ECNLプロトタイピング・ツールを追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-csharp
File size: 7.3 KB
RevLine 
[270]1using System;
2using System.Collections.Generic;
3using System.Linq;
4using Bridge;
5
6namespace WebMrbc
7{
8 public class ServoAttachBlock : Block
9 {
10 public const string type_name = "servo_attach";
11
12 public ServoAttachBlock()
13 : base(type_name)
14 {
15 }
16 public void init()
17 {
18 this.appendDummyInput()
19 .appendField("サーボ出力を任意のピンに割り当てます")
20 .appendField(new FieldNumber("0", 0, 11, 1), "CH");
21 this.appendDummyInput()
22 .appendField("割り当てるピン番号")
23 .appendField(GrPeach.PwmPins(), "PIN_NO")
24 .appendField("Min")
25 .appendField(new FieldTextInput("default"), "MIN")
26 .appendField("Max")
27 .appendField(new FieldTextInput("default"), "MAX");
28 this.setPreviousStatement(true, null);
29 this.setNextStatement(true, null);
30 this.setColour(160);
31 this.setTooltip("");
32 this.setHelpUrl("http://www.example.com/");
33 }
34 }
35
36 public class ServoAngleBlock : Block
37 {
38 public const string type_name = "servo_angle";
39
40 public ServoAngleBlock()
41 : base(type_name)
42 {
43 }
44
45 public void init()
46 {
47 this.appendDummyInput()
48 .appendField(new FieldAngle("180", validator), "VALUE");
49 this.setInputsInline(true);
50 this.setOutput(true, "Number");
51 this.setColour(160);
52 this.setTooltip("");
53 this.setHelpUrl("http://www.example.com/");
54 }
55
56 public string validator(string text)
57 {
58 if (text == null) return null;
59 var a = Script.ParseFloat(text);
60 if (Script.IsNaN(a)) return null;
61 a %= 180;
62 if (a < 0) a += 180;
63 return a.ToString();
64 }
65 }
66
67
68 public class ServoWriteBlock : Block
69 {
70 public const string type_name = "servo_write";
71
72 public ServoWriteBlock()
73 : base(type_name)
74 {
75 }
76 public void init()
77 {
78 this.appendDummyInput()
79 .appendField("サーボの角度をセットします")
80 .appendField(new FieldNumber("0", 0, 11, 1), "CH");
81 this.appendValueInput("ANGLE")
82 .setCheck("Number")
83 .appendField("角度");
84 this.setInputsInline(true);
85 this.setPreviousStatement(true, null);
86 this.setNextStatement(true, null);
87 this.setColour(160);
88 this.setTooltip("");
89 this.setHelpUrl("http://www.example.com/");
90 }
91 }
92
93 public class ServoUsValueBlock : Block
94 {
95 public const string type_name = "servo_us_value";
96
97 public ServoUsValueBlock()
98 : base(type_name)
99 {
100 }
101
102 public void init()
103 {
104 this.appendDummyInput()
105 .appendField(new FieldNumber("0", 0, 19999, 1), "VALUE");
106 this.setOutput(true, "Number");
107 this.setColour(160);
108 this.setTooltip("パルスの幅 1~19999, 0で出力 OFF");
109 this.setHelpUrl("http://www.example.com/");
110 }
111 }
112
113
114 public class ServoUsBlock : Block
115 {
116 public const string type_name = "servo_us";
117
118 public ServoUsBlock()
119 : base(type_name)
120 {
121 }
122
123 public void init()
124 {
125 this.appendDummyInput()
126 .appendField("サーボモータにus単位で角度を指定する")
127 .appendField(new FieldNumber("0", 0, 11, 1), "CH");
128 this.appendValueInput("US")
129 .setCheck("Number")
130 .appendField("出力したいパルスの幅");
131 this.setPreviousStatement(true, null);
132 this.setNextStatement(true, null);
133 this.setColour(160);
134 this.setTooltip("");
135 this.setHelpUrl("http://www.example.com/");
136 }
137 }
138
139 public class ServoReadBlock : Block
140 {
141 public const string type_name = "servo_read";
142
143 public ServoReadBlock()
144 : base(type_name)
145 {
146 }
147
148 public void init()
149 {
150 this.appendDummyInput()
151 .appendField("最後に設定された角度を読み出す")
152 .appendField(new FieldNumber("0", 0, 11, 1), "CH");
153 this.setOutput(true, "Number");
154 this.setColour(160);
155 this.setTooltip("");
156 this.setHelpUrl("http://www.example.com/");
157 }
158 }
159
160 public class ServoAttachedBlock : Block
161 {
162 public const string type_name = "servo_attached";
163
164 public ServoAttachedBlock()
165 : base(type_name)
166 {
167 }
168
169 public void init()
170 {
171 this.appendDummyInput()
172 .appendField("ピンにサーボが割り当てられているかを確認する")
173 .appendField(new FieldNumber("0", 0, 11, 1), "CH");
174 this.setOutput(true, "Boolean");
175 this.setColour(160);
176 this.setTooltip("");
177 this.setHelpUrl("http://www.example.com/");
178 }
179 }
180
181 public class ServoDetachBlock : Block
182 {
183 public const string type_name = "servo_detach";
184
185 public ServoDetachBlock()
186 : base(type_name)
187 {
188 }
189
190 public void init()
191 {
192 this.appendDummyInput()
193 .appendField("サーボの動作を止め、割り込みを禁止する")
194 .appendField(new FieldNumber("0", 0, 11, 1), "CH");
195 this.setPreviousStatement(true, null);
196 this.setNextStatement(true, null);
197 this.setColour(160);
198 this.setTooltip("");
199 this.setHelpUrl("http://www.example.com/");
200 }
201 }
202
203 partial class Ruby
204 {
205 public node servo_angle(ServoAngleBlock block)
206 {
207 var value = block.getFieldValue("VALUE");
208 return new int_node(this, value == null ? 0 : Script.ParseInt(value, 10));
209 }
210
211 public node servo_us_value(ServoUsValueBlock block)
212 {
213 var value = block.getFieldValue("VALUE");
214 return new int_node(this, value == null ? 0 : Script.ParseInt(value, 10));
215 }
216
217 public node servo_attach(ServoAttachBlock block)
218 {
219 var number_ch = block.getFieldValue("CH");
220 var dropdown_pin_no = block.getFieldValue("PIN_NO");
221 var text_min = block.getFieldValue("MIN");
222 var text_max = block.getFieldValue("MAX");
223 var c = new const_node(this, intern("Servo"));
224 var p = new node[] {
225 new int_node(this, number_ch == null ? 0 : Script.ParseInt(number_ch, 10)),
226 new int_node(this, GrPeach.PinNameToNum(dropdown_pin_no)),
227 new int_node(this, text_min == null ? 0 : Script.ParseInt(text_min, 10)),
228 new int_node(this, text_max == null ? 0 : Script.ParseInt(text_max, 10)),
229 };
230 return new call_node(this, c, intern("attach"), p, null);
231 }
232
233 public node servo_write(ServoWriteBlock block)
234 {
235 var number_ch = block.getFieldValue("CH");
236 var value_angle = valueToCode(block, "ANGLE");
237 var c = new const_node(this, intern("Servo"));
238 var p = new node[] {
239 new int_node(this, number_ch == null ? 0 : Script.ParseInt(number_ch, 10)),
240 value_angle,
241 };
242 return new call_node(this, c, intern("write"), p, null);
243 }
244
245 public node servo_us(ServoUsBlock block)
246 {
247 var number_ch = block.getFieldValue("CH");
248 var value_us = valueToCode(block, "US");
249 var c = new const_node(this, intern("Servo"));
250 var p = new node[] {
251 new int_node(this, number_ch == null ? 0 : Script.ParseInt(number_ch, 10)),
252 value_us,
253 };
254 return new call_node(this, c, intern("us"), p, null);
255 }
256
257 public node servo_read(ServoReadBlock block)
258 {
259 var number_ch = block.getFieldValue("CH");
260 var c = new const_node(this, intern("Servo"));
261 var p = new node[] {
262 new int_node(this, number_ch == null ? 0 : Script.ParseInt(number_ch, 10)),
263 };
264 return new call_node(this, c, intern("read"), p, null);
265 }
266
267 public node servo_attached(ServoAttachedBlock block)
268 {
269 var number_ch = block.getFieldValue("CH");
270 var c = new const_node(this, intern("Servo"));
271 var p = new node[] {
272 new int_node(this, number_ch == null ? 0 : Script.ParseInt(number_ch, 10)),
273 };
274 return new call_node(this, c, intern("attached"), p, null);
275 }
276
277 public node servo_detach(ServoDetachBlock block)
278 {
279 var number_ch = block.getFieldValue("CH");
280 var c = new const_node(this, intern("Servo"));
281 var p = new node[] {
282 new int_node(this, number_ch == null ? 0 : Script.ParseInt(number_ch, 10)),
283 };
284 return new call_node(this, c, intern("detach"), p, null);
285 }
286 }
287}
Note: See TracBrowser for help on using the repository browser.