aboutsummaryrefslogtreecommitdiff
path: root/Pd_firmware
diff options
context:
space:
mode:
authorHans-Christoph Steiner <eighthave@users.sourceforge.net>2006-05-18 20:24:18 +0000
committerHans-Christoph Steiner <eighthave@users.sourceforge.net>2006-05-18 20:24:18 +0000
commit7eb547273c4177d857199384898cf5e6db1f711f (patch)
tree74572d71b0dce8956d94037757c277562e0314e0 /Pd_firmware
parent925a2b894914b20d3a09e410ab69f95a9bf3b935 (diff)
first sketch of Pd-controlled firmware
svn path=/trunk/externals/hardware/arduino/; revision=5088
Diffstat (limited to 'Pd_firmware')
-rw-r--r--Pd_firmware/Pd_firmware.pde111
1 files changed, 111 insertions, 0 deletions
diff --git a/Pd_firmware/Pd_firmware.pde b/Pd_firmware/Pd_firmware.pde
new file mode 100644
index 0000000..7e0becd
--- /dev/null
+++ b/Pd_firmware/Pd_firmware.pde
@@ -0,0 +1,111 @@
+/* Pd_firmware
+ * ------------------
+ *
+ *
+ * It was designed to work with the Pd patch of the same
+ * name in: Help -> Browser -> examples -> hardware
+ *
+ * (cleft) 2006 Hans-Christoph Steiner
+ * @author: Hans-Christoph Steiner
+ * @date: 2006-03-10
+ * @location: Polytechnic University, Brooklyn, New York, USA
+ */
+
+/*
+ * Pduino protocol
+ * ===============
+ * data: 0-127 control: 128-255
+ *
+ * Pd->Arduino commands
+ * --------------------
+ * 150 - next byte sets PWM0 value
+ * 151 - next byte sets PWM1 value
+ * 152 - next byte sets PWM2 value
+ * 200-213 - set digital pin 0-13 to input
+ * 220-233 - set digital pin 0-13 to output
+ *
+ *
+ * Pd->Arduino byte cycle
+ * ----------------------
+ * 0 cycle marker (255/11111111)
+ * 1 digitalOut 0-6 bitmask
+ * 2 digitalOut 7-13 bitmask
+ *
+ * Arduino->Pd byte cycle
+ * ----------------------
+ * 0 digitalIn 0-6 bitmask
+ * 1 digitalIn 7-13 bitmask
+ * 2 analogIn0 byte0
+ * 3 analogIn0 byte1
+ * 4 analogIn1 byte0
+ * 5 analogIn1 byte1
+ * 6 analogIn2 byte0
+ * 7 analogIn2 byte1
+ * 8 analogIn3 byte0
+ * 9 analogIn3 byte1
+ * 10 analogIn4 byte0
+ * 11 analogIn4 byte1
+ * 12 analogIn5 byte0
+ * 13 analogIn5 byte1
+ * 14 cycle marker (255/11111111)
+ *
+ *
+ * TX RX
+ * -----------------------
+ *
+ */
+
+/*
+ * CAUTION!! Be careful with the Serial Monitor, it could freeze
+ * your computer with this firmware running! It outputs data
+ * without a delay() so its very fast.
+ */
+
+
+byte i;
+
+// this int serves as an array of bits to store pin status
+int digitalPinStatus;
+
+byte analogPin;
+int analogData;
+
+void outputDigital(byte startPin) {
+ byte digitalPin;
+ byte digitalPinBit;
+ byte digitalOutputByte;
+ byte digitalData;
+ for(i=0;i<7;++i)
+ {
+ digitalPin = i+startPin;
+ digitalPinBit = 2^digitalPin;
+ // only read the pin if its set to input
+ if(digitalPinStatus & digitalPinBit)
+ digitalData = digitalRead(digitalPin);
+ else
+ digitalData = 0;
+ digitalOutputByte = digitalOutputByte + (2^(i+1-startPin)*digitalData);
+ }
+ printByte(digitalOutputByte);
+}
+
+void setup() {
+ beginSerial(9600);
+}
+
+void loop() {
+ // read all digital pins
+ outputDigital(0);
+ outputDigital(7);
+ /*
+ * get analog in
+ */
+ analogData = analogRead(analogPin);
+ // these two bytes get converted back into the whole number in Pd
+ printByte(analogData / 32); // div by 32 for the big byte
+ printByte(analogData % 32); // mod by 32 for the small byte
+ ++analogPin;
+ if (analogPin > 5) analogPin = 0;
+ /* end with the cycle marker */
+ printByte(255);
+}