Merge branch 'writeup'
[miniband.git] / release / instruments3 / instruments3.ino
diff --git a/release/instruments3/instruments3.ino b/release/instruments3/instruments3.ino
new file mode 100644 (file)
index 0000000..61442ff
--- /dev/null
@@ -0,0 +1,86 @@
+const int NUMBER_OF_MARACAS = 2;
+const int MARACAS_PINS[] = {6, 7};
+const int MARACAS_DELAY = 5000;
+
+const int NUMBER_OF_DRUMS= 4;
+const int DRUM_PINS[] = {8, 9, 10, 11};
+const int DRUM_DELAY = 2500;
+
+const int GUITAR_THRESHOLD = 20;
+const int GUITAR_PIN = A0;
+const int GUITAR_DELAY = 5000;
+
+int maracas_states[] = {-1,-1};
+int maracas_delays[] = {0, 0};
+
+int drum_delays[] = {0, 0, 0, 0};
+
+int guitar_delay = 0;
+
+void setup() {
+  for (int i = 0; i < NUMBER_OF_MARACAS; i++) {
+    pinMode(MARACAS_PINS[i], INPUT);
+  }
+  for (int i = 0; i < NUMBER_OF_DRUMS; i++) {
+    pinMode(DRUM_PINS[i], INPUT);
+  }
+  Serial.begin(9600);
+}
+
+void loop() {
+  maracas();
+  drums();
+  guitar();
+  update_delays();  
+}
+
+
+void maracas() {
+  for (int i = 0; i < NUMBER_OF_MARACAS; i++) {
+    int newState = digitalRead(MARACAS_PINS[i]);
+    if (newState != maracas_states[i] && maracas_delays[i] < 1) {
+      Serial.print("maracas,");
+      Serial.print(i);
+      Serial.println();
+      maracas_states[i] = newState;
+      maracas_delays[i] = MARACAS_DELAY;
+    }
+  }
+}
+
+void drums() {
+  for (int i = 0; i < NUMBER_OF_DRUMS; i++) {
+    if (digitalRead(DRUM_PINS[i]) == HIGH && drum_delays[i] < 1) {
+      Serial.print("drum,");
+      Serial.print(i);
+      Serial.println();
+      drum_delays[i] = DRUM_DELAY;
+    }
+  }
+}
+
+void guitar() {
+  int pitch = analogRead(GUITAR_PIN);
+  if (pitch >= GUITAR_THRESHOLD && guitar_delay < 1) {
+    Serial.print("guitar,");
+    Serial.print(pitch);
+    Serial.println();
+    guitar_delay = GUITAR_DELAY;
+  }
+}
+
+void update_delays() {
+  for (int i = 0; i < NUMBER_OF_MARACAS; i++) {
+    if (maracas_delays[i] > 0) {
+      maracas_delays[i] -= 1;
+    }
+  }
+  for (int i = 0; i < NUMBER_OF_DRUMS; i++) {
+    if (drum_delays[i] > 0) {
+      drum_delays[i] -= 1;
+    }
+  }
+  if (guitar_delay > 0) {
+    guitar_delay -= 1;
+  }
+}