<snapdata remixID="10340226"><project name="Graphing with Finch" app="Snap! 6, https://snap.berkeley.edu" version="1"><notes></notes><thumbnail>data:image/png;base64,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</thumbnail><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="true" hyperops="true" codify="false" inheritance="false" sublistIDs="false" scheduled="false" id="1"><pentrails>data:image/png;base64,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</pentrails><costumes><list struct="atomic" id="2"></list></costumes><sounds><list struct="atomic" id="3"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites><sprite name="Sprite(2)" idx="1" x="248.00000000040768" y="84" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="0,232.05,176.35800000000006,1" pen="tip" id="8"><costumes><list struct="atomic" id="9"></list></costumes><sounds><list struct="atomic" id="10"></list></sounds><blocks></blocks><variables></variables><scripts><script x="26" y="23"><block s="receiveKey"><l><option>space</option></l></block><block s="up"></block><block s="clear"></block><block s="gotoXY"><l>-200</l><l>0</l></block><block s="down"></block><block s="doForever"><script><block s="setYPosition"><block s="reportProduct"><custom-block s="Finch Left Light Sensor"></custom-block><l>2</l></block></block><block s="changeXPosition"><l>.5</l></block></script></block></script></scripts></sprite><watcher scope="Stage" s="getLastAnswer" style="normal" x="0.15625" y="1.7968751562500103" color="4,148,220" hidden="true"/><watcher s="getScale" style="normal" x="0.15625" y="2.1250001874999924" color="143,86,227" hidden="true"/></sprites></stage><hidden></hidden><headers></headers><code></code><blocks><block-definition s="Say This %&apos;speech&apos;" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%txt">I am known by many names, but you may call me...Tim.</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>phrase</l></list><l>finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;var report = { message: "SPEAK", val: phrase};&#xD;chrome.runtime.sendMessage(finchAppID, report, function() {});</l></block><list><block var="speech"/></list></block></script></block-definition><block-definition s="Move Finch Left: %&apos;Left&apos; Right: %&apos;Right&apos;" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>left</l><l>right</l></list><l>finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;////////////////////////////////////////////////////////////////////////////////&#xD;// In order to avoid sending more messages than the app can handle, whenever we&#xD;// send a message we also save it in a persistent global variable. When the&#xD;// message is processed in the app, the callback checks if the global variable&#xD;// still matches what it was changed to. If it was, it deletes the global&#xD;// variable. Otherwise the message is resent with new data.&#xD;//&#xD;// When this block is called it checks if the global value has been set. If it&#xD;// has, it sends a message. Otherwise it just updates the value and lets the&#xD;// callback handle it.&#xD;&#xD;&#xD;// We can&apos;t run code beforehand to define values so we must check each block&#xD;// call if they are set.&#xD;if (window.birdbrain === undefined || window.birdbrain.moveSpeed === undefined) {&#xD;    window.birdbrain = window.birdbrain || {};&#xD;    window.birdbrain.moveSpeed = {&#xD;        // By attaching this function to a global variable, it is only&#xD;        // defined once instead of every time this block is called, improving&#xD;        // performance significantly.&#xD;        setMoveSpeed: function (speeds) {&#xD;            function callback() {&#xD;                // This array comparison is by reference instead of value.&#xD;                // This could mean false negatives if it&apos;s set to the same value, but these are uncommon and&#xD;                // the consequences are just a couple more messages sent. I do not think it is worth the&#xD;                // execution time and code complexity to do a proper value comparison.&#xD;                if (window.birdbrain.moveSpeed.speeds === speeds) {&#xD;                    delete window.birdbrain.moveSpeed.speeds;&#xD;                }&#xD;                else {&#xD;                    window.birdbrain.moveSpeed.setMoveSpeed(window.birdbrain.moveSpeed.speeds);&#xD;                }&#xD;            }&#xD;            var report = {&#xD;                message: "M".charCodeAt(0),&#xD;                leftDirection: speeds[0] &lt; 0 ? 1 : 0,&#xD;                leftSpeed: Math.abs(speeds[0]),&#xD;                rightDirection: speeds[1] &lt; 0 ? 1 : 0,&#xD;                rightSpeed: Math.abs(speeds[1]),&#xD;            };&#xD;            console.log(report);&#xD;            chrome.runtime.sendMessage(finchAppID, report, callback);&#xD;        }&#xD;    };&#xD;}&#xD;&#xD;// constrain n to the range [-255..255]&#xD;function constrain(n) {&#xD;    return Math.max(Math.min(n, 255), -255);&#xD;}&#xD;&#xD;var speeds = [constrain(Math.round(left * 2.55)), constrain(Math.round(right * 2.55))];&#xD;&#xD;if (window.birdbrain.moveSpeed.speeds === undefined) {&#xD;  window.birdbrain.moveSpeed.setMoveSpeed(speeds);&#xD;}&#xD;&#xD;window.birdbrain.moveSpeed.speeds = speeds;</l></block><list><block var="Left"/><block var="Right"/></list></block></script></block-definition><block-definition s="Stop Finch" type="command" category="motion"><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="Move Finch Left: %n Right: %n"><l>0</l><l>0</l></custom-block></script></block-definition><block-definition s="Finch LED R: %&apos;red&apos; G: %&apos;green&apos; B: %&apos;blue&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%n">0</input><input type="%n">50</input><input type="%n">0</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>red</l><l>green</l><l>blue</l></list><l>finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;////////////////////////////////////////////////////////////////////////////////&#xD;// In order to avoid sending more messages than the app can handle, whenever we&#xD;// send a message we also save it in a persistent global variable. When the&#xD;// message is processed in the app, the callback checks if the global variable&#xD;// still matches what it was changed to. If it was, it deletes the global&#xD;// variable. Otherwise the message is resent with new data.&#xD;//&#xD;// When this block is called it checks if the global value has been set. If it&#xD;// has, it sends a message. Otherwise it just updates the value and lets the&#xD;// callback handle it.&#xD;&#xD;&#xD;// We can&apos;t run code beforehand to define values so we must check each block&#xD;// call if they are set.&#xD;if (window.birdbrain === undefined || window.birdbrain.LED === undefined) {&#xD;    window.birdbrain = window.birdbrain || {};&#xD;    window.birdbrain.LED = {&#xD;        // By attaching this function to a global variable, it is only&#xD;        // defined once instead of every time this block is called, improving&#xD;        // performance significantly.&#xD;        setLED: function (values) {&#xD;            function callback() {&#xD;                // This array comparison is by reference instead of value.&#xD;                // This could mean false negatives if it&apos;s set to the same value, but these are uncommon and&#xD;                // the consequences are just a couple more messages sent. I do not think it is worth the&#xD;                // execution time and code complexity to do a proper value comparison.&#xD;                if (window.birdbrain.LED.values === values) {&#xD;                    delete window.birdbrain.LED.values;&#xD;                }&#xD;                else {&#xD;                    window.birdbrain.LED.setLED(window.birdbrain.LED.values);&#xD;                }&#xD;            }&#xD;            var report = {  message: "O".charCodeAt(0),&#xD;                            red: values[0],&#xD;                            green: values[1],&#xD;                            blue: values[2]&#xD;                         };&#xD;            console.log(report);&#xD;            chrome.runtime.sendMessage(finchAppID, report, callback);&#xD;        }&#xD;    };&#xD;}&#xD;&#xD;// constrain n to the range [0..255]&#xD;function constrain(n) {&#xD;    return Math.max(Math.min(n, 255), 0);&#xD;}&#xD;&#xD;var values = [constrain(Math.round(red * 2.55)), constrain(Math.round(green * 2.55)), constrain(Math.round(blue * 2.55))];&#xD;&#xD;if (window.birdbrain.LED.values === undefined) {&#xD;  window.birdbrain.LED.setLED(values);&#xD;}&#xD;&#xD;window.birdbrain.LED.values = values;</l></block><list><block var="red"/><block var="green"/><block var="blue"/></list></block></script></block-definition><block-definition s="Finch Buzzer %&apos;frequency&apos; Hz %&apos;duration&apos; ms" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%n">440</input><input type="%n">500</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>freq</l><l>time</l></list><l>finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;////////////////////////////////////////////////////////////////////////////////&#xD;// In order to avoid sending more messages than the app can handle, whenever we&#xD;// send a message we also save it in a persistent global variable. When the&#xD;// message is processed in the app, the callback checks if the global variable&#xD;// still matches what it was changed to. If it was, it deletes the global&#xD;// variable. Otherwise the message is resent with new data.&#xD;//&#xD;// When this block is called it checks if the global value has been set. If it&#xD;// has, it sends a message. Otherwise it just updates the value and lets the&#xD;// callback handle it.&#xD;&#xD;&#xD;// We can&apos;t run code beforehand to define values so we must check each block&#xD;// call if they are set.&#xD;if (window.birdbrain === undefined || window.birdbrain.buzzer === undefined) {&#xD;    window.birdbrain = window.birdbrain || {};&#xD;    window.birdbrain.buzzer = {&#xD;        // By attaching this function to a global variable, it is only&#xD;        // defined once instead of every time this block is called, improving&#xD;        // performance significantly.&#xD;        setBuzzer: function (value) {&#xD;            function callback() {&#xD;                // This object comparison is by reference instead of value.&#xD;                // This could mean false negatives if it&apos;s set to the same value, but these are uncommon and&#xD;                // the consequences are just a couple more messages sent. I do not think it is worth the&#xD;                // execution time and code complexity to do a proper value comparison.&#xD;                if (window.birdbrain.buzzer.value === value) {&#xD;                    delete window.birdbrain.buzzer.value;&#xD;                }&#xD;                else {&#xD;                    window.birdbrain.buzzer.setBuzzer(window.birdbrain.buzzer.value);&#xD;                }&#xD;            }&#xD;            var report = {&#xD;                message: "B".charCodeAt(0),&#xD;                timeHigh: value.time &gt;&gt; 8,  // Since the report must be in bytes&#xD;                timeLow: value.time &amp; 0xFF, // and these values are bigger than a byte&#xD;                freqHigh: value.freq &gt;&gt; 8,  // they are split into two bytes&#xD;                freqLow: value.freq &amp; 0xFF&#xD;            };&#xD;            chrome.runtime.sendMessage(finchAppID, report, callback);&#xD;        }&#xD;    };&#xD;}&#xD;&#xD;// constrain n to the range [0..65535]&#xD;function constrain(n) {&#xD;    return Math.max(Math.min(n, 0xFFFF), 0);&#xD;}&#xD;&#xD;var value = {&#xD;    freq: constrain(Math.round(freq)),&#xD;    time: constrain(Math.round(time))&#xD;};&#xD;&#xD;if (window.birdbrain.buzzer.value === undefined) {&#xD;    window.birdbrain.buzzer.setBuzzer(value);&#xD;}&#xD;&#xD;window.birdbrain.buzzer.value = value;</l></block><list><block var="frequency"/><block var="duration"/></list></block></script></block-definition><block-definition s="Finch Buzz+Wait %&apos;frequency&apos; Hz %&apos;duration&apos; ms" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%n">440</input><input type="%n">500</input></inputs><script><custom-block s="Finch Buzzer %n Hz %n ms"><block var="frequency"/><block var="duration"/></custom-block><block s="doWait"><block s="reportQuotient"><block var="duration"/><l>1000</l></block></block></script></block-definition><block-definition s="Finch Left Light Sensor" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>var sensorvalue = Number.MAX_VALUE;&#xD;&#xD;finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;&#xD;var myself = this;&#xD;&#xD;&#xD;&#xD;function getSensorData(callback) {&#xD;&#xD;    var getValue = function(response) {&#xD;&#xD;        sensorvalue = response.lights[0];&#xD;        callback(sensorvalue);&#xD;&#xD;    };&#xD;&#xD;    console.log("sending message to chrome");&#xD;&#xD;    chrome.runtime.sendMessage(finchAppID, {&#xD;&#xD;        message: "POLL"&#xD;&#xD;    }, getValue);&#xD;&#xD;    console.log("sent message to chrome");&#xD;&#xD;};&#xD;&#xD;&#xD;&#xD;function processValue(sensorvalue) {&#xD;&#xD;    console.log("sensor value has been set: ", sensorvalue);&#xD;&#xD;    myself.finchDummy1 = sensorvalue;&#xD;};&#xD;&#xD;&#xD;getSensorData(processValue);&#xD;</l></block><list></list></block><block s="doWait"><l>0.01</l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return this.finchDummy1;</l></block><list></list></block></block></script></block-definition><block-definition s="Finch Right Light Sensor" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>var sensorvalue = Number.MAX_VALUE;&#xD;&#xD;finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;&#xD;var myself = this;&#xD;&#xD;&#xD;&#xD;function getSensorData(callback) {&#xD;&#xD;    var getValue = function(response) {&#xD;&#xD;        sensorvalue = response.lights[1];&#xD;        callback(sensorvalue);&#xD;&#xD;    };&#xD;&#xD;&#xD;    console.log("sending message to chrome");&#xD;&#xD;    chrome.runtime.sendMessage(finchAppID, {&#xD;&#xD;        message: "POLL"&#xD;&#xD;    }, getValue);&#xD;&#xD;    console.log("sent message to chrome");&#xD;&#xD;};&#xD;&#xD;&#xD;&#xD;function processValue(sensorvalue) {&#xD;&#xD;    console.log("sensor value has been set: ", sensorvalue);&#xD;&#xD;    myself.finchDummy2 = sensorvalue;&#xD;};&#xD;&#xD;&#xD;getSensorData(processValue);&#xD;</l></block><list></list></block><block s="doWait"><l>0.01</l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return this.finchDummy2;</l></block><list></list></block></block></script></block-definition><block-definition s="Finch Light Sensors" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><custom-block s="Finch Left Light Sensor"></custom-block><custom-block s="Finch Right Light Sensor"></custom-block></list></block></block></script></block-definition><block-definition s="Finch X Acceleration" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>var sensorvalue = Number.MAX_VALUE;&#xD;&#xD;finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;&#xD;var myself = this;&#xD;&#xD;&#xD;&#xD;function getSensorData(callback) {&#xD;&#xD;    var getValue = function(response) {&#xD;&#xD;        sensorvalue = response.acceleration[0];&#xD;        callback(sensorvalue);&#xD;&#xD;    };&#xD;&#xD;&#xD;    console.log("sending message to chrome");&#xD;&#xD;    chrome.runtime.sendMessage(finchAppID, {&#xD;&#xD;        message: "POLL"&#xD;&#xD;    }, getValue);&#xD;&#xD;    console.log("sent message to chrome");&#xD;&#xD;};&#xD;&#xD;&#xD;&#xD;function processValue(sensorvalue) {&#xD;&#xD;    console.log("sensor value has been set: ", sensorvalue);&#xD;&#xD;    myself.finchDummy3 = sensorvalue;&#xD;};&#xD;&#xD;&#xD;getSensorData(processValue);&#xD;</l></block><list></list></block><block s="doWait"><l>0.01</l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return this.finchDummy3;</l></block><list></list></block></block></script></block-definition><block-definition s="Finch Y Acceleration" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>var sensorvalue = Number.MAX_VALUE;&#xD;&#xD;finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;&#xD;var myself = this;&#xD;&#xD;&#xD;&#xD;function getSensorData(callback) {&#xD;&#xD;    var getValue = function(response) {&#xD;&#xD;        sensorvalue = response.acceleration[1];&#xD;        callback(sensorvalue);&#xD;&#xD;    };&#xD;&#xD;&#xD;    console.log("sending message to chrome");&#xD;&#xD;    chrome.runtime.sendMessage(finchAppID, {&#xD;&#xD;        message: "POLL"&#xD;&#xD;    }, getValue);&#xD;&#xD;    console.log("sent message to chrome");&#xD;&#xD;};&#xD;&#xD;&#xD;&#xD;function processValue(sensorvalue) {&#xD;&#xD;    console.log("sensor value has been set: ", sensorvalue);&#xD;&#xD;    myself.finchDummy4 = sensorvalue;&#xD;};&#xD;&#xD;&#xD;getSensorData(processValue);&#xD;</l></block><list></list></block><block s="doWait"><l>0.01</l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return this.finchDummy4;</l></block><list></list></block></block></script></block-definition><block-definition s="Finch Z Acceleration" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>var sensorvalue = Number.MAX_VALUE;&#xD;&#xD;finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;&#xD;var myself = this;&#xD;&#xD;&#xD;&#xD;function getSensorData(callback) {&#xD;&#xD;    var getValue = function(response) {&#xD;&#xD;        sensorvalue = response.acceleration[2];&#xD;        callback(sensorvalue);&#xD;&#xD;    };&#xD;&#xD;&#xD;    console.log("sending message to chrome");&#xD;&#xD;    chrome.runtime.sendMessage(finchAppID, {&#xD;&#xD;        message: "POLL"&#xD;&#xD;    }, getValue);&#xD;&#xD;    console.log("sent message to chrome");&#xD;&#xD;};&#xD;&#xD;&#xD;&#xD;function processValue(sensorvalue) {&#xD;&#xD;    console.log("sensor value has been set: ", sensorvalue);&#xD;&#xD;    myself.finchDummy5 = sensorvalue;&#xD;};&#xD;&#xD;&#xD;getSensorData(processValue);&#xD;</l></block><list></list></block><block s="doWait"><l>0.01</l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return this.finchDummy5;</l></block><list></list></block></block></script></block-definition><block-definition s="Finch Orientation" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>var acceleration = Array(3);&#xD;&#xD;finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;&#xD;var myself = this;&#xD;&#xD;&#xD;&#xD;function getSensorData(callback) {&#xD;&#xD;    var getValue = function(response) {&#xD;        acceleration = response.acceleration;&#xD;        callback(acceleration);&#xD;    };&#xD;&#xD;    console.log("sending message to chrome");&#xD;&#xD;    chrome.runtime.sendMessage(finchAppID, {&#xD;&#xD;        message: "POLL"&#xD;&#xD;    }, getValue);&#xD;&#xD;    console.log("sent message to chrome");&#xD;&#xD;};&#xD;&#xD;&#xD;&#xD;function processValue(sensorvalue) {&#xD;    var orientation;&#xD;&#xD;        if(acceleration[0] &gt; -0.5 &amp;&amp; acceleration[0] &lt; 0.5 &amp;&amp; acceleration[1] &lt; 0.5 &amp;&amp; acceleration[1] &gt; -0.5 &amp;&amp; acceleration[2] &gt; 0.65 &amp;&amp; acceleration[2] &lt; 1.5)&#xD;&#xD;            orientation =  "level";&#xD;&#xD;        else if(acceleration[0] &gt; -0.5 &amp;&amp; acceleration[0] &lt; 0.5 &amp;&amp; acceleration[1] &lt; 0.5 &amp;&amp; acceleration[1] &gt; -0.5 &amp;&amp; acceleration[2] &gt; -1.5 &amp;&amp; acceleration[2] &lt; -0.65)&#xD;&#xD;            orientation = "upside down";&#xD;&#xD;        else if(acceleration[0] &lt; 1.5 &amp;&amp; acceleration[0] &gt; 0.8 &amp;&amp; acceleration[1] &gt;-0.3 &amp;&amp; acceleration[1] &lt; 0.3 &amp;&amp; acceleration[2] &gt; -0.3 &amp;&amp; acceleration[2] &lt; 0.3)&#xD;&#xD;            orientation = "beak down";&#xD;&#xD;        else if(acceleration[0] &lt; -0.8 &amp;&amp; acceleration[0] &gt; -1.5 &amp;&amp; acceleration[1] &gt;-0.3 &amp;&amp; acceleration[1] &lt; 0.3 &amp;&amp; acceleration[2] &gt; -0.3 &amp;&amp; acceleration[2] &lt; 0.3)&#xD;&#xD;            orientation = "beak up";&#xD;&#xD;        else if(acceleration[0] &gt; -0.5 &amp;&amp; acceleration[0] &lt; 0.5 &amp;&amp; acceleration[1] &gt; 0.7 &amp;&amp; acceleration[1] &lt; 1.5 &amp;&amp; acceleration[2] &gt; -0.5 &amp;&amp; acceleration[2] &lt; 0.5)&#xD;&#xD;            orientation = "left wing down";&#xD;&#xD;        else if(acceleration[0] &gt; -0.5 &amp;&amp; acceleration[0] &lt; 0.5 &amp;&amp; acceleration[1] &gt; -1.5 &amp;&amp; acceleration[1] &lt; -0.7 &amp;&amp; acceleration[2] &gt; -0.5 &amp;&amp; acceleration[2] &lt; 0.5)&#xD;&#xD;            orientation = "right wing down";&#xD;&#xD;        else&#xD;&#xD;            orientation = "in between";&#xD;    console.log("sensor value has been set: ", orientation);&#xD;&#xD;    myself.finchDummy6 = orientation;&#xD;};&#xD;&#xD;&#xD;getSensorData(processValue);&#xD;</l></block><list></list></block><block s="doWait"><l>0.01</l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return this.finchDummy6;</l></block><list></list></block></block></script></block-definition><block-definition s="Finch Accelerations" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><custom-block s="Finch X Acceleration"></custom-block><custom-block s="Finch Y Acceleration"></custom-block><custom-block s="Finch Z Acceleration"></custom-block></list></block></block></script></block-definition><block-definition s="Finch Left Obstacle" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>var sensorvalue = Number.MAX_VALUE;&#xD;&#xD;finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;&#xD;var myself = this;&#xD;&#xD;&#xD;&#xD;function getSensorData(callback) {&#xD;&#xD;    var getValue = function(response) {&#xD;&#xD;        sensorvalue = response.obstacles[0];&#xD;        callback(sensorvalue);&#xD;&#xD;    };&#xD;&#xD;    console.log("sending message to chrome");&#xD;&#xD;    chrome.runtime.sendMessage(finchAppID, {&#xD;&#xD;        message: "POLL"&#xD;&#xD;    }, getValue);&#xD;&#xD;    console.log("sent message to chrome");&#xD;&#xD;};&#xD;&#xD;&#xD;&#xD;function processValue(sensorvalue) {&#xD;&#xD;    var pred = (sensorvalue !== 0);&#xD;    console.log("sensor value has been set: ", pred);&#xD;&#xD;    myself.finchDummy7 = pred;&#xD;};&#xD;&#xD;&#xD;getSensorData(processValue);&#xD;</l></block><list></list></block><block s="doWait"><l>0.01</l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return this.finchDummy7;</l></block><list></list></block></block></script></block-definition><block-definition s="Finch Right Obstacle" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>var sensorvalue = Number.MAX_VALUE;&#xD;&#xD;finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;&#xD;var myself = this;&#xD;&#xD;&#xD;&#xD;function getSensorData(callback) {&#xD;&#xD;    var getValue = function(response) {&#xD;&#xD;        sensorvalue = response.obstacles[1];&#xD;        callback(sensorvalue);&#xD;&#xD;    };&#xD;&#xD;    console.log("sending message to chrome");&#xD;&#xD;    chrome.runtime.sendMessage(finchAppID, {&#xD;&#xD;        message: "POLL"&#xD;&#xD;    }, getValue);&#xD;&#xD;    console.log("sent message to chrome");&#xD;&#xD;};&#xD;&#xD;&#xD;&#xD;function processValue(sensorvalue) {&#xD;&#xD;    var pred = (sensorvalue !== 0);&#xD;    console.log("sensor value has been set: ", pred);&#xD;&#xD;    myself.finchDummy8 = pred;&#xD;};&#xD;&#xD;&#xD;getSensorData(processValue);&#xD;</l></block><list></list></block><block s="doWait"><l>0.05</l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return this.finchDummy8;</l></block><list></list></block></block></script></block-definition><block-definition s="Finch Obstacles" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><custom-block s="Finch Left Obstacle"></custom-block><custom-block s="Finch Right Obstacle"></custom-block></list></block></block></script></block-definition><block-definition s="Finch Temperature Celcius" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>var sensorvalue = Number.MAX_VALUE;&#xD;&#xD;finchAppID = "ojocioejjpmeccjfjlhkepchminjemod";&#xD;&#xD;var myself = this;&#xD;&#xD;&#xD;&#xD;function getSensorData(callback) {&#xD;&#xD;    var getValue = function(response) {&#xD;&#xD;        sensorvalue = response.temperature;&#xD;        callback(sensorvalue);&#xD;&#xD;    };&#xD;&#xD;    console.log("sending message to chrome");&#xD;&#xD;    chrome.runtime.sendMessage(finchAppID, {&#xD;&#xD;        message: "POLL"&#xD;&#xD;    }, getValue);&#xD;&#xD;    console.log("sent message to chrome");&#xD;&#xD;};&#xD;&#xD;&#xD;&#xD;function processValue(sensorvalue) {&#xD;&#xD;    &#xD;    console.log("sensor value has been set: ", sensorvalue);&#xD;&#xD;    myself.finchDummy9 = sensorvalue;&#xD;};&#xD;&#xD;&#xD;getSensorData(processValue);&#xD;</l></block><list></list></block><block s="doWait"><l>0.01</l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return this.finchDummy9;</l></block><list></list></block></block></script></block-definition><block-definition s="Finch Temperature Fahrenheit" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportSum"><block s="reportProduct"><l>1.8</l><custom-block s="Finch Temperature Celcius"></custom-block></block><l>32</l></block></block></script></block-definition></blocks><variables></variables></project><media name="Graphing with Finch" app="Snap! 6, https://snap.berkeley.edu" version="1"></media></snapdata>