From: Neil Smith Date: Fri, 19 Apr 2013 19:27:36 +0000 (+0100) Subject: Merge branch 'master' of github.com:NeilNjae/miniband into writeup X-Git-Url: https://git.njae.me.uk/?a=commitdiff_plain;h=491387e8f2dee85fd074f9eb791c8d246c50b77d;hp=929352cf7ac2a58950868d51d558dc133712e3ec;p=miniband.git Merge branch 'master' of github.com:NeilNjae/miniband into writeup --- diff --git a/.Rhistory b/.Rhistory new file mode 100644 index 0000000..e69de29 diff --git a/release/cymbal.mp3 b/release/cymbal.mp3 new file mode 100644 index 0000000..e56c01c Binary files /dev/null and b/release/cymbal.mp3 differ diff --git a/release/drums/drums.ino b/release/drums/drums.ino new file mode 100644 index 0000000..6ebd466 --- /dev/null +++ b/release/drums/drums.ino @@ -0,0 +1,27 @@ + +const int NUMBER_OF_DRUMS = 4; +const int DELAY = 500; + +const int PINS[4] = { 8, 9, 10, 11 }; +int pinDelays[4] = { 0, 0, 0, 0 }; + +void setup() { + for (int i = 0; i < NUMBER_OF_DRUMS; i++) { + pinMode(PINS[i], INPUT); + } + Serial.begin(57600); +} + +void loop() { + for (int i = 0; i < NUMBER_OF_DRUMS; i++) { + if (digitalRead(PINS[i]) == HIGH && pinDelays[i] < 1) { + Serial.print("drum,"); + Serial.println(i); + pinDelays[i] = DELAY; + } + if (pinDelays[i] > 0) { + pinDelays[i] -= 1; + } + } +} + diff --git a/release/guitar.gif b/release/guitar.gif new file mode 100644 index 0000000..b453957 Binary files /dev/null and b/release/guitar.gif differ diff --git a/release/guitar/guitar.ino b/release/guitar/guitar.ino new file mode 100644 index 0000000..f9f530c --- /dev/null +++ b/release/guitar/guitar.ino @@ -0,0 +1,26 @@ + +const int THRESHOLD = 10; +const int GUITAR_PIN = A0; +const int PINLIMIT = 5000; + +int val; +int pinDelay; + +void setup() { + Serial.begin(57600); +} + +void loop() { + val = analogRead(GUITAR_PIN); + + if (val >= THRESHOLD && pinDelay < 1) { + Serial.print("guitar,"); + Serial.println(val); + pinDelay = PINLIMIT; + } + + if (pinDelay > 0) { + pinDelay = pinDelay - 1; + } +} + diff --git a/release/guitar1.mp3 b/release/guitar1.mp3 new file mode 100644 index 0000000..09fb0b7 Binary files /dev/null and b/release/guitar1.mp3 differ diff --git a/release/guitar2.mp3 b/release/guitar2.mp3 new file mode 100644 index 0000000..9ec4572 Binary files /dev/null and b/release/guitar2.mp3 differ diff --git a/release/guitar3.mp3 b/release/guitar3.mp3 new file mode 100644 index 0000000..ca30fc6 Binary files /dev/null and b/release/guitar3.mp3 differ diff --git a/release/guitar4.mp3 b/release/guitar4.mp3 new file mode 100644 index 0000000..234a88d Binary files /dev/null and b/release/guitar4.mp3 differ diff --git a/release/guitar5.mp3 b/release/guitar5.mp3 new file mode 100644 index 0000000..d49a932 Binary files /dev/null and b/release/guitar5.mp3 differ diff --git a/release/hihat.mp3 b/release/hihat.mp3 new file mode 100644 index 0000000..3bf8094 Binary files /dev/null and b/release/hihat.mp3 differ diff --git a/release/maracas.gif b/release/maracas.gif new file mode 100644 index 0000000..c5cca75 Binary files /dev/null and b/release/maracas.gif differ diff --git a/release/maracas.mp3 b/release/maracas.mp3 new file mode 100644 index 0000000..38789a5 Binary files /dev/null and b/release/maracas.mp3 differ diff --git a/release/maracas/maracas.ino b/release/maracas/maracas.ino new file mode 100644 index 0000000..8410aed --- /dev/null +++ b/release/maracas/maracas.ino @@ -0,0 +1,23 @@ +int newState; +int states[] = {-1,-1}; +const int pins[] = {6, 7}; +const int wait = 500; + +void setup() { + for (int i = 0; i < 2; i++) { + pinMode(pins[i], INPUT); + } + Serial.begin(57600); +} + +void loop() { + for (int i = 0; i < 2; i++) { + newState = digitalRead(pins[i]); + if (newState != states[i]) { + Serial.println("maracas,1023"); + states[i] = newState; + delay(wait); + } + } +} + diff --git a/release/miniband1.sb b/release/miniband1.sb new file mode 100644 index 0000000..6f1be4b Binary files /dev/null and b/release/miniband1.sb differ diff --git a/release/miniband2.sb b/release/miniband2.sb new file mode 100644 index 0000000..263b9da Binary files /dev/null and b/release/miniband2.sb differ diff --git a/release/miniband3.sb b/release/miniband3.sb new file mode 100644 index 0000000..39bef79 Binary files /dev/null and b/release/miniband3.sb differ diff --git a/release/music-maker-handler.py b/release/music-maker-handler.py new file mode 100755 index 0000000..c935c15 --- /dev/null +++ b/release/music-maker-handler.py @@ -0,0 +1,181 @@ +# This code is copyright ...... under the GPL v2. +# This code is derived from scratch_gpio_handler by Simon Walters, which +# is derived from scratch_handler by Thomas Preston +# Version 0.1: It's kind of working. + +from array import * +import threading +import socket +import time +import sys +import struct +import serial +import io +import datetime as dt +import logging + +PORT = 42001 +DEFAULT_HOST = '127.0.0.1' +BUFFER_SIZE = 240 #used to be 100 +SOCKET_TIMEOUT = 1 +DEVICES = ['/dev/ttyACM0', '/dev/ttyACM1','/dev/ttyACM3'] +#DEVICES = ['/dev/ttyACM0','/dev/ttyACM1'] +#DRUM_DEVICE = '/dev/ttyACM0' +#GUITAR_DEVICE = '/dev/ttyUSB1' +#MARACAS_DEVICE = '/dev/ttyACM1' +ARDUINO_BAUD_RATE = 57600 + +BROADCAST_NAMES = {'guitar': 'guitar', + 'drum': {0: 'cymbal', + 1: 'hihat', + 2: 'slowdrum', + 3: 'snare', + 4: 'tomtom'}, + 'maracas': 'maracas'} + +SENSOR_NAMES = {'guitar': 'guitar_pitch'} + +logging.basicConfig(level = logging.INFO) +#logging.basicConfig(level = logging.DEBUG) + +class MyError(Exception): + def __init__(self, value): + self.value = value + + def __str__(self): + return repr(self.value) + +class ScratchSender(threading.Thread): + def __init__(self, socket): + threading.Thread.__init__(self) + self.scratch_socket = socket + self._stop = threading.Event() + + def join(self,timeout=None): + self._stop.set() + threading.Thread.join(self, timeout) + + def stopped(self): + return self._stop.isSet() + + def run(self): + while not self.stopped(): + time.sleep(0.01) # be kind to cpu - not certain why :) + + def send_scratch_command(self, cmd): + n = len(cmd) + a = array('c') + a.append(chr((n >> 24) & 0xFF)) + a.append(chr((n >> 16) & 0xFF)) + a.append(chr((n >> 8) & 0xFF)) + a.append(chr(n & 0xFF)) + self.scratch_socket.send(a.tostring() + cmd) + + +class ArduinoListener(threading.Thread): + def __init__(self, device, speed, sender, instruments, values): + threading.Thread.__init__(self) + self.arduino_device = serial.Serial(device, speed, timeout=0.5) + self._stop = threading.Event() + self.scratch_sender = sender + self.instruments = instruments + self.values = values + logging.info("Started listener on port %s" % device) + + def join(self,timeout=None): + self._stop.set() + threading.Thread.join(self, timeout) + + def stopped(self): + return self._stop.isSet() + + def run(self): + self.arduino_device.readline() # discard the first (partial) line + while not self.stopped(): + logging.debug('Thread waiting for a signal') + try: + device_line = self.arduino_device.readline() + if device_line : + instrument, instrument_value_string = device_line.rstrip().split(',', 1) + instrument_value = int(instrument_value_string) + logging.info('Instrument: %s, Value: %d' % (instrument, instrument_value)) + if instrument in self.values: + try: + logging.info("sensor-update %s %d" % (self.values[instrument], (instrument_value * 100) / 1024)) + self.scratch_sender.send_scratch_command("sensor-update %s %d" % (self.values[instrument], (instrument_value * 100) / 1024)) + except KeyError: + # Do nothing + pass + if instrument in self.instruments: + if isinstance(self.instruments[instrument], dict): + broadcast = self.instruments[instrument][instrument_value] + else: + broadcast = self.instruments[instrument] + try: + logging.info("broadcast %s" % broadcast) + self.scratch_sender.send_scratch_command('broadcast %s' % broadcast) + except KeyError: + # Do nothing + pass + + except serial.SerialException: + logging.error('Serial exception') + logging.debug('Thread run() exiting') + + +def create_socket(host, port): + while True: + try: + logging.info('Connecting to Scratch') + scratch_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + scratch_sock.connect((host, port)) + break + except socket.error: + logging.warning("There was an error connecting to Scratch!") + logging.warning("I couldn't find a Mesh session at host: %s, port: %s" % (host, port)) + time.sleep(3) + return scratch_sock + +def cleanup_threads(threads): + logging.debug("Stopping %d threads" % len(threads)) + for thread in threads: + thread.join() + logging.debug("Threads joined") + +if __name__ == '__main__': + if len(sys.argv) > 1: + host = sys.argv[1] + else: + host = DEFAULT_HOST + +cycle_trace = 'start' +while True: + if (cycle_trace == 'disconnected'): + logging.info("Scratch disconnected") + cleanup_threads(listeners + sender) + time.sleep(1) + cycle_trace = 'start' + + if (cycle_trace == 'start'): + # open the socket + logging.info('Connecting to Scratch...') + the_socket = create_socket(host, PORT) + logging.info('Connected to Scratch') + the_socket.settimeout(SOCKET_TIMEOUT) + sender = ScratchSender(the_socket) + listeners = [ArduinoListener(device, ARDUINO_BAUD_RATE, sender, BROADCAST_NAMES, SENSOR_NAMES) for device in DEVICES] + cycle_trace = 'running' + logging.info("Listeners running....") + sender.start() + for listener in listeners: + listener.start() + + # wait for ctrl+c + try: + #just pause + time.sleep(0.1) + except KeyboardInterrupt: + logging.warning("Interrrupted") + cleanup_threads(listeners + [sender]) + sys.exit() + diff --git a/release/scratchthumbs.db b/release/scratchthumbs.db new file mode 100644 index 0000000..31aaa37 Binary files /dev/null and b/release/scratchthumbs.db differ diff --git a/release/slowdrum.mp3 b/release/slowdrum.mp3 new file mode 100644 index 0000000..1aadcf3 Binary files /dev/null and b/release/slowdrum.mp3 differ diff --git a/release/snare.mp3 b/release/snare.mp3 new file mode 100644 index 0000000..eac32da Binary files /dev/null and b/release/snare.mp3 differ diff --git a/release/tomtom.mp3 b/release/tomtom.mp3 new file mode 100644 index 0000000..9520eb5 Binary files /dev/null and b/release/tomtom.mp3 differ diff --git a/writeup/.directory b/writeup/.directory new file mode 100644 index 0000000..cdbb188 --- /dev/null +++ b/writeup/.directory @@ -0,0 +1,4 @@ +[Dolphin] +Timestamp=2013,4,19,20,12,1 +Version=3 +ViewMode=1 diff --git a/writeup/drums-script.png b/writeup/drums-script.png new file mode 100644 index 0000000..767957b Binary files /dev/null and b/writeup/drums-script.png differ diff --git a/writeup/drums.fzz b/writeup/drums.fzz new file mode 100644 index 0000000..c44172a Binary files /dev/null and b/writeup/drums.fzz differ diff --git a/writeup/drums_bb.png b/writeup/drums_bb.png new file mode 100644 index 0000000..857eeb0 Binary files /dev/null and b/writeup/drums_bb.png differ diff --git a/writeup/drums_schem.png b/writeup/drums_schem.png new file mode 100644 index 0000000..22d54d3 Binary files /dev/null and b/writeup/drums_schem.png differ diff --git a/writeup/enable-remote-sensors.png b/writeup/enable-remote-sensors.png new file mode 100644 index 0000000..fa30c52 Binary files /dev/null and b/writeup/enable-remote-sensors.png differ diff --git a/writeup/guitar.fzz b/writeup/guitar.fzz new file mode 100644 index 0000000..78aac9a Binary files /dev/null and b/writeup/guitar.fzz differ diff --git a/writeup/guitar_bb.png b/writeup/guitar_bb.png new file mode 100644 index 0000000..8966d03 Binary files /dev/null and b/writeup/guitar_bb.png differ diff --git a/writeup/guitar_schem.png b/writeup/guitar_schem.png new file mode 100644 index 0000000..d03ea67 Binary files /dev/null and b/writeup/guitar_schem.png differ diff --git a/writeup/maracas-script.png b/writeup/maracas-script.png new file mode 100644 index 0000000..0f3957b Binary files /dev/null and b/writeup/maracas-script.png differ diff --git a/writeup/maracas.fzz b/writeup/maracas.fzz new file mode 100644 index 0000000..60941d2 Binary files /dev/null and b/writeup/maracas.fzz differ diff --git a/writeup/maracas_bb.png b/writeup/maracas_bb.png new file mode 100644 index 0000000..77050b0 Binary files /dev/null and b/writeup/maracas_bb.png differ diff --git a/writeup/maracas_schem.png b/writeup/maracas_schem.png new file mode 100644 index 0000000..b766079 Binary files /dev/null and b/writeup/maracas_schem.png differ diff --git a/writeup/miniband.doc b/writeup/miniband.doc new file mode 100644 index 0000000..dfc762d Binary files /dev/null and b/writeup/miniband.doc differ diff --git a/writeup/miniband.odt b/writeup/miniband.odt new file mode 100644 index 0000000..37a7488 Binary files /dev/null and b/writeup/miniband.odt differ