From 67f0298a18329ef4cfb0d2276f8921329e35c487 Mon Sep 17 00:00:00 2001 From: Wanwoo Date: Tue, 18 Jun 2024 16:21:49 +0900 Subject: [PATCH] iboard_fix --- .../blocks/hardware/block_iboard.js | 466 +++++++++--------- 1 file changed, 223 insertions(+), 243 deletions(-) diff --git a/src/playground/blocks/hardware/block_iboard.js b/src/playground/blocks/hardware/block_iboard.js index f547ad424f..30e50146ae 100644 --- a/src/playground/blocks/hardware/block_iboard.js +++ b/src/playground/blocks/hardware/block_iboard.js @@ -87,10 +87,17 @@ Entry.iboard.setLanguage = function() { iboard_led: 'LED %1 번을 %2', iboard_buzzer: '버저를 %2 %3 음으로 %4 초 연주하기', iboard_rgb_pwm: 'RGB LED의 %1 LED의 밝기를 %2 (으)로 정하기', + iboard_toggle_rgb: 'RGB LED의 %1 LED %2', iboard_get_cds: '현재 밝기', iboard_get_res: '가변저항 값', iboard_get_mic: '소리센서 값', iboard_get_tmp: '현재 섭씨온도', + }, + Device: { + iboard: 'iboard', + }, + Menus: { + iboard: 'iboard', }, }, en: { @@ -109,10 +116,17 @@ Entry.iboard.setLanguage = function() { iboard_led: 'LED %1 pin %2', iboard_buzzer: 'Play tone on note %2 octave %3 beat %4 %5', iboard_rgb_pwm: 'RGB LED %1 Pin %2', + iboard_toggle_rgb: 'RGB LED %1 LED %2', iboard_get_cds: 'Light Sensor Value', iboard_get_res: 'Potentiometer Value', iboard_get_mic: 'Mic Value', iboard_get_tmp: 'Now Temp(C)', + }, + Device: { + iboard: 'iboard', + }, + Menus: { + iboard: 'iboard', }, }, }; @@ -123,111 +137,26 @@ Entry.iboard.blockMenuBlocks = [ 'iboard_get_res', 'iboard_get_cds', 'iboard_get_mic', + 'iboard_button', + 'iboard_led', 'iboard_LED_pwm', 'iboard_rgb_pwm', + 'iboard_toggle_rgb', 'iboard_buzzer', 'iboard_motor', + 'iboard_get_analog_value', 'iboard_get_analog_value_map', - 'iboard_get_ultrasonic_value', + 'iboard_get_digital', + 'iboard_toggle_led', 'iboard_digital_pwm', - 'iboard_set_servo', 'iboard_set_tone', + 'iboard_get_ultrasonic_value', ]; -Entry.iboard.setLanguage = function() { - return { - ko: { - template: { - iboard_button: '%1 버튼을 눌렀는가?', - iboard_digital_pwm: '디지털 %1 번 핀을 %2 (으)로 정하기 %3', - iboard_get_analog_value: '아날로그 %1 번 센서값 ', - iboard_get_analog_value_map: '%1 값의 범위를 %2 ~ %3 에서 %4 ~ %5 (으)로 바꾼값 ', - iboard_get_digital: '디지털 %1 번 센서값 ', - iboard_led: 'LED %1 번을 %2 %3', - iboard_motor: '모터를 %2 으로 동작하기 %3', - iboard_pwm_led: 'LED %1 번의 밝기를 %2 (으)로 정하기 %3', - iboard_rgb_led: 'RGB LED의 %1 LED %2 %3', - iboard_set_tone: '디지털 %1 번 핀의 버저를 %2 %3 음으로 %4 초 연주하기 %5', - iboard_toggle_led: '디지털 %1 번 핀 %2 %3', - }, - Blocks: { - iboard_analog_number_0: 'A0', - iboard_analog_number_1: 'A1', - iboard_analog_number_2: 'A2', - iboard_analog_number_3: 'A3', - iboard_analog_number_4: 'A4', - iboard_analog_number_5: 'A5', - iboard_light: '빛센서가 ', - iboard_num_pin_1: 'LED 상태를', - iboard_num_pin_2: '번 스위치가', - iboard_num_pin_3: '아날로그', - iboard_num_pin_4: '번 ', - iboard_num_pin_5: '센서값', - iboard_string_1: '켜짐', - iboard_string_2: '꺼짐', - iboard_string_3: '밝음', - iboard_string_4: '어두움', - iboard_string_5: '눌림', - iboard_string_6: '열림', - iboard_switch: '스위치 ', - iboard_tilt: '기울기센서 상태가', - }, - Device: { - iboard: '아이보드', - }, - Menus: { - iboard: '아이보드', - }, - }, - en: { - template: { - iboard_button: 'Pressed %1 button?', - iboard_digital_pwm: 'Digital %1 Pin %2 %3', - iboard_get_analog_value: 'Analog %1 Sensor value ', - iboard_get_analog_value_map: 'Map Value %1 %2 ~ %3 to %4 ~ %5 ', - iboard_get_digital: 'Digital %1 Sensor value ', - iboard_led: 'Digital %1 Pin %2 %3', - iboard_motor: 'Digital %1 Pin %2 %3', - iboard_pwm_led: 'Digital %1 Pin %2 %3', - iboard_rgb_led: ' %1 LED %2 %3', - iboard_set_tone: 'Play tone pin %1 on note %2 octave %3 beat %4 %5', - iboard_toggle_led: 'Digital %1 Pin %2 %3', - }, - Blocks: { - iboard_analog_number_0: 'A0', - iboard_analog_number_1: 'A1', - iboard_analog_number_2: 'A2', - iboard_analog_number_3: 'A3', - iboard_analog_number_4: 'A4', - iboard_analog_number_5: 'A5', - iboard_light: 'Light sensor is ', - iboard_num_pin_1: 'LED status', - iboard_num_pin_2: 'switch', - iboard_num_pin_3: 'analogue', - iboard_num_pin_4: ' ', - iboard_num_pin_5: 'sensor value', - iboard_string_1: 'on', - iboard_string_2: 'off', - iboard_string_3: 'bright', - iboard_string_4: 'dark', - iboard_string_5: 'pressed', - iboard_string_6: 'opened', - iboard_switch: 'switch ', - iboard_tilt: 'Slope sensor status is', - }, - Device: { - iboard: 'iboard', - }, - Menus: { - iboard: 'iboard', - }, - }, - }; -}; Entry.iboard.getBlocks = function() { return { @@ -294,9 +223,10 @@ Entry.iboard.getBlocks = function() { ], }, }, - - ///////////////////////////////////////////////////////////////////////////////////////////// - iboard_button_list: { + + +///////////////////////////////////////////////////////////////////////////////////////////// + iboard_button_list: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic_string_field', @@ -305,56 +235,34 @@ Entry.iboard.getBlocks = function() { params: [ { type: 'Dropdown', - options: [ - ['A0', '0'], - ['A1', '1'], - ], - value: '1', + options: [['D2', '2'], ['D3', '3'], ['D4', '4']], + value: '2', fontSize: 11, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, }, ], - syntax: { - js: [], - py: [ - { - syntax: '%1', - blockType: 'param', - textParams: [ - { - type: 'Dropdown', - options: [ - ['A0', '0'], - ['A1', '1'], - ], - value: '1', - fontSize: 11, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, - converter: Entry.block.converters.returnStringKey, - codeMap: 'Entry.CodeMap.Arduino.iboard_temp_sensor_get_value[0]', - }, - ], - keyOption: 'iboard_temp_sensor_get_value', - }, - ], + events: {}, + def: { + params: [null], + }, + paramsKeyMap: { + PORT: 0, + }, + func: function(sprite, script) { + return script.getStringField('PORT'); }, }, - iboard_button: { + iboard_button: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, fontColor: '#fff', skeleton: 'basic_boolean_field', params: [ { - type: 'Dropdown', - options: [ - ['A2', '2'], - ['A3', '3'], - ], - value: '2', - fontSize: 11, + type: 'Block', + accept: 'string', + defaultType: 'number', }, ], events: {}, @@ -366,10 +274,10 @@ Entry.iboard.getBlocks = function() { ], type: 'iboard_button', }, - paramsKeyMap: { + paramsKeyMap: { PORT: 0, }, - class: 'iboardGet', + class: 'iboardGet', isNotFor: ['iboard'], func(sprite, script) { const { hwModule = {} } = Entry.hw; @@ -397,25 +305,16 @@ Entry.iboard.getBlocks = function() { blockType: 'param', textParams: [ { - type: 'Dropdown', - options: [ - ['A2', '2'], - ['A3', '3'], - ], - value: '2', - fontSize: 11, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, - converter: Entry.block.converters.returnStringKey, - codeMap: 'Entry.CodeMap.Arduino.iboard_cds_sensor_get_value[0]', + type: 'Block', + accept: 'string', }, ], }, ], }, }, - - iboard_motor_list: { + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + iboard_motor_list: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic_string_field', @@ -424,11 +323,8 @@ Entry.iboard.getBlocks = function() { params: [ { type: 'Dropdown', - options: [ - ['A3', '3'], - ['A4', '4'], - ], - value: '3', + options: [['정지', '0'], ['미풍', '100'], ['약풍', '170'], ['강풍', '255']], + value: '0', fontSize: 11, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, @@ -445,8 +341,8 @@ Entry.iboard.getBlocks = function() { return script.getField('VALUE', script); }, }, - - iboard_motor: { + + iboard_motor: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', @@ -471,7 +367,7 @@ Entry.iboard.getBlocks = function() { params: ['6'], }, { - type: 'iboard_motor_list', + type: 'iboard_motor_list' }, null, ], @@ -506,25 +402,20 @@ Entry.iboard.getBlocks = function() { syntax: 'Arduino.analogWrite(%1, %2)', textParams: [ { - type: 'Dropdown', - options: [ - ['A3', '3'], - ['A4', '4'], - ], - value: '3', - fontSize: 11, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, - converter: Entry.block.converters.returnStringKey, - codeMap: 'Entry.CodeMap.Arduino.iboard_mic_get_value[0]', + type: 'Block', + accept: 'string', + }, + { + type: 'Block', + accept: 'string', }, ], }, ], }, }, - // - iboard_pwm_rgb_list: { + ///////////////////////////////////////////////////////////////////////////////////////////// + iboard_pwm_rgb_list: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic_string_field', @@ -533,12 +424,8 @@ Entry.iboard.getBlocks = function() { params: [ { type: 'Dropdown', - options: [ - ['D2', '2'], - ['D3', '3'], - ['D4', '4'], - ], - value: '2', + options: [['빨강', '5'], ['초록', '6'], ['파랑', '9']], + value: '5', fontSize: 11, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, @@ -555,23 +442,22 @@ Entry.iboard.getBlocks = function() { return script.getStringField('PORT'); }, }, - - iboard_rgb_pwm: { + + iboard_rgb_pwm: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', statements: [], params: [ { - type: 'Dropdown', - options: [ - ['D5', '5'], - ['D6', '6'], - ], - value: '5', - fontSize: 11, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + type: 'Block', + accept: 'string', + defaultType: 'number', + }, + { + type: 'Block', + accept: 'string', + defaultType: 'number', }, ], events: {}, @@ -629,8 +515,8 @@ Entry.iboard.getBlocks = function() { ], }, }, - // - iboard_led_list: { + ////////////////////////////////////////////////////////////////////////////////////// + iboard_led_list: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic_string_field', @@ -639,10 +525,7 @@ Entry.iboard.getBlocks = function() { params: [ { type: 'Dropdown', - options: [ - ['D10', '10'], - ['D11', '11'], - ], + options: [['D10', '10'], ['D11', '11']], value: '10', fontSize: 11, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, @@ -660,7 +543,7 @@ Entry.iboard.getBlocks = function() { return script.getStringField('PORT'); }, }, - iboard_led_list2: { + iboard_led_list2: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic_string_field', @@ -669,12 +552,8 @@ Entry.iboard.getBlocks = function() { params: [ { type: 'Dropdown', - options: [ - ['빨간', '5'], - ['초록', '6'], - ['파란', '9'], - ], - value: '5', + options: [['켜기', '1'], ['끄기', '0'],], + value: '0', fontSize: 11, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, @@ -691,7 +570,7 @@ Entry.iboard.getBlocks = function() { return script.getField('VALUE', script); }, }, - iboard_led: { + iboard_led: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', @@ -769,8 +648,87 @@ Entry.iboard.getBlocks = function() { ], }, }, + ////////////////////////////////////////////////////////////////////////////////////////////////////// + iboard_toggle_rgb: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic', + statements: [], + params: [ + { + type: 'Block', + accept: 'string', + defaultType: 'number', + }, + { + type: 'Block', + accept: 'string', + }, + ], + events: {}, + def: { + params: [ + { + type: 'iboard_pwm_rgb_list', + }, + { + type: 'iboard_led_list2', + }, + null, + ], + type: 'iboard_toggle_rgb', + }, + paramsKeyMap: { + PORT: 0, + VALUE: 1, + }, + class: 'iboard', + isNotFor: ['iboard'], + func(sprite, script) { + const port = script.getNumberValue('PORT'); + let value = script.getValue('VALUE'); - iboard_pwm_led_list: { + if (typeof value === 'string') { + value = value.toLowerCase(); + } + if (Entry.iboard.highList.indexOf(value) > -1) { + value = 255; + } else if (Entry.iboard.lowList.indexOf(value) > -1) { + value = 0; + } else { + throw new Error(); + } + if (!Entry.hw.sendQueue.SET) { + Entry.hw.sendQueue.SET = {}; + } + Entry.hw.sendQueue.SET[port] = { + type: Entry.iboard.sensorTypes.DIGITAL, + data: value, + time: new Date().getTime(), + }; + return script.callReturn(); + }, + syntax: { + js: [], + py: [ + { + syntax: 'Arduino.digitalWrite(%1, %2)', + textParams: [ + { + type: 'Block', + accept: 'string', + }, + { + type: 'Block', + accept: 'string', + }, + ], + }, + ], + }, + }, + ////////////////////////////////////////////////////////////////////////////////////////////////////// + iboard_pwm_led_list: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic_string_field', @@ -779,13 +737,8 @@ Entry.iboard.getBlocks = function() { params: [ { type: 'Dropdown', - options: [ - ['정지', '0'], - ['미풍', '100'], - ['약풍', '170'], - ['강풍', '255'], - ], - value: '0', + options: [['D5', '5'], ['D6', '6']], + value: '5', fontSize: 11, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, @@ -802,8 +755,8 @@ Entry.iboard.getBlocks = function() { return script.getStringField('PORT'); }, }, - - iboard_LED_pwm: { + + iboard_LED_pwm: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', @@ -840,21 +793,44 @@ Entry.iboard.getBlocks = function() { }, class: 'iboard', isNotFor: ['iboard'], - func: function(sprite, script) { - var port = script.getValue('PORT', script); - var ANALOG = Entry.hw.portData.ANALOG; - if (port[0] === 'A') port = port.substring(1); - var value1 = ANALOG ? ANALOG[port] || 0 : 0; - var value2 = 5; - var value3 = 1024; - var value4 = 100; - var value5 = 50; - var result = ((value1 * value2) / value3) * value4 - value5; - return result; + func(sprite, script) { + const port = script.getNumberValue('PORT'); + let value = script.getNumberValue('VALUE'); + value = Math.round(value); + value = Math.max(value, 0); + value = Math.min(value, 255); + if (!Entry.hw.sendQueue.SET) { + Entry.hw.sendQueue.SET = {}; + } + Entry.hw.sendQueue.SET[port] = { + type: Entry.ArduinoExt.sensorTypes.PWM, + data: value, + time: new Date().getTime(), + }; + return script.callReturn(); + }, + syntax: { + js: [], + py: [ + { + syntax: 'Arduino.analogWrite(%1, %2)', + textParams: [ + { + type: 'Block', + accept: 'string', + }, + { + type: 'Block', + accept: 'string', + }, + ], + }, + ], }, }, - - iboard_buzzer: { + + ///////////////////////////////////////////////////////////////////////////////////////////// + iboard_buzzer: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', @@ -1020,7 +996,7 @@ Entry.iboard.getBlocks = function() { ], }, }, - + ////////////////////////////////////////////////////////////////////////////// iboard_get_cds: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, @@ -1073,8 +1049,8 @@ Entry.iboard.getBlocks = function() { ], }, }, - - iboard_get_res: { + ////////////////////////////////////////////////////////////////////////////////// + iboard_get_res: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, fontColor: '#fff', @@ -1126,8 +1102,8 @@ Entry.iboard.getBlocks = function() { ], }, }, - - iboard_get_mic: { + //////////////////////////////////////////////////////////////////////////////////////////// + iboard_get_mic: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, fontColor: '#fff', @@ -1179,8 +1155,8 @@ Entry.iboard.getBlocks = function() { ], }, }, - - iboard_get_tmp: { + //////////////////////////////////////////////////////////////////////////////// + iboard_get_tmp: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, fontColor: '#fff', @@ -1214,12 +1190,12 @@ Entry.iboard.getBlocks = function() { if (port[0] === 'A') { port = port.substring(1); } - var value1 = ANALOG ? ANALOG[port] || 0 : 0; - var value2 = 5; + var value1 = ANALOG ? ANALOG[port] || 0 : 0; + var value2 = 5; var value3 = 1023; var value4 = 100; var value5 = 50; - var result = ((value1 * value2) / value3) * value4 - value5; + var result = value1 * value2 / value3 * value4 - value5; return result; }, syntax: { @@ -1238,8 +1214,9 @@ Entry.iboard.getBlocks = function() { ], }, }, - - ///////////////////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////////////////// iboard_get_analog_value: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, @@ -1291,6 +1268,7 @@ Entry.iboard.getBlocks = function() { ], }, }, + /////////////////////////////////////////////////////////////////////// iboard_get_analog_value_map: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, @@ -1349,7 +1327,7 @@ Entry.iboard.getBlocks = function() { }, { type: 'number', - params: ['100'], + params: ['255'], }, ], type: 'iboard_get_analog_value_map', @@ -1437,6 +1415,7 @@ Entry.iboard.getBlocks = function() { ], }, }, + /////////////////////////////////////////////////////////////////////////////// iboard_get_ultrasonic_value: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, @@ -1460,11 +1439,11 @@ Entry.iboard.getBlocks = function() { params: [ { type: 'arduino_get_port_number', - params: ['2'], + params: ['7'], }, { type: 'arduino_get_port_number', - params: ['4'], + params: ['8'], }, ], type: 'iboard_get_ultrasonic_value', @@ -1514,6 +1493,7 @@ Entry.iboard.getBlocks = function() { ], }, }, + //////////////////////////////////////////////////////////////////////////////////////////////////// iboard_get_digital: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, @@ -1575,7 +1555,7 @@ Entry.iboard.getBlocks = function() { ], }, }, - + //////////////////////////////////////////////////////////////////////////////////////////////// iboard_digital_toggle: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, @@ -1584,10 +1564,7 @@ Entry.iboard.getBlocks = function() { params: [ { type: 'Dropdown', - options: [ - [Lang.Blocks.ARDUINO_on, 'on'], - [Lang.Blocks.ARDUINO_off, 'off'], - ], + options: [[Lang.Blocks.ARDUINO_on, 'on'], [Lang.Blocks.ARDUINO_off, 'off']], value: 'on', fontSize: 11, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, @@ -1629,7 +1606,7 @@ Entry.iboard.getBlocks = function() { ], }, }, - + /////////////////////////////////////////////////////////////////////////////////////////////////////////// iboard_toggle_led: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, @@ -1715,6 +1692,7 @@ Entry.iboard.getBlocks = function() { ], }, }, + /////////////////////////////////////////////////////////////////////////////////////// iboard_digital_pwm: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, @@ -1792,6 +1770,7 @@ Entry.iboard.getBlocks = function() { ], }, }, + ////////////////////////////////////////////////////////////////////////////////////// iboard_tone_list: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, @@ -2113,6 +2092,7 @@ Entry.iboard.getBlocks = function() { ], }, }, + ///////////////////////////////////////////////////////////////////////// iboard_set_servo: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE,