## Basic tutorial: graphing analog sensor data

Let's say that you've got some sensor with an analog interface, i.e. it outputs a voltage proportional to what it's sensing, rather than a digital data stream. You want to look at a graph of that voltage in your web browser.

In this example, I'll use the Lilypad temperature sensor manufactured by Sparkfun.

Connect the pin labeled A/D ref to a voltage between ground and 3.3 V. This voltage determines the top end of the A/D converter's range. The bottom of the range is always ground. If your sensor voltage is above 3.3 V, you can scale it down to the 0-3.3 V range with a voltage divider. (Be careful about drawing too much current from your sensor, which will make the voltage sag.) (More explanation of jQplot needed here.)

Here's the full HTML page.

``````<html>
<meta charset="utf-8">
<title>Analog graph demo</title>
<script src="/static/jquery-1.5.js"></script>
<!--[if IE]><script type="text/javascript" src="/excanvas.js"></script><![endif]-->
<script type="text/javascript" src="/static/jquery.jqplot.js"></script>
<body>
<div class="rascalcontent">
<h1>Analog graph demo</h1>
<div id="chart1" style="height:400px;width:900px;"></div>
</div>
<script type="text/javascript">
chartOptions = {
legend: {
show: true,
location: "nw" },
title: "Channel 0",
series: [
{label: "Channel 0", lineWidth:3, showMarker:false}
],
axes: {
xaxis: {
label: "Time [seconds ago]",
min: 0,
max: 120,
yaxis: {
label: "Sensor voltage [V]",
min: 0,
max: 2.5 },
},
seriesColors: [ "#cd2820" ]
};
a0 = new Array();
setInterval(function() {
\$.post("analog",  { adref: 2.5 }, function(response) {
data = \$.parseJSON(response);
if(a0.length > chartOptions.axes.xaxis.max) {
a0.pop();
}
a0.unshift(data.A0);
\$.jqplot("chart1", [a0], chartOptions).replot();
});
}, 200);
</script>
</body>
</html>
``````

When your browser requests a new reading by POSTing to `/analog`, we want the Rascal to read the A/D converter on the Rascal and return a value.

The four A/D converters on the Rascal have 10-bit resolution, which means that they output on a scale between 0 and 1023 because 1023 is the largest binary value you can write with 10 bits. (Here's a decent explanation of binary in the context of resolution if you're interested.)

(need more explanation of how this works here)

Here's the Python.

``````@public.route('/analog', methods=['POST'])
def analog():