Web edits
[beagleboard.org.git] / db / 2825.xml
blob4cebb2a53d066b654483e6fec53201034127cebf
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <?xml-stylesheet type="text/xsl" href="helma.xsl"?>
3 <xmlroot xmlns:hop="http://www.helma.org/docs/guide/features/database">
4   <hopobject id="2825" name="cape_bacon" prototype="Page" created="1372735831412" lastModified="1387490012600">
5   <hop:parent idref="2471" prototyperef="Page"/>
6     <is_xhtml type="boolean">true</is_xhtml>
7     <http_remotehost>192.94.94.105</http_remotehost>
8     <http_language>en-US,en;q=0.8,fr;q=0.6</http_language>
9     <uri>cape_bacon</uri>
10     <http_browser>Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36</http_browser>
11     <time type="date">19.12.2013 15:53:32 CST</time>
12     <hopsession>192.94.94.c19vyxgotgkm</hopsession>
13     <body>&lt;script src=&quot;/static/bonescript-demo.js&quot;&gt;&lt;/script&gt;\r
14 &lt;script src=&quot;/static/jquery-ui.min.js&quot;&gt;&lt;/script&gt;\r
15 &lt;h2&gt;BoneScript&lt;/h2&gt;\r
16 &lt;div id=&apos;side-menu&apos; class=&quot;t3_sidebar&quot;&gt;\r
17     &lt;ul class=&quot;left-menu&quot;&gt;\r
18         &lt;strong&gt;Navigation&lt;/strong&gt;\r
19         &lt;li&gt;&lt;a href=&quot;/Support/BoneScript/menu/&quot;&gt;Menu contents&lt;/a&gt;&lt;/li&gt;\r
20     &lt;/ul&gt;\r
21 &lt;/div&gt;\r
22 &lt;div class=&quot;t3_content_1&quot;&gt;\r
23 &lt;div id=&apos;connect-status&apos;&gt;&lt;/div&gt;\r
24 &lt;div id=&quot;content_child&quot;&gt;\r
26 &lt;h1&gt;Bacon Cape&lt;/h1&gt;\r
27 &lt;p&gt;The Bacon Cape is an add-on board meant to give you access to some\r
28  hardware to help build your understanding of doing basic embedded I/O on\r
29  BeagleBone.\r
30 &lt;/p&gt;\r
31 &lt;h2&gt;Board activity&lt;/h2&gt;\r
32 &lt;p&gt;When you visit this page and you have a BeagleBone running BoneScript 0.2.3\r
33     or newer with a Bacon Cape attached on your local network or connected to\r
34     your computer over USB, this display will dyanmically update\r
35     to reflect the board status. The box color should reflect the color of the\r
36     RGB LED. The top slider should reflect the status of the push button and\r
37     turn on the blue LED. The middle slider should reflect the status of the\r
38     slide potentiometer and adjust the brightness of the green LED. The bottom\r
39     slider should be adjustable on the page and adjust the brightness of the red\r
40     LED.\r
41 &lt;/p&gt;\r
42 &lt;p&gt;More information about the cape can be found at &lt;a href=&quot;http://elinux.org/Bacon_Cape&quot;&gt;\r
43     the eLinux.org Bacon Cape page.\r
44 &lt;/a&gt;&lt;/p&gt;\r
45 &lt;h2&gt;Components&lt;/h2&gt;\r
46 &lt;p&gt;\r
47     These are the major components of the Bacon Cape.\r
48 &lt;/p&gt;\r
49 &lt;ul&gt;\r
50  &lt;li&gt;&lt;em&gt;S1&lt;/em&gt;: a simple push button provides a digital input\r
51   &lt;ul&gt;\r
52    &lt;li&gt;&lt;em&gt;P8_19&lt;/em&gt;: digital I/O connection to BeagleBone&lt;/li&gt;\r
53    &lt;li&gt;Configured as active-low (low when pressed) and uses and external pull-up&lt;/li&gt;\r
54   &lt;/ul&gt;\r
55  &lt;/li&gt;\r
56  &lt;li&gt;&lt;em&gt;D1&lt;/em&gt;: an RGB LED provides an indicator for digital output\r
57   &lt;ul&gt;\r
58    &lt;li&gt;&lt;em&gt;P9_16&lt;/em&gt;: digital I/O connection for &lt;em&gt;&lt;font color=&quot;blue&quot;&gt;BLUE&lt;/font&gt;&lt;/em&gt;&lt;/li&gt;\r
59    &lt;li&gt;&lt;em&gt;P9_14&lt;/em&gt;: digital I/O connection for &lt;em&gt;&lt;font color=&quot;green&quot;&gt;GREEN&lt;/font&gt;&lt;/em&gt;&lt;/li&gt;\r
60    &lt;li&gt;&lt;em&gt;P9_42&lt;/em&gt;: digital I/O connection for &lt;em&gt;&lt;font color=&quot;red&quot;&gt;RED&lt;/font&gt;&lt;/em&gt;&lt;/li&gt;\r
61    &lt;li&gt;Configured as active-high (lit when high)&lt;/li&gt;\r
62   &lt;/ul&gt;\r
63  &lt;/li&gt;\r
64  &lt;li&gt;&lt;em&gt;R10&lt;/em&gt;: a slide potentiometer provides an analog input\r
65   &lt;ul&gt;\r
66    &lt;li&gt;&lt;em&gt;P9_36&lt;/em&gt;: analog input connection to BeagleBone&lt;/li&gt;\r
67   &lt;/ul&gt;\r
68  &lt;/li&gt;\r
69  &lt;li&gt;&lt;em&gt;U1&lt;/em&gt;: shift register feeding a 7 segment display\r
70   &lt;img src=&quot;/static/images/cape-bacon-seg7.png&quot; align=&quot;right&quot; /&gt;\r
71   &lt;ul&gt;\r
72    &lt;li&gt;&lt;em&gt;P9_22&lt;/em&gt;: CLOCK&lt;/li&gt;\r
73    &lt;li&gt;&lt;em&gt;P9_17&lt;/em&gt;: LATCH&lt;/li&gt;\r
74    &lt;li&gt;&lt;em&gt;P9_18&lt;/em&gt;: DATA&lt;/li&gt;\r
75    &lt;li&gt;&lt;em&gt;P9_15&lt;/em&gt;: CLEAR&lt;/li&gt;\r
76    &lt;li&gt;&lt;em&gt;LED1&lt;/em&gt;: connected to shift register output in common anode (active-low) configuration&lt;/li&gt;\r
77    &lt;li&gt;&lt;em&gt;a&lt;/em&gt;: last bit shifted out&lt;/li&gt;\r
78    &lt;li&gt;&lt;em&gt;h&lt;/em&gt;: first bit shifted out&lt;/li&gt;\r
79   &lt;/ul&gt;\r
80  &lt;li&gt;&lt;em&gt;U2&lt;/em&gt;: I2C EEPROM connected to I2C2&lt;/li&gt;\r
81 &lt;/ul&gt;\r
82 &lt;script&gt;\r
83     onbonescriptinit = function() {\r
84         $(document).ready(function(){ demoRun(&apos;code&apos;); });\r
85     };\r
86 &lt;/script&gt;\r
87 &lt;h2&gt;Demo\r
88  &lt;button class=&quot;dynlink&quot; id=&quot;runbutton&quot;&gt;run&lt;/button&gt;\r
89 &lt;/h2&gt;\r
90 &lt;div style=&quot;display: table;&quot;&gt;\r
91  &lt;div style=&quot;display: table-row; width=500px;&quot;&gt;\r
92   &lt;div id=&quot;led1&quot; style=&quot;display: table-cell; height:50px;&quot;&gt;&lt;/div&gt;\r
93   &lt;div style=&quot;display: table-cell; height:50px&quot;&gt;\r
94    &lt;div id=&quot;slider1&quot; style=&quot;width:400px; vertical-align:center;&quot;&gt;&lt;/div&gt;\r
95    &lt;div id=&quot;slider2&quot; style=&quot;width:400px; vertical-align:center;&quot;&gt;&lt;/div&gt;\r
96    &lt;div id=&quot;slider3&quot; style=&quot;width:400px; vertical-align:center;&quot;&gt;&lt;/div&gt;\r
97   &lt;/div&gt;\r
98  &lt;/div&gt;\r
99 &lt;/div&gt;\r
100 &lt;br /&gt;\r
101 &lt;div readonly id=&apos;console-output&apos; style=&apos;height:80px;width:600px;&apos;&gt;&lt;/div&gt;\r
102 &lt;h2&gt;Code&lt;/h2&gt;\r
103 &lt;pre id=&quot;code&quot; class=&quot;use-editor&quot; style=&quot;height:3500px;width:600px;&quot;&gt;\r
104 // read in BoneScript library\r
105 var b = require(&apos;bonescript&apos;);\r
107 // define used pins\r
108 var LED_RED = &apos;P9_42&apos;;\r
109 var LED_GREEN = &apos;P9_14&apos;;\r
110 var LED_BLUE = &apos;P9_16&apos;;\r
111 var BUTTON = &apos;P8_19&apos;;\r
112 var POT = &apos;P9_36&apos;;\r
113 var S_DATA  = &apos;P9_18&apos;;\r
114 var S_CLOCK = &apos;P9_22&apos;;\r
115 var S_LATCH = &apos;P9_17&apos;;\r
116 var S_CLEAR = &apos;P9_15&apos;;\r
118 // define other global variables\r
119 var s = b.LOW;\r
120 var digit = 0;\r
121 var segments = [ 0xC0, 0xF9, 0xA4, 0xB0, 0x99,\r
122                  0x92, 0x82, 0xF8, 0x80, 0x90 ];\r
123 var stopped = 0;\r
124 var started = 0;\r
125 var platform = {};\r
127 // attach jQuery elements\r
128 try {\r
129     $(&apos;#slider1&apos;).slider();\r
130     $(&apos;#slider2&apos;).slider();\r
131     $(&apos;#slider3&apos;).slider();\r
132     $(&apos;#led1&apos;).css(&apos;width&apos;, &apos;50px&apos;);\r
133     $(&apos;#led1&apos;).css(&apos;height&apos;, &apos;50px&apos;);\r
134     $(&apos;#led1&apos;).css(&apos;background-color&apos;, &apos;rgb(0,0,0)&apos;);\r
135     $(&quot;#slider3&quot;).bind(&quot;slidechange&quot;, function(event, ui) {\r
136         updateRed({value:(ui.value/100.0)});\r
137     });\r
138     //$(&apos;#runbutton&apos;).removeAttr(&apos;onclick&apos;);\r
139     $(&apos;#runbutton&apos;).click(runClick);\r
140 } catch(ex) {}\r
142 // configure pins as inputs/outputs\r
143 b.pinMode(S_DATA,  b.OUTPUT);\r
144 b.pinMode(S_CLOCK, b.OUTPUT);\r
145 b.pinMode(S_LATCH, b.OUTPUT);\r
146 b.pinMode(S_CLEAR, b.OUTPUT);\r
147 b.pinMode(&apos;USR0&apos;, b.OUTPUT);\r
148 b.pinMode(&apos;USR1&apos;, b.OUTPUT);\r
149 b.pinMode(&apos;USR2&apos;, b.OUTPUT);\r
150 b.pinMode(&apos;USR3&apos;, b.OUTPUT);\r
151 //b.pinMode(LED_RED, b.OUTPUT);\r
152 //b.pinMode(LED_GREEN, b.OUTPUT);\r
153 //b.pinMode(LED_BLUE, b.OUTPUT);\r
154 b.pinMode(BUTTON, b.INPUT);\r
156 // initial states\r
157 b.digitalWrite(&apos;USR0&apos;, b.LOW);\r
158 b.digitalWrite(&apos;USR1&apos;, b.LOW);\r
159 b.digitalWrite(&apos;USR2&apos;, b.LOW);\r
160 b.digitalWrite(&apos;USR3&apos;, b.LOW);\r
161 b.analogWrite(LED_RED, 0);\r
162 b.analogWrite(LED_GREEN, 0);\r
163 b.analogWrite(LED_BLUE, 0);\r
164 b.digitalWrite(S_DATA,  b.LOW);\r
165 b.digitalWrite(S_CLOCK, b.LOW);\r
166 b.digitalWrite(S_LATCH, b.LOW);\r
167 b.digitalWrite(S_CLEAR, b.HIGH);\r
168 //b.attachInterrupt(BUTTON, true, b.CHANGE, handleButton);\r
170 // call function to read status and perform updates\r
171 function start() {\r
172     console.log(&apos;Starting Bacon Cape demo&apos;);\r
173     b.getPlatform(onGetPlatform);\r
176 function onGetPlatform(x) {\r
177     platform = x;\r
178     scheduleNextUpdate();\r
181 function scheduleNextUpdate() {    \r
182     // test for stop and then schedule next update for 50ms\r
183     if(stopped) {\r
184         started = 0;\r
185         console.log(&apos;Stopped Bacon Cape demo&apos;);\r
186     } else {\r
187         setTimeout(update, 50);\r
188     }\r
191 function update() {\r
192     // toggle USR0 LED\r
193     s = (s == b.LOW) ? b.HIGH : b.LOW;\r
194     if(platform.bonescript != &apos;0.2.3&apos;) {\r
195         b.digitalWrite(&apos;USR0&apos;, s, doAnalogRead);\r
196     } else {\r
197         b.digitalWrite(&apos;USR0&apos;, s, do7SegUpdate);\r
198     }\r
201 function do7SegUpdate(x) {\r
202     // update 7segment LED\r
203     digit = (digit + 1) % 10;\r
204     \r
205     // shift out the character LED pattern\r
206     b.shiftOut(S_DATA, S_CLOCK, b.MSBFIRST, \r
207         segments[digit], doLatch);\r
210 function doLatch() {\r
211     // latch in the value\r
212     b.digitalWrite(S_LATCH, b.HIGH, doLatchLow);\r
215 function doLatchLow() {\r
216     b.digitalWrite(S_LATCH, b.LOW, doAnalogRead);\r
219 function doAnalogRead() {\r
220     b.digitalRead(BUTTON, updateBlue);\r
223 function updateBlue(x) {\r
224     if(typeof x.value == &apos;undefined&apos;) return;\r
225     updateLED({blue:1-x.value});\r
226     b.analogRead(POT, updateGreen);\r
229 function updateGreen(x) {\r
230     if(typeof x.value == &apos;undefined&apos;) return;\r
231     updateLED({green:1-x.value});\r
232     scheduleNextUpdate();\r
235 function updateRed(x) {\r
236     if(started) {\r
237         if(typeof x.value == &apos;undefined&apos;) return;\r
238         updateLED({red:x.value});\r
239     }\r
242 function updateLED(led) {\r
243     if(typeof led.red == &apos;number&apos;) {\r
244         b.analogWrite(LED_RED, led.red);\r
245         this.red = led.red;\r
246     }\r
247     if(typeof led.green == &apos;number&apos;) {\r
248         b.analogWrite(LED_GREEN, led.green);\r
249         this.green = led.green;\r
250     }\r
251     if(typeof led.blue == &apos;number&apos;) {\r
252         b.analogWrite(LED_BLUE, led.blue);\r
253         this.blue = led.blue;\r
254     }\r
255     try {\r
256         if(typeof this.red == &apos;undefined&apos;) this.red = 0;\r
257         if(typeof this.green == &apos;undefined&apos;) this.green = 0;\r
258         if(typeof this.blue == &apos;undefined&apos;) this.blue = 0;\r
259         var rgb = &apos;rgb(&apos; + Math.round(this.red*255) + &apos;,&apos; + \r
260             Math.round(this.green*255) + &apos;,&apos; +\r
261             Math.round(this.blue*255) + &apos;)&apos;;\r
262         $(&apos;#led1&apos;).css(&apos;background-color&apos;, rgb);\r
263         $(&quot;#slider1&quot;).slider(&quot;option&quot;, &quot;value&quot;, this.blue*100);\r
264         $(&quot;#slider2&quot;).slider(&quot;option&quot;, &quot;value&quot;, this.green*100);\r
265     } catch(ex) {}\r
268 function runClick() {\r
269     if(!started) {\r
270         started = 1;\r
271         stopped = 0;\r
272         start();\r
273         try {\r
274             $(&apos;#runbutton&apos;).html(&apos;stop&apos;);\r
275         } catch(ex) {}\r
276     } else if(!stopped) {\r
277         stopped = 1;\r
278         var p = &apos;/sys/class/leds/beaglebone:green:usr&apos;;\r
279         b.digitalWrite(&apos;USR0&apos;, b.LOW);\r
280         b.digitalWrite(&apos;USR1&apos;, b.LOW);\r
281         b.digitalWrite(&apos;USR2&apos;, b.LOW);\r
282         b.digitalWrite(&apos;USR3&apos;, b.LOW);\r
283         b.writeTextFile(p+&apos;0/trigger&apos;, &apos;heartbeat&apos;);\r
284         b.writeTextFile(p+&apos;1/trigger&apos;, &apos;mmc0&apos;);\r
285         b.writeTextFile(p+&apos;2/trigger&apos;, &apos;cpu0&apos;);\r
286         b.writeTextFile(p+&apos;3/trigger&apos;, &apos;mmc1&apos;);\r
287         try {\r
288             $(&apos;#runbutton&apos;).html(&apos;run&apos;);\r
289         } catch(ex) {}\r
290     } \r
292 &lt;/pre&gt;\r
293 &lt;script&gt;\r
294 window.onbeforeunload = restore;\r
295 function restore() {\r
296     var b = require(&apos;bonescript&apos;);\r
297     var p = &apos;/sys/class/leds/beaglebone:green:usr&apos;;\r
298     b.digitalWrite(&apos;USR0&apos;, b.LOW);\r
299     b.digitalWrite(&apos;USR1&apos;, b.LOW);\r
300     b.digitalWrite(&apos;USR2&apos;, b.LOW);\r
301     b.digitalWrite(&apos;USR3&apos;, b.LOW);\r
302     b.writeTextFile(p+&apos;0/trigger&apos;, &apos;heartbeat&apos;);\r
303     b.writeTextFile(p+&apos;1/trigger&apos;, &apos;mmc0&apos;);\r
304     b.writeTextFile(p+&apos;2/trigger&apos;, &apos;cpu0&apos;);\r
305     b.writeTextFile(p+&apos;3/trigger&apos;, &apos;mmc1&apos;);\r
306     //b.detachInterrupt(&apos;P8_19&apos;);\r
308 &lt;/script&gt;\r
309 &lt;h2&gt;See also&lt;/h2&gt;\r
310 &lt;h3&gt;Reference&lt;/h3&gt;\r
311 &lt;ul&gt;\r
312     &lt;li&gt;&lt;a href=&quot;http://elinux.org/Bacon_Cape&quot; class=&quot;external&quot;&gt;Bacon Cape\r
313         page on eLinux.org\r
314     &lt;/a&gt;&lt;/li&gt;\r
315 &lt;/ul&gt;\r
316 &lt;h3&gt;Topics&lt;/h3&gt;\r
317 &lt;ul&gt;\r
318  &lt;li&gt;&lt;a href=&quot;/Support/bone101/#headers&quot;&gt;BeagleBone expansion headers&lt;/a&gt;&lt;/li&gt;\r
319  &lt;li&gt;&lt;a href=&quot;/Support/BoneScript/#analogio&quot;&gt;Analog I/O&lt;/a&gt;&lt;/li&gt;\r
320 &lt;/ul&gt;\r
321 &lt;h3&gt;Related functions&lt;/h3&gt;\r
322 &lt;ul&gt;\r
323  &lt;li&gt;&lt;a href=&quot;/Support/BoneScript/#require&quot;&gt;require&lt;/a&gt;&lt;/li&gt;\r
324  &lt;li&gt;&lt;a href=&quot;/Support/BoneScript/pinMode/&quot;&gt;pinMode&lt;/a&gt;&lt;/li&gt;\r
325  &lt;li&gt;&lt;a href=&quot;/Support/BoneScript/analogWrite/&quot;&gt;analogWrite&lt;/a&gt;&lt;/li&gt;\r
326  &lt;li&gt;&lt;a href=&quot;/Support/BoneScript/analogRead/&quot;&gt;analogRead&lt;/a&gt;&lt;/li&gt;\r
327  &lt;li&gt;&lt;a href=&quot;/Support/BoneScript/digitalWrite/&quot;&gt;digitalWrite&lt;/a&gt;&lt;/li&gt;\r
328  &lt;li&gt;&lt;a href=&quot;/Support/BoneScript/digitalRead/&quot;&gt;digitalRead&lt;/a&gt;&lt;/li&gt;\r
329 &lt;/ul&gt;\r
330 &lt;h3&gt;Where to buy&lt;/h3&gt;\r
331 &lt;ul&gt;\r
332 &lt;li&gt;&lt;a href=&quot;http://boardzoo.com/index.php/beaglebone-black/beaglebone-bacon.html#.UrCCIfRDvz4&quot;&gt;Bacon Cape&lt;/a&gt;&lt;/li&gt;\r
333 &lt;/br&gt;\r
336 &lt;/div&gt;&lt;/div&gt;\r
337 &lt;div style=&quot;clear:both; padding-left:210px;&quot;&gt;&lt;h2&gt;See it in action&lt;/h2&gt;\r
338 &lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;//www.youtube.com/embed/EE_cECo-7uA&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt; &lt;/div&gt;\r
339 </body>
340     <pseudoparent idref="2471" prototyperef="Page"/>
341     <http_referer>http://beagleboard.org/support/BoneScript/cape_bacon/edit</http_referer>
342     <http_host>beagleboard.org</http_host>
343     <user>jessica.lynne.callaway@gmail.com</user>
344     <lang>en-us</lang>
345   </hopobject>
346 </xmlroot>