From b6ea1c47c32be1b206d20cd262c5f6e2ad4d8672 Mon Sep 17 00:00:00 2001
From: Sam Calisch <s.calisch@gmail.com>
Date: Sun, 28 May 2017 13:51:28 -0400
Subject: [PATCH] added node rpio

---
 RaspberryPiZero_node_rpio/index.html    |  36 ++++++++++++++++++++++++
 RaspberryPiZero_node_rpio/node_rpio.png | Bin 0 -> 6712 bytes
 RaspberryPiZero_node_rpio/ring.js       |   4 +++
 ring.json                               |  14 +++++++--
 4 files changed, 52 insertions(+), 2 deletions(-)
 create mode 100644 RaspberryPiZero_node_rpio/index.html
 create mode 100755 RaspberryPiZero_node_rpio/node_rpio.png
 create mode 100644 RaspberryPiZero_node_rpio/ring.js

diff --git a/RaspberryPiZero_node_rpio/index.html b/RaspberryPiZero_node_rpio/index.html
new file mode 100644
index 0000000..d577711
--- /dev/null
+++ b/RaspberryPiZero_node_rpio/index.html
@@ -0,0 +1,36 @@
+<html>
+<head>
+<style>
+pre code {
+  background-color: #eee;
+  border: 1px solid #999;
+  display: block;
+  padding: 20px;
+}
+</style>
+
+
+</head>
+<body>
+
+<h1>RaspberryPi Zero W with BCM2835</h1>
+
+<figure>
+<img src='node_rpio.png'>
+<figcaption>Ring oscillator with node-rpio.</figcaption>
+</figure>
+
+<p>This ring oscillator uses the <a href='https://github.com/jperkin/node-rpio'>node rpio</a> from Jonathan Perkin.  The code is available <a href='ring.js'>here</a>, or visible below.</p>
+
+<pre>
+<code>
+var rpio = require('rpio');
+rpio.open(3, rpio.OUTPUT);
+rpio.open(5, rpio.INPUT);
+while(1){rpio.write(3, 1-rpio.read(5) ); }
+</code>
+</pre>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/RaspberryPiZero_node_rpio/node_rpio.png b/RaspberryPiZero_node_rpio/node_rpio.png
new file mode 100755
index 0000000000000000000000000000000000000000..2906b51d4ab3bb2f0be5969b29c85305c8203b4e
GIT binary patch
literal 6712
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

literal 0
HcmV?d00001

diff --git a/RaspberryPiZero_node_rpio/ring.js b/RaspberryPiZero_node_rpio/ring.js
new file mode 100644
index 0000000..801a74f
--- /dev/null
+++ b/RaspberryPiZero_node_rpio/ring.js
@@ -0,0 +1,4 @@
+var rpio = require('rpio');
+rpio.open(3, rpio.OUTPUT);
+rpio.open(5, rpio.INPUT);
+while(1){rpio.write(3, 1-rpio.read(5) ); }
\ No newline at end of file
diff --git a/ring.json b/ring.json
index bea7887..fc29ede 100644
--- a/ring.json
+++ b/ring.json
@@ -127,9 +127,19 @@
 			"subdirectory_path":"RaspberryPiZero_bcm2835",
 			"dev_board_price":5.00,
 			"dev_board_sales_link":"",
-			"ic_price":2.00,
+			"ic_price":0.00,
 			"ic_sales_link":"",
 			"ring_period":350
-		}		
+		},
+		{
+			"name":"RPiZero, node rpio",
+			"serial_number":"",
+			"subdirectory_path":"RaspberryPiZero_node_rpio",
+			"dev_board_price":5.00,
+			"dev_board_sales_link":"",
+			"ic_price":0.00,
+			"ic_sales_link":"",
+			"ring_period":7648
+		}			
 	]
 }
\ No newline at end of file
-- 
GitLab