diff --git a/sanro/sanro.ino b/sanro/sanro.ino index b2facf9..cae4736 100644 --- a/sanro/sanro.ino +++ b/sanro/sanro.ino @@ -12,40 +12,41 @@ // ceramic sensors (the same sensors used in electirc drum kit). // No longer need microphones. -#define MODE_DEBUG 0 - #define CHANNELS 2 -// Caches for the soundwave and power #define SAMPLE_CACHE_LENGTH 12 #define POWER_CACHE_LENGTH 3 -// Light and heacy hit thresholds -#define LIGHT_THRES 5000 +#define LIGHT_THRES 8000 #define HEAVY_THRES 20000 -// Forced sampling frequency #define FORCED_FREQ 1000 #include "cache.h" unsigned long int lastTime; -int channelSample [CHANNELS]; -int lastChannelSample [CHANNELS]; -Cache sampleCache [CHANNELS]; +float channelSample [CHANNELS]; +float lastChannelSample [CHANNELS]; +Cache sampleCache [CHANNELS]; -long int power [CHANNELS]; -Cache powerCache [CHANNELS]; +float power [CHANNELS]; +Cache powerCache [CHANNELS]; bool triggered [CHANNELS]; -int pins[] = {A0, A1}; // Don, Kat +int input_pins[] = {A0, A1}; // Don, Kat +int output_pins[] = {A2, A3, A4, A5}; // Left Don, Left Kat, Right Don, Right Kat void setup() { + pinMode(A0, INPUT); + pinMode(A1, INPUT); + pinMode(A2, OUTPUT); + pinMode(A3, OUTPUT); + pinMode(A4, OUTPUT); + pinMode(A5, OUTPUT); Serial.begin (9600); - Keyboard.begin (); - analogReference (DEFAULT); + analogReference (INTERNAL); for (short int i = 0; i < CHANNELS; i++) { power [i] = 0; lastChannelSample [i] = 0; @@ -58,22 +59,22 @@ void loop() { for (short int i = 0; i < CHANNELS; i++) { - channelSample[i] = analogRead (pins [i]); - sampleCache [i].put (channelSample [i] - lastChannelSample [i]); + channelSample[i] = analogRead(input_pins[i]); + sampleCache[i].put(channelSample [i]); long int tempInt; - tempInt = sampleCache [i].get (1); - power [i] -= tempInt * tempInt; - tempInt = sampleCache [i].get (); - power [i] += tempInt * tempInt; - if (power [i] < LIGHT_THRES) { - power [i] = 0; - } + tempInt = sampleCache[i].get(1); + power[i] -= tempInt * tempInt; + tempInt = sampleCache[i].get(); + power[i] += tempInt * tempInt; - powerCache [i].put (power [i]); - lastChannelSample [i] = channelSample [i]; - if (powerCache [i].get (1) == 0) { - triggered [i] = false; + powerCache[i].put(power[i]); + lastChannelSample[i] = channelSample[i]; + if (powerCache[i].get(1) < LIGHT_THRES) { + triggered[i] = false; + digitalWrite(output_pins[i], HIGH); + digitalWrite(output_pins[i] + 2, HIGH); + digitalWrite(LED_BUILTIN, LOW); } if (!triggered [i]) { @@ -82,38 +83,21 @@ void loop() { break; } else if (powerCache [i].get (1) >= HEAVY_THRES) { triggered [i] = true; - Keyboard.print (heavyKeys [i]); + digitalWrite(output_pins[i], LOW); + digitalWrite(output_pins[i] + 2, LOW); + digitalWrite(LED_BUILTIN, HIGH); } else if (powerCache [i].get (1) >= LIGHT_THRES) { triggered [i] = true; - Keyboard.print (lightKeys [i]); + digitalWrite(output_pins[i], LOW); + digitalWrite(LED_BUILTIN, HIGH); } } } - -#if MODE_DEBUG - Serial.print (power [i]); - Serial.print ("\t"); -#endif -// End of each channel - } - -#if MODE_DEBUG - Serial.print (50000); - Serial.print ("\t"); - Serial.print (0); - Serial.print ("\t"); - - Serial.println (""); -#endif - -// Force the sample frequency to be less than 1000Hz - unsigned int frameTime = micros () - lastTime; - lastTime = micros (); - if (frameTime < FORCED_FREQ) { - delayMicroseconds (FORCED_FREQ - frameTime); - } else { - // Performance bottleneck; - Serial.print ("Exception: forced frequency is too high for the microprocessor to catch up."); + unsigned int frameTime = micros () - lastTime; + lastTime = micros (); + if (frameTime < FORCED_FREQ) { + delayMicroseconds (FORCED_FREQ - frameTime); + } } }