This page contains supplementary materials for 22 Swamps Towards the Abolishment of the Sun. Where applicable, these files are dedicated to the public domain under CC0 1.0.
// Preliminary copy of the source code. Not yet feature-complete. ;>
// https://www.arduino.cc/reference/en/libraries/capacitivesensor/
// Arduino CapacitiveSensor. Author: Paul Bagder, Paul Stoffregen
#include <CapacitiveSensor.h>
// https://www.arduino.cc/reference/en/libraries/usb-midi/
// Arduino USB-MIDI Transport. Author: lathoub
#include <USB-MIDI.h>
float peakPitch = 0;
float mappedPitch = 0;
float currPitch = 0;
CapacitiveSensor cs_9_8 = CapacitiveSensor(3,4); // 1M resistor between pins 4 & 8, pin 8 is sensor pin, add a wire and or foil
//CapacitiveSensor cs_4_8 = CapacitiveSensor(8,9); // 1M resistor between pins 4 & 8, pin 8 is sensor pin, add a wire and or foil
USBMIDI_CREATE_DEFAULT_INSTANCE();
void setup()
{
Serial.begin(9600);
MIDI.begin(1);
}
int thresh = 1500;
int currentRead = 0;
int pot0 = 0;
int pot1 = 0;
int pot2 = 0;
int pot3 = 0;
void loop()
{
long sensor1 = 0;
long sens2 = 0;
currentRead += 1;
currPitch += cs_9_8.capacitiveSensor(40);
if (currentRead >= 4)
{
currPitch /= 4;
Serial.print(currPitch); Serial.print(",");
if (currPitch > 0) // Get upper part of the frequency spectrum of the pitch input
{
if (currPitch > 10000)
currPitch = peakPitch;
if (currPitch > peakPitch) // Check if the current pitch is higher than the previous
peakPitch = currPitch; // If it's higher, set the peak at the current pitch
mappedPitch = map(currPitch, 0, peakPitch, -10, 127); // Maps readings to the appropriate frequency range I want to use. The ADC readings from 550 to 1023 are mapped to frequencies between 5000 and 10Hz. I noticed that the antenna was having constant peaks at 400-500, irrelevant of the objects near it, so I used the map function to get rid of values under 550
}
else peakPitch = 0;
Serial.print(mappedPitch);
if(mappedPitch > 0)
{
if(digitalRead(2) == HIGH)
{
MIDI.sendControlChange(3, mappedPitch, 1);
}
}
currentRead = 0;
currPitch = 0;
Serial.print(",");
Serial.println(0);
}
if (pot0 <= int(analogRead(A0)/8) - 2 || pot0 >= int(analogRead(A0)/8) + 2)
{
MIDI.sendControlChange(10, int(analogRead(A0)/8), 1);
pot0 = int(analogRead(A0)/8);
}
if (pot1 <= int(analogRead(A1)/8) - 2 || pot1 >= int(analogRead(A1)/8) + 2)
{
MIDI.sendControlChange(11, int(analogRead(A1)/8), 1);
pot1 = int(analogRead(A1)/8);
}
if (pot2 <= int(analogRead(A2)/8) - 2 || pot2 >= int(analogRead(A2)/8) + 2)
{
MIDI.sendControlChange(12, int(analogRead(A2)/8), 1);
pot2 = int(analogRead(A2)/8);
}
if (pot3 <= int(analogRead(A3)/8) - 2 || pot3 >= int(analogRead(A3)/8) + 2)
{
MIDI.sendControlChange(13, int(analogRead(A3)/8), 1);
pot3 = int(analogRead(A3)/8);
}
delay(10);
}