<project name="piezoDrum.xml" app="Snap! 12.1.3, https://snap.berkeley.edu" version="2"><notes></notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAADxElEQVR4AeyXMW4qMRRFrSyFgpaGZdAg6NgHe2AhdCAalkFDjcRW/hdIE+l/yTMTHI+vfU+kaJLxjP3uuUeJ+PrDFwQKEvgKfEGgIAEELAifo0NAQCwoSgABi+LncATEgaIEfAUsip3DOwII2JHgWoQAAhbBzqEdAQTsSHAtQgABi2Dn0I4AAnYkuBYhgIBFsBc9VOpwBJSqw28YBPTrXCoxAkrV4TcMAvp1LpUYAaXq8BsGAf06l0o8qYBSyRlGggACStTgOwQC+nYvkRwBJWrwHQIBfbuXSI6AEjX4DoGAk3TPITECCBgjw/1JCCDgJJg5JEYAAWNkuD8JAQScBDOHxAggYIwM9ychgICTYPY9ZCg5Ag4RYj0rAQTMipfNhwgg4BAh1rMSQMCseNl8iAACDhFiPSsBBMyKl82HCLQr4FBy1iUIIKBEDb5DIKBv9xLJEVCiBt8hENC3e4nkCChRg+8QCNhe91UlQsCq6mpvWARsr9OqEiFgVXW1NywCttdpVYkQsKq62hsWAdvrtKpEvypgVckZVoIAAkrU4DsEAvp2L5EcASVq8B0CAX27l0iOgBI1+A6BgJHul8tlOB6PkdX/b/P7pwQQMELudruF0+kU1uv1+3uxWITH4xF5mtufEkDAHnKXy+V7dTabhf1+/5Zxs9mE1Wr1vcYPnxNAwM/Z8eYvEEDAHoivf7/d8vP5DIfDIbz+Kp7P53C9XrslrgkEEDAC7/UhZLvdvoV7SXe/38N8Po88ze1PCSBghNzrQ8hut4uscrsjkHpFwFSCvJ9EAAGT8PFyKgEETCXI+0kEEDAJHy+nEkDAVIK8n0QAAZPw8XIqgXoFTE3O+xIEEFCiBt8hENC3e4nkCChRg+8QCOjbvURyBJSowXcIBKyv+6YmRsCm6qwvDALW11lTEyNgU3XWFwYB6+usqYkRsKk66wuDgPV11tTEPxKwqeSEkSCAgBI1+A6BgL7dSyRHQIkafIdAQN/uJZIjoEQNvkMg4KjueSgXAQTMRZZ9RxFAwFGYeCgXAQTMRZZ9RxFAwFGYeCgXAQTMRZZ9RxFAwFGYfB/KnRwBcxNm/14CCNiLh8XcBBAwN2H27yWAgL14WMxNAAFzE2b/XgII2IuHxdwEdAXMnZz9JQggoEQNvkMgoG/3EskRUKIG3yEQ0Ld7ieQIKFGD7xAIqNe91UQIaFW3XlgE1OvEaiIEtKpbLywC6nViNRECWtWtFxYB9TqxmugfAa2SE1aCAAJK1OA7BAL6di+RHAElavAdAgF9u5dI/hcAAP//kFEqigAAAAZJREFUAwDw+KiPkAr38QAAAABJRU5ErkJggg==</thumbnail><scenes select="1"><scene name="piezoDrum.xml"><notes></notes><palette><category name="ebrain" color="245,0,210,1"/><category name="Stepper Robot" color="255,38,20,1"/></palette><hidden></hidden><headers></headers><code></code><blocks><block-definition s="addJS %&apos;JS_FILE&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>JS_FILE</l></list><l>var po = document.createElement(&apos;script&apos;);&#xD;  po.type = &apos;text/javascript&apos;;&#xD;  po.async = true;&#xD;  po.innerHTML = JS_FILE;&#xD;  var s = document.getElementsByTagName(&apos;script&apos;)[0];&#xD;  s.parentNode.insertBefore(po, s)</l></block><list><block var="JS_FILE"/></list></block></script></block-definition><block-definition s="listify %&apos;jsonString&apos;" type="reporter" category="operators"><header></header><code></code><translations>pt:os dados JSON _ em formato de lista&#xD;</translations><inputs><input type="%mlt"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>jsonString</l></list><l>return listify(JSON.parse(jsonString));&#xD;&#xD;function listify(jsonObject) {&#xD;  if (jsonObject instanceof Array) {&#xD;    return new List(jsonObject.map(function(eachElement) { return listify(eachElement)}));&#xD;  } else if (jsonObject instanceof Object) {&#xD;    return new List(Object.keys(jsonObject).map(function(eachKey) { return new List([eachKey,listify(jsonObject[eachKey])])} ))&#xD;  } else {&#xD;    return jsonObject&#xD;  }&#xD;}</l></block><list><block var="jsonString"/></list></block></block></script></block-definition><block-definition s="value at key %&apos;key&apos; of %&apos;lst&apos;" type="reporter" category="operators"><header></header><code></code><translations>pt:o valor com chave _ em _&#xD;</translations><inputs><input type="%s"></input><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doForEach"><l>each item</l><block var="lst"/><script><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportListItem"><l>1</l><block var="each item"/></block><block var="key"/></list></block><script><block s="doReport"><block s="reportListItem"><l>2</l><block var="each item"/></block></block></script><list></list></block></script></block></script></block><block s="doReport"><l></l></block></script></block-definition><block-definition s="key: %&apos;key&apos; value: %&apos;value&apos;" type="reporter" category="operators"><header></header><code></code><translations>pt:um par (chave: _ , valor: _ )&#xD;</translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block var="key"/><block var="value"/></list></block></block></script></block-definition><block-definition s="fetch %&apos;url&apos; %&apos;data&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><custom-block s="create %s var %mult%txt"><l>sprite</l><list><l>response</l></list></custom-block><block s="doRun"><block s="reportJSFunction"><list><l>url</l><l>proc</l></list><l>//Fetches data as a promise , on compleation saves to varable as text.&#xD;//if ((typeof varName) != "string") {&#xD;if ((typeof "response") != "string") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;&#xD;fetch(url)&#xD;  .then(response =&gt; response.json())&#xD;  .then(data =&gt; proc.homeContext.variables.setVar("response", JSON.stringify(data)));&#xD;&#xD;console.log(proc.homeContext.variables.allNames())</l></block><list><block var="url"/></list></block><block s="doWait"><l>0.2</l></block><block s="doReport"><block var="response"/></block></script></block-definition><block-definition s="%&apos;method&apos; url: %&apos;url&apos; send: %&apos;payload&apos; headers: %&apos;headers&apos;" type="reporter" category="sensing"><header></header><code></code><translations>pt:a resposta a _ de _ enviando _ e cabeçalhos _&#xD;</translations><inputs><input type="%s" readonly="true">GET<options>GET&#xD;POST&#xD;PUT&#xD;DELETE</options></input><input type="%s">https://snap.berkeley.edu</input><input type="%s"></input><input type="%mult%l" readonly="true"></input></inputs><script><custom-block s="create %s var %mult%txt"><l>sprite</l><list><l>response</l></list></custom-block><block s="doRun"><block s="reportJSFunction"><list><l>chosen_method</l><l>url</l><l>payload</l><l>headers</l><l>proc</l></list><l>console.log(chosen_method)&#xD;&#xD;payload = JSON.parse(payload);&#xD;&#xD;if (chosen_method == "GET") {&#xD;    fetch(url, {&#xD;            method: chosen_method&#xD;        })&#xD;        .then(response =&gt; response.json())&#xD;        .then(data =&gt; proc.homeContext.variables.setVar("response", JSON.stringify(data)))&#xD;} else if (chosen_method == "POST") {&#xD;    fetch(url, {&#xD;            method: chosen_method,&#xD;            headers: {&#xD;                &apos;Content-Type&apos;: &apos;application/json&apos;,&#xD;            },&#xD;            body: JSON.stringify(payload)&#xD;        })&#xD;        .then(response =&gt; response.json())&#xD;        .then(data =&gt; proc.homeContext.variables.setVar("response", JSON.stringify(data)))&#xD;}</l></block><list><block var="method"/><block var="url"/><block var="payload"/><block var="headers"/></list></block><block s="doWait"><l>0.5</l></block><block s="doReport"><block var="response"/></block></script></block-definition><block-definition s="Digital Write Pin: %&apos;ARG&apos; %&apos;on/off&apos;" type="command" category="ebrain"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1">4<options>4&#xD;5&#xD;10&#xD;16&#xD;14&#xD;12&#xD;13&#xD;0&#xD;2</options></input><input type="%b" initial="1">true</input></inputs><script><custom-block s="cmd %s args %s"><l>digital_write</l><block s="reportJoinWords"><list><l>{"pin":</l><block var="ARG"/><l>, "value":</l><block var="on/off"/><l>}</l></list></block></custom-block></script></block-definition><block-definition s="Digital Read Pin: %&apos;pin&apos;" type="reporter" category="ebrain"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1">4<options>4&#xD;5&#xD;10&#xD;16&#xD;14&#xD;12&#xD;13&#xD;0&#xD;2</options></input></inputs><script><block s="doReport"><custom-block s="cmd %s args %s rtn %s"><l>digital_read</l><block s="reportJoinWords"><list><l>{"pin": </l><block var="pin"/><l>}</l></list></block><l>value</l></custom-block></block></script></block-definition><block-definition s="Analog Input" type="reporter" category="ebrain"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>cmd</l></list><l>snapBlocking = 0; &#xD;eb.send_msg({&apos;cmd&apos;:cmd},function(msg){&#xD;  snapBlocking = 1; &#xD;  ebMSG = msg.value;&#xD;});</l></block><list><l>analog_read</l></list><comment w="90" collapsed="false">Anlog Read is non-Blocking, and will report old value until a new one comes in</comment></block><block s="doWaitUntil"><block s="evaluate"><block s="reportJSFunction"><list><l></l></list><l>return snapBlocking;</l></block><list></list></block><comment w="90" collapsed="false">add this befor the Report command to make Anlalog Read wait for new data before reporting</comment></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l></l></list><l>return ebMSG;</l></block><list></list></block></block></script></block-definition><block-definition s="PWM Write Pin: %&apos;ARG&apos; Value %&apos;value&apos;" type="command" category="ebrain" space="true"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1">4<options>4&#xD;5&#xD;10&#xD;16&#xD;14&#xD;12&#xD;13&#xD;0&#xD;2</options></input><input type="%n" initial="1">128</input></inputs><script><custom-block s="cmd %s args %s"><l>pwm_write</l><block s="reportJoinWords"><list><l>{"pin":</l><block var="ARG"/><l>, "value":</l><block var="value"/><l>}</l></list></block></custom-block></script></block-definition><block-definition s="create %&apos;scope&apos; var %&apos;names&apos;" type="command" category="variables"><comment x="0" y="0" w="146" collapsed="false">This block creates  new variables on the selected scope: global (for all sprites), sprite (for this sprite only) or script (only for that blocks stack) with the names given (in &apos;names&apos; list).&#xD;&#xD;If there is already a variable with that name in that scope, it does nothing: no errors and no overwrites.</comment><header></header><code></code><translations>pt:cria as variáveis _ _&#xD;ca:crea les _ variables _&#xD;es:crear las _ variables _&#xD;de:erstellen _ var _&#xD;</translations><inputs><input type="%s" readonly="true">global<options>global&#xD;sprite&#xD;script</options></input><input type="%mult%txt"></input></inputs><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="scope"/><l>script</l></list></block><script><block s="doForEach"><l>each item</l><block var="names"/><script><block s="doRun"><block s="reportJSFunction"><list><l>varName</l><l>proc</l></list><l>if ((typeof varName) != "string" || varName === "") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;if (!proc.homeContext.variables.vars[varName]) proc.homeContext.variables.addVar(varName);</l></block><list><block var="each item"/></list></block></script></block></script><script><block s="doDeclareVariables"><list><l>global</l></list></block><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="scope"/><l>sprite</l></list></block><script><block s="doSetVar"><l>global</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><script><block s="doSetVar"><l>global</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doForEach"><l>each item</l><block var="names"/><script><block s="doRun"><block s="reportJSFunction"><list><l>varName</l><l>global</l><l>proc</l></list><l>if ((typeof varName) != "string" || varName === "") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;if (global &amp;&amp; !proc.homeContext.variables.parentFrame.parentFrame.vars[varName]) this.addVariable(varName, true);&#xD;if (!global &amp;&amp; !proc.homeContext.variables.parentFrame.vars[varName]) this.addVariable(varName, false);</l></block><list><block var="each item"/><block var="global"/></list></block></script></block><block s="doRun"><block s="reportJSFunction"><list></list><l>var ide = this.parentThatIsA(IDE_Morph);&#xD;ide.flushBlocksCache(&apos;variables&apos;); // b/c of inheritance&#xD;ide.refreshPalette();</l></block><list></list></block></script></block></script></block-definition><block-definition s="cmd %&apos;cmd&apos; args %&apos;args&apos; rtn %&apos;rtn&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1"></input><input type="%s" initial="1"></input><input type="%s" initial="1"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>cmd</l><l>args</l><l>rtn</l></list><l>snapBlocking = 0;&#xD;&#xD;eb.send_msg(makeCommand(cmd, args),function(msg){&#xD;  snapBlocking = 1; &#xD;  ebMSG = msg[rtn];&#xD;});</l></block><list><block var="cmd"/><block var="args"/><block var="rtn"/></list></block><block s="doWaitUntil"><block s="evaluate"><block s="reportJSFunction"><list><l></l></list><l>return snapBlocking;</l></block><list></list></block></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l></l></list><l>return ebMSG;</l></block><list></list></block></block></script></block-definition><block-definition s="cmd %&apos;cmd&apos; args %&apos;args&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1"></input><input type="%s" initial="1"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>cmd</l><l>args</l></list><l>eb.send_msg(makeCommand(cmd, args),function(msg){&#xD;});</l></block><list><block var="cmd"/><block var="args"/></list></block></script></block-definition><block-definition s="Beep Pin: %&apos;ARG&apos; Frequency %&apos;value&apos; Duration %&apos;duration&apos;" type="command" category="ebrain"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1">4<options>4&#xD;5&#xD;10&#xD;16&#xD;14&#xD;12&#xD;13&#xD;0&#xD;2</options></input><input type="%n" initial="1">440</input><input type="%s" initial="1">500</input></inputs><script><custom-block s="cmd %s args %s"><l>beep</l><block s="reportJoinWords"><list><l>{"pin":</l><block var="ARG"/><l>, "frequency":</l><block var="value"/><l>,"duration":</l><block var="duration"/><l>}</l></list></block></custom-block><block s="doWait"><block s="reportVariadicProduct"><list><block var="duration"/><l>0.001</l></list></block></block></script></block-definition><block-definition s="Ultrasonic Distance Trig: %&apos;Trig&apos; Echo %&apos;Echo&apos;" type="reporter" category="ebrain" space="true"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1">4<options>4&#xD;5&#xD;16&#xD;14&#xD;12&#xD;13&#xD;0&#xD;2</options></input><input type="%n" initial="1">5<options>4&#xD;5&#xD;16&#xD;14&#xD;12&#xD;13&#xD;0&#xD;2</options></input></inputs><script><block s="doReport"><custom-block s="cmd %s args %s rtn %s"><l>ultrasonic_distance</l><block s="reportJoinWords"><list><l>{"trig_pin": </l><block var="Trig"/><l>,"echo_pin":</l><block var="Echo"/><l>}</l></list></block><l>distance_cm</l></custom-block></block></script></block-definition><block-definition s="Temperature Sensor Pin %&apos;pin&apos;" type="reporter" category="ebrain" space="true"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" initial="1">5<options>4&#xD;5&#xD;16&#xD;14&#xD;12&#xD;13&#xD;0&#xD;2</options></input></inputs><script><block s="doReport"><custom-block s="cmd %s args %s rtn %s"><l>dht11_read</l><block s="reportJoinWords"><list><l>{"pin": </l><block var="pin"/><l>}</l></list></block><l>temperature</l></custom-block></block></script></block-definition><block-definition s="Humidity Sensor Pin %&apos;pin&apos;" type="reporter" category="ebrain"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" initial="1">5<options>4&#xD;5&#xD;16&#xD;14&#xD;12&#xD;13&#xD;0&#xD;2</options></input></inputs><script><block s="doReport"><custom-block s="cmd %s args %s rtn %s"><l>dht11_read</l><block s="reportJoinWords"><list><l>{"pin": </l><block var="pin"/><l>}</l></list></block><l>humidity</l></custom-block></block></script></block-definition><block-definition s="Stepper Motor: %&apos;Motor&apos; Steps: %&apos;Steps&apos; Direction %&apos;Direction&apos;" type="command" category="ebrain" space="true"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" initial="1">1<options>0&#xD;1</options></input><input type="%n" initial="1">100</input><input type="%s" readonly="true" initial="1">0<options>0&#xD;1</options></input></inputs><script><custom-block s="cmd %s args %s"><l>stepper_turn</l><block s="reportJoinWords"><list><l>{"motor":</l><block var="Motor"/><l>, "steps":</l><block var="Steps"/><l>,"direction":</l><block var="Direction"/><l>}</l></list></block></custom-block></script></block-definition><block-definition s="Multi Stepper Steps: %&apos;Steps 1&apos; %&apos;Direction 1&apos; // Steps: %&apos;Steps 2&apos; %&apos;Direction 2&apos;" type="command" category="ebrain"><header></header><code></code><translations></translations><inputs><input type="%n" initial="1">100</input><input type="%n" readonly="true" initial="1">0<options>0&#xD;1</options></input><input type="%n" initial="1">100</input><input type="%n" readonly="true" initial="1">1<options>0&#xD;1</options></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>cmd</l><l>args</l></list><l>snapBlocking = 0;&#xD;&#xD;eb.send_msg(makeCommand(cmd, args),function(msg){&#xD;console.log(msg.msg);&#xD;snapBlocking = 1; &#xD;});</l></block><list><l>stepper_turn_multi</l><block s="reportJoinWords"><list><l>{"motors":[{"motor":0,"steps":</l><block var="Steps 1"/><l>,"direction":</l><block var="Direction 1"/><l>},{"motor":1,"steps":</l><l></l><block var="Steps 2"/><l>,"direction":</l><block var="Direction 2"/><l>}]}</l></list></block></list></block><block s="doWaitUntil"><block s="evaluate"><block s="reportJSFunction"><list><l></l></list><l>return snapBlocking;</l></block><list></list></block></block></script></block-definition><block-definition s="Servo Type: %&apos;type&apos; Pin: %&apos;ARG&apos; Value %&apos;value&apos;" type="command" category="ebrain" space="true"><header></header><code></code><translations></translations><inputs><input type="%txt" readonly="true" initial="1">regular<options>regular&#xD;continuous</options></input><input type="%s" readonly="true" initial="1">16<options>4&#xD;5&#xD;16&#xD;14&#xD;12&#xD;13&#xD;0&#xD;2&#xD;15</options></input><input type="%n" initial="1">90</input></inputs><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="type"/><l>regular</l></list></block><script><custom-block s="cmd %s args %s"><l>regular_servo</l><block s="reportJoinWords"><list><l>{"pin":</l><block var="ARG"/><l>, "angle":</l><block var="value"/><l>}</l></list></block></custom-block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="type"/><l>continuous</l></list></block><script><custom-block s="cmd %s args %s"><l>continuous_servo</l><block s="reportJoinWords"><list><l>{"pin":</l><block var="ARG"/><l>, "speed":</l><block var="value"/><l>}</l></list></block></custom-block></script><list></list></block></script></block-definition><block-definition s="Multi Servo %&apos;type&apos; Pin: %&apos;ARG&apos; Value %&apos;value&apos; // Pin: %&apos;pin&apos; Value: %&apos;angle&apos;" type="command" category="ebrain"><header></header><code></code><translations></translations><inputs><input type="%txt" readonly="true" initial="1">regular<options>regular&#xD;continuous</options></input><input type="%s" readonly="true" initial="1">16<options>4&#xD;5&#xD;16&#xD;14&#xD;12&#xD;13&#xD;0&#xD;2&#xD;15</options></input><input type="%n" initial="1">90</input><input type="%s" readonly="true" initial="1">15<options>4&#xD;5&#xD;16&#xD;14&#xD;12&#xD;13&#xD;0&#xD;2&#xD;15</options></input><input type="%n" initial="1">90</input></inputs><script><custom-block s="cmd %s args %s"><l>move_servos</l><block s="reportJoinWords"><list><l>{"servos": [{"mode": "regular","pin":</l><block var="ARG"/><l>, "angle":</l><block var="value"/><l>},{"mode": "regular","pin":</l><block var="pin"/><l>, "angle":</l><block var="angle"/><l>}]}</l></list></block></custom-block></script></block-definition><block-definition s="Forward %&apos;steps&apos; mm" type="command" category="Stepper Robot"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1">100</input></inputs><script><custom-block s="Multi Stepper Steps: %n %n // Steps: %n %n"><block var="steps"/><l>1</l><block var="steps"/><l>0</l></custom-block></script></block-definition><block-definition s="Back %&apos;steps&apos; mm" type="command" category="Stepper Robot"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1">100</input></inputs><script><custom-block s="Multi Stepper Steps: %n %n // Steps: %n %n"><block var="steps"/><l>0</l><block var="steps"/><l>1</l></custom-block></script></block-definition><block-definition s="Right %&apos;deg&apos; Degrees" type="command" category="Stepper Robot"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1">90</input></inputs><script><custom-block s="Multi Stepper Steps: %n %n // Steps: %n %n"><block var="deg"/><l>1</l><block var="deg"/><l>1</l></custom-block></script></block-definition><block-definition s="Left %&apos;deg&apos; Degrees" type="command" category="Stepper Robot"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1">90</input></inputs><script><custom-block s="Multi Stepper Steps: %n %n // Steps: %n %n"><block var="deg"/><l>0</l><block var="deg"/><l>0</l></custom-block></script></block-definition><block-definition s="Network Mode(On/Off): %&apos;onOff&apos; Refresh Time (ms): %&apos;time&apos; Server (URL): %&apos;url&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%b" initial="1">true</input><input type="%n" initial="1">15000</input><input type="%txt" initial="1">https://www.bendouek.com/esp_hub.php</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>mode</l><l>time</l><l>url</l></list><l>eb.send_msg({&#xD;  "cmd": "update_settings",&#xD;  "server_endpoint": url,&#xD;  "refresh_ms": time,&#xD;  "postingMode": mode&#xD;},function(msg){&#xD;});</l></block><list><block var="onOff"/><block var="time"/><block var="url"/></list></block></script></block-definition><block-definition s="Send (CMD): %&apos;cmd&apos; To (MAC): %&apos;mac&apos; await response" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1">{&#xD;"cmd": "version"&#xD;}</input><input type="%s" initial="1"></input></inputs><script><block s="doSetVar"><l>response</l><custom-block s="value at key %s of %l"><l>command_id</l><custom-block s="listify %mlt"><custom-block s="%s url: %s send: %s headers: %mult%l"><l>POST</l><block s="reportJoinWords"><list><l>https://bendouek.com/esp_hub.php?action=command&amp;mac=</l><block var="mac"/></list></block><block var="cmd"/><list></list></custom-block></custom-block></custom-block></block><block s="doUntil"><block s="reportVariadicEquals"><list><block var="response"/><custom-block s="value at key %s of %l"><l>id</l><custom-block s="value at key %s of %l"><l>ack</l><custom-block s="listify %mlt"><custom-block s="Get ACK of Robot (MAC): %s"><block var="mac"/></custom-block></custom-block></custom-block></custom-block></list></block><script></script></block><block s="doReport"><custom-block s="value at key %s of %l"><l>response</l><custom-block s="value at key %s of %l"><l>result</l><custom-block s="value at key %s of %l"><l>ack</l><custom-block s="listify %mlt"><custom-block s="Get ACK of Robot (MAC): %s"><block var="mac"/></custom-block></custom-block></custom-block></custom-block></custom-block></block></script></block-definition><block-definition s="Send (CMD): %&apos;cmd&apos; To (MAC): %&apos;mac&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1">{&#xD; "cmd": "digital_write",&#xD; "pin": 4,&#xD; "value": 1&#xD;}</input><input type="%s" initial="1"></input></inputs><script><block s="doReport"><custom-block s="%s url: %s send: %s headers: %mult%l"><l>POST</l><block s="reportJoinWords"><list><l>https://bendouek.com/esp_hub.php?action=command&amp;mac=</l><block var="mac"/></list></block><block var="cmd"/><list></list></custom-block></block></script></block-definition><block-definition s="Get Status of Robot (MAC): %&apos;mac&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1"></input></inputs><script><block s="doReport"><block s="reportURL"><block s="reportJoinWords"><list><l>https://bendouek.com/esp_hub.php?action=latest_report&amp;mac=</l><block var="mac"/></list></block></block></block></script></block-definition><block-definition s="Get ACK of Robot (MAC): %&apos;mac&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1"></input></inputs><script><block s="doReport"><block s="reportURL"><block s="reportJoinWords"><list><l>https://bendouek.com/esp_hub.php?action=ack_status&amp;mac=</l><block var="mac"/></list></block></block></block></script></block-definition><block-definition s="Analog Value (MAC): %&apos;mac&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1"></input></inputs><script><block s="doReport"><custom-block s="value at key %s of %l"><l>A0</l><custom-block s="value at key %s of %l"><l>analog</l><custom-block s="value at key %s of %l"><l>report</l><custom-block s="value at key %s of %l"><l>data</l><custom-block s="listify %mlt"><custom-block s="Get Status of Robot (MAC): %s"><block var="mac"/></custom-block></custom-block></custom-block></custom-block></custom-block></custom-block></block></script></block-definition></blocks><primitives></primitives><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="665"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAQAElEQVR4AezVC27kNhAEUCP3P3SC/NZeez6SSDWb9YJg1zsjkV2vDdQfH/4jQIAAAQIEbhdQwLeTu5AAAQIECHx8ZBew3wACBAgQIFAkoICL4F1LgAABAtkCCjh3/5ITIECAQKGAAi7EdzUBAgQI5Aoo4NzdZyeXngABAsUCCrh4Aa4nQIAAgUwBBZy5d6mzBaQnQGABAQW8wBKMQIAAAQJ5Ago4b+cSE8gWkJ7AIgIKeJFFGIMAAQIEsgQUcNa+pSVAIFtA+oUEFPBCyzAKAQIECOQIKOCcXUtKgACBbIHF0ivgxRZiHAIECBDIEFDAGXuWkgABAgQWE7i5gBdLbxwCBAgQIFAkoICL4F1LgAABAtkCCvjG/buKAAECBAj8J6CA/5PwNwECBAgQuFFAAd+InX2V9AQIECDwWUABf9bwMwECBAgQuElAAd8E7ZpsAekJECDwu4AC/l3EvwkQIECAwA0CCvgGZFcQyBaQngCBnwQU8E8qPiNAgAABApMFFPBkYMcTIJAtID2BRwIK+JGMzwkQIECAwEQBBTwR19EECBDIFpD+mYACfqbjOwIECBAgMElAAU+CdSwBAgQIZAu8Sq+AXwn5ngABAgQITBBQwBNQHUmAAAECBF4J7F3Ar9L7ngABAgQIFAko4CJ41xIgQIBAtoAC3nf/khEgQIDAwgIKeOHlGI0AAQIE9hVQwPvuNjuZ9AQIEFhcQAEvviDjESBAgMCeAgp4z71KlS0gPQECDQQUcIMlGZEAAQIE9hNQwPvtVCIC2QLSE2gioICbLMqYBAgQILCXgALea5/SECCQLSB9IwEF3GhZRiVAgACBfQQU8D67lIQAAQLZAs3SK+BmCzMuAQIECOwhoID32KMUBAgQINBMYHABN0tvXAIECBAgUCSggIvgXUuAAAEC2QIKeOD+HUWAAAECBN4VUMDvSnmOAAECBAgMFFDAAzGzj5KeAAECBI4IKOAjWp4lQIAAAQKDBBTwIEjHZAtIT4AAgaMCCviomOcJECBAgMAAAQU8ANERBLIFpCdA4IyAAj6j5h0CBAgQIHBRQAFfBPQ6AQLZAtITOCuggM/KeY8AAQIECFwQUMAX8LxKgACBbAHprwgo4Ct63iVAgAABAicFFPBJOK8RIECAQLbA1fQK+Kqg9wkQIECAwAkBBXwCzSsECBAgQOCqQO8Cvpre+wQIECBAoEhAARfBu5YAAQIEsgUUcN/9m5wAAQIEGgso4MbLMzoBAgQI9BVQwH13lz259AQIEGguoICbL9D4BAgQINBTQAH33JupswWkJ0BgAwEFvMESRSBAgACBfgIKuN/OTEwgW0B6ApsIKOBNFikGAQIECPQSUMC99mVaAgSyBaTfSEABb7RMUQgQIECgj4AC7rMrkxIgQCBbYLP0CnizhYpDgAABAj0EFHCPPZmSAAECBDYTOFjAm6UXhwABAgQIFAko4CJ41xIgQIBAtoACPrB/jxIgQIAAgVECCniUpHMIECBAgMABAQV8ACv7UekJECBAYKSAAh6p6SwCBAgQIPCmgAJ+E8pj2QLSEyBAYLSAAh4t6jwCBAgQIPCGgAJ+A8kjBLIFpCdAYIaAAp6h6kwCBAgQIPBCQAG/API1AQLZAtITmCWggGfJOpcAAQIECDwRUMBPcHxFgACBbAHpZwoo4Jm6ziZAgAABAg8EFPADGB8TIECAQLbA7PQKeLaw8wkQIECAwA8CCvgHFB8RIECAAIHZAmsX8Oz0zidAgAABAkUCCrgI3rUECBAgkC2ggNfdv8kIECBAYGMBBbzxckUjQIAAgXUFFPC6u8meTHoCBAhsLqCAN1+weAQIECCwpoACXnMvpsoWkJ4AgQABBRywZBEJECBAYD0BBbzeTkxEIFtAegIhAgo4ZNFiEiBAgMBaAgp4rX2YhgCBbAHpgwQUcNCyRSVAgACBdQQU8Dq7MAkBAgSyBcLSK+CwhYtLgAABAmsIKOA19mAKAgQIEAgT+K2Aw9KLS4AAAQIEigQUcBG8awkQIEAgW0ABf9q/HwkQIECAwF0CCvguafcQIECAAIFPAgr4E0b2j9ITIECAwJ0CCvhObXcRIECAAIF/BRTwvxD+yhaQngABAncLKOC7xd1HgAABAgT+ElDAfyH4n0C2gPQECFQIKOAKdXcSIECAQLyAAo7/FQBAIFtAegJVAgq4St69BAgQIBAtoICj1y88AQLZAtJXCijgSn13EyBAgECsgAKOXb3gBAgQyBaoTq+AqzfgfgIECBCIFFDAkWsXmgABAgSqBWoLuDq9+wkQIECAQJGAAi6Cdy0BAgQIZAso4Lr9u5kAAQIEggUUcPDyRSdAgACBOgEFXGeffbP0BAgQCBdQwOG/AOITIECAQI2AAq5xd2u2gPQECBD4UMB+CQgQIECAQIGAAi5AdyWBaAHhCRD4W0AB/83gDwIECBAgcK+AAr7X220ECGQLSE/gfwEF/D+FHwgQIECAwH0CCvg+azcRIEAgW0D6LwIK+AuHfxAgQIAAgXsEFPA9zm4hQIAAgWyBb+kV8DcSHxAgQIAAgfkCCni+sRsIECBAgMA3gagC/pbeBwQIECBAoEhAARfBu5YAAQIEsgUUcMz+BSVAgACBlQQU8ErbMAsBAgQIxAgo4JhVZweVngABAqsJKODVNmIeAgQIEIgQUMARaxYyW0B6AgRWFFDAK27FTAQIECCwvYAC3n7FAhLIFpCewKoCCnjVzZiLAAECBLYWUMBbr1c4AgSyBaRfWUABr7wdsxEgQIDAtgIKeNvVCkaAAIFsgdXTK+DVN2Q+AgQIENhSQAFvuVahCBAgQGB1gbkFvHp68xEgQIAAgSIBBVwE71oCBAgQyBZQwPP272QCBAgQIPBQQAE/pPEFAQIECBCYJ6CA59lmnyw9AQIECDwVUMBPeXxJgAABAgTmCCjgOa5OzRaQngABAi8FFPBLIg8QIECAAIHxAgp4vKkTCWQLSE+AwFsCCvgtJg8RIECAAIGxAgp4rKfTCBDIFpCewNsCCvhtKg8SIECAAIFxAgp4nKWTCBAgkC0g/SEBBXyIy8MECBAgQGCMgAIe4+gUAgQIEMgWOJxeAR8m8wIBAgQIELguoICvGzqBAAECBAgcFtiqgA+n9wIBAgQIECgSUMBF8K4lQIAAgWwBBbzN/gUhQIAAgU4CCrjTtsxKgAABAtsIKOBtVpkdRHoCBAh0E1DA3TZmXgIECBDYQkABb7FGIbIFpCdAoKOAAu64NTMTIECAQHsBBdx+hQIQyBaQnkBXAQXcdXPmJkCAAIHWAgq49foMT4BAtoD0nQUUcOftmZ0AAQIE2goo4LarMzgBAgSyBbqnV8DdN2h+AgQIEGgpoIBbrs3QBAgQINBd4FoBd09vfgIECBAgUCSggIvgXUuAAAEC2QIK+Pz+vUmAAAECBE4LKODTdF4kQIAAAQLnBRTwebvsN6UnQIAAgUsCCvgSn5cJECBAgMA5AQV8zs1b2QLSEyBA4LKAAr5M6AACBAgQIHBcQAEfN/MGgWwB6QkQGCKggIcwOoQAAQIECBwTUMDHvDxNgEC2gPQEhgko4GGUDiJAgAABAu8LKOD3rTxJgACBbAHphwoo4KGcDiNAgAABAu8JKOD3nDxFgAABAtkCw9Mr4OGkDiRAgAABAq8FFPBrI08QIECAAIHhAq0KeHh6BxIgQIAAgSIBBVwE71oCBAgQyBZQwG32b1ACBAgQ2ElAAe+0TVkIECBAoI2AAm6zquxBpSdAgMBuAgp4t43KQ4AAAQItBBRwizUZMltAegIEdhRQwDtuVSYCBAgQWF5AAS+/IgMSyBaQnsCuAgp4183KRYAAAQJLCyjgpddjOAIEsgWk31lAAe+8XdkIECBAYFkBBbzsagxGgACBbIHd0yvg3TcsHwECBAgsKaCAl1yLoQgQIEBgd4HnBbx7evkIECBAgECRgAIugnctAQIECGQLKODH+/cNAQIECBCYJqCAp9E6mAABAgQIPBZQwI9tsr+RngABAgSmCijgqbwOJ0CAAAECPwso4J9dfJotID0BAgSmCyjg6cQuIECAAAEC3wUU8HcTnxDIFpCeAIFbBBTwLcwuIUCAAAECXwUU8FcP/yJAIFtAegK3CSjg26hdRIAAAQIEfgko4F8WfiJAgEC2gPS3CijgW7ldRoAAAQIE/hFQwP84+JMAAQIEsgVuT6+Abyd3IQECBAgQ+PhQwH4LCBAgQIBAgcBSBVyQ35UECBAgQKBEQAGXsLuUAAECBNIFFPAyvwEGIUCAAIEkAQWctG1ZCRAgQGAZAQW8zCqyB5GeAAECaQIKOG3j8hIgQIDAEgIKeIk1GCJbQHoCBBIFFHDi1mUmQIAAgXIBBVy+AgMQyBaQnkCqgAJO3bzcBAgQIFAqoIBL+V1OgEC2gPTJAgo4efuyEyBAgECZgAIuo3cxAQIEsgXS0yvg9N8A+QkQIECgREABl7C7lAABAgSyBT4+FHD6b4D8BAgQIFAioIBL2F1KgAABAukCyQWcvnv5CRAgQKBQQAEX4ruaAAECBHIFFHDq7uUmQIAAgVIBBVzK73ICBAgQSBVQwKmbz84tPQECBMoFFHD5CgxAgAABAokCCjhx6zJnC0hPgMASAgp4iTUYggABAgTSBBRw2sblJZAtID2BZQQU8DKrMAgBAgQIJAko4KRty0qAQLaA9EsJKOCl1mEYAgQIEEgRUMApm5aTAAEC2QLLpVfAy63EQAQIECCQIKCAE7YsIwECBAgsJ3BrAS+X3kAECBAgQKBIQAEXwbuWAAECBLIFFPBt+3cRAQIECBD4JaCAf1n4iQABAgQI3CaggG+jzr5IegIECBD4KqCAv3r4FwECBAgQuEVAAd/C7JJsAekJECDwXUABfzfxCQECBAgQmC6ggKcTu4BAtoD0BAj8LKCAf3bxKQECBAgQmCqggKfyOpwAgWwB6Qk8FlDAj218Q4AAAQIEpgko4Gm0DiZAgEC2gPTPBRTwcx/fEiBAgACBKQIKeAqrQwkQIEAgW+B1egX82sgTBAgQIEBguIACHk7qQAIECBAg8Fpg5wJ+nd4TBAgQIECgSEABF8G7lgABAgSyBRTwrvuXiwABAgSWFlDAS6/HcAQIECCwq4AC3nWz2bmkJ0CAwPICCnj5FRmQAAECBHYUUMA7blWmbAHpCRBoIaCAW6zJkAQIECCwm4AC3m2j8hDIFpCeQBsBBdxmVQYlQIAAgZ0EFPBO25SFAIFsAelbCSjgVusyLAECBAjsIqCAd9mkHAQIEMgWaJdeAbdbmYEJECBAYAcBBbzDFmUgQIAAgXYCQwu4XXoDEyBAgACBIgEFXATvWgIECBDIFlDAw/bvIAIECBAg8L6AAn7fypMECBAgQGCYgAIeRpl9kPQECBAgcExAAR/z8jQBAgQIEBgioICHMDokW0B6AgQIHBdQwMfNvEGAAAECBC4LKODLhA4gkC0gPQECv+uE6gAAAkNJREFU5wQU8Dk3bxEgQIAAgUsCCvgSn5cJEMgWkJ7AeQEFfN7OmwQIECBA4LSAAj5N50UCBAhkC0h/TUABX/PzNgECBAgQOCWggE+xeYkAAQIEsgWup1fA1w2dQIAAAQIEDgso4MNkXiBAgAABAtcFOhfw9fROIECAAAECRQIKuAjetQQIECCQLaCAu+7f3AQIECDQWkABt16f4QkQIECgq4AC7rq57LmlJ0CAQHsBBdx+hQIQIECAQEcBBdxxa2bOFpCeAIEtBBTwFmsUggABAgS6CSjgbhszL4FsAekJbCOggLdZpSAECBAg0ElAAXfallkJEMgWkH4rAQW81TqFIUCAAIEuAgq4y6bMSYAAgWyB7dIr4O1WKhABAgQIdBBQwB22ZEYCBAgQ2E7gUAFvl14gAgQIECBQJKCAi+BdS4AAAQLZAgr47f17kAABAgQIjBNQwOMsnUSAAAECBN4WUMBvU2U/KD0BAgQIjBVQwGM9nUaAAAECBN4SUMBvMXkoW0B6AgQIjBdQwONNnUiAAAECBF4KKOCXRB4gkC0gPQECcwQU8BxXpxIgQIAAgacCCvgpjy8JEMgWkJ7APAEFPM/WyQQIECBA4KGAAn5I4wsCBAhkC0g/V0ABz/V1OgECBAgQ+FFAAf/I4kMCBAgQyBaYn14Bzzd2AwECBAgQ+CaggL+R+IAAAQIECMwXWLmA56d3AwECBAgQKBJQwEXwriVAgACBbAEFvOr+zUWAAAECWwso4K3XKxwBAgQIrCrwJwAAAP//lVwoVAAAAAZJREFUAwDU5ALRcl29HAAAAABJRU5ErkJggg==</pentrails><costumes><list struct="atomic" id="666"></list></costumes><sounds><list struct="atomic" id="667"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="Sprite" idx="1" x="0" y="0" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="672"><costumes><list struct="atomic" id="673"></list></costumes><sounds><list struct="atomic" id="674"></list></sounds><blocks></blocks><variables><variable name="response"><l>cmd_1772035374_e648e8e9</l></variable></variables><scripts><script x="134.33333333333334" y="104.16666666666659"><block s="receiveGo"></block><block s="doForever"><script><block s="doIf"><block s="reportVariadicLessThan"><list><block s="reportAudio"><l><option>volume</option></l></block><l>0.2</l></list></block><script><block s="doPlayNote"><l>60</l><l>0.5</l></block></script><list></list></block><block s="doIf"><block s="reportVariadicAnd"><list><block s="reportVariadicGreaterThan"><list><block s="reportAudio"><l><option>volume</option></l></block><l>0.2</l></list></block><block s="reportVariadicLessThan"><list><block s="reportAudio"><l><option>volume</option></l></block><l>0.4</l></list></block></list></block><script><block s="doPlayNote"><l>70</l><l>0.5</l></block></script><list></list></block><block s="doIf"><block s="reportVariadicGreaterThan"><list><block s="reportAudio"><l><option>volume</option></l></block><l>0.4</l></list></block><script><block s="doPlayNote"><l>80</l><l>0.5</l></block></script><list></list></block></script></block></script></scripts></sprite></sprites></stage><variables></variables></scene></scenes></project>