Arduino Step Sequencerrrrrrrrrrrrr (ASSrrrrrrgh!)

After several bug checking we finished a simple Arduino 16Step Sequencer found and documented on the nerd. Thanks to the persistence of a Pechblenda tentacle, the sequencer sounds as it should sound and pots and pushbuttons are working great.20140118_055036

From now on, we will implement the project with some changes to the code using arduino IDE platform, and we also want to add some more pots and to replace some pots with LDR so the synth becomes more playable between/for beings interaction.

By now the synth sequencer is solid, kind of strong and kind of looks like a box. But we want that next project gets more modular and flexible, so it can be used in any part of someones body or curved structure.  As well as constructing it with the arduino pro mini instead of ardunio mega (in this case is done with mega), with the pro mini its dimensions will be considerably reduced.

So, we extract this circuit from 2 projects: from instructables , who extract it from this nice website beavisaudio.

In those two projects you can find the schematics and the code we used. However, here come 2 issues that need to be clarified so beginners don’t become crazy when assemblying and codifying it.

First of all, the main project 20140118_055445(beavis) comes with a LCD (to visualize the variables of pots). 20140118_061808However, instructables and us did not use the LCD and, for instance, we erased the LCD code part. Just cause it is a very simple sequencer, and LCD (and their dimensions) require a bigger usage and effectiveness.

Second one. we also got some problems when verifying the code, but finally we got it and the code is the next: (also copied from beavis)

 

 

You can hear how it sounds here; a small demo:  https://soundcloud.com/pech_synth/sets/arduino-16step-sequencer

/* ======================================================================
Arduino Punk Console
A simple programmable 8 step tone sequencer
by dano/beavisaudio.com
Revs
———————————–
15 Sept  djh  initial version
======================================================================*/

//we included those libraries cause some sound was not perfectly working and we thought we were missing those, however we finally think that there is no need.

#include <<toneAC2.h>>
#include <<toneAC.h>>

// Map all the input and output pins
#define AnalogInFrequency 1
#define AnalogInTempo 2
#define AnalogInDuration 0
#define DigitalOutSignal 11
#define DigitalInSwitch0 2
#define DigitalInSwitch1 3
#define DigitalInSwitch2 4
#define DigitalInSwitch3 5
#define DigitalInSwitch4 6
#define DigitalInSwitch5 7
#define DigitalInSwitch6 8
#define DigitalInSwitch7 9
#define DigitalInStartStop 10
#define DigitalOutLED 12
// Set up the array for each step
int steps[] = {100,120,140,160,180,200,220,240};
// misc housekeeping
int duration = 50;
int pitchval = 1;
int fPlayMode = true;
int lastPushedStep = -1;
// Initialize the tempo
int tempo = 100;
void setup()
{
// setup pin modes (Digital pins are input by default, but
// I like to set ’em explicitly just so the code is clear.
pinMode (DigitalInSwitch0, INPUT);
pinMode (DigitalInSwitch1, INPUT);
pinMode (DigitalInSwitch2, INPUT);
pinMode (DigitalInSwitch3, INPUT);
pinMode (DigitalInSwitch4, INPUT);
pinMode (DigitalInSwitch5, INPUT);
pinMode (DigitalInSwitch6, INPUT);
pinMode (DigitalInSwitch7, INPUT);
pinMode (DigitalInStartStop, INPUT);
pinMode (DigitalOutSignal, OUTPUT);
pinMode (DigitalOutLED, OUTPUT);

}

void loop()
{
// Main sequence loop
for (int i=0; i<8; i++)
{
// Are we playing or stopping?
fPlayMode = digitalRead (DigitalInStartStop);
digitalWrite (DigitalOutLED, HIGH);
// Check the Hardware
readSwitches();
readPots();

// update the display
updateDisplay();

// Make the noise
if (fPlayMode)
{
freqout (steps[i], duration);
}
digitalWrite (DigitalOutLED, LOW);

// Pause between steps
delay (tempo);
}
}

void updateDisplay()
{
//Serial.write (254, BYTE);
//Serial.write (192, BYTE);
Serial.print (“T:”);
Serial.print (tempo);
Serial.print (” d:”);
Serial.print (duration);
if (lastPushedStep != -1)
{
Serial.print (“*”);
Serial.print (lastPushedStep);
}
}
// Read the current values of the pots, called from the loop.
void readPots ()
{
tempo = (analogRead (AnalogInTempo) * 1.9);
duration = (analogRead (AnalogInDuration));
}
// Read the current values of the switches and
// if pressed, replace the switch’s slot frequency
// by reading the frequency pot.
void readSwitches()
{
// reset last pushed button number
lastPushedStep = -1;

// check switch 0, if pressed, get the current freq into step 0, etc. etc.
if (digitalRead (DigitalInSwitch0) == HIGH)
{
steps[0] = analogRead(AnalogInFrequency);
lastPushedStep = 1;
}

else if (digitalRead (DigitalInSwitch1) == HIGH)
{
steps[1] = analogRead(AnalogInFrequency);
lastPushedStep = 2;
}

else if (digitalRead (DigitalInSwitch2) == HIGH)
{
steps[2] = analogRead(AnalogInFrequency);
lastPushedStep = 3;
}
else if (digitalRead (DigitalInSwitch3) == HIGH)
{
steps[3] = analogRead(AnalogInFrequency);
lastPushedStep = 4;
}
else if (digitalRead (DigitalInSwitch4) == HIGH)
{
steps[4] = analogRead(AnalogInFrequency);
lastPushedStep = 5;
}
else if (digitalRead (DigitalInSwitch5) == HIGH)
{
steps[5] = analogRead(AnalogInFrequency);
lastPushedStep = 6;
}
else if (digitalRead (DigitalInSwitch6) == HIGH)
{
steps[6] = analogRead(AnalogInFrequency);
lastPushedStep = 7;
}
else if (digitalRead (DigitalInSwitch7) == HIGH)
{
steps[7] = analogRead(AnalogInFrequency);
lastPushedStep = 8;
}
}

//freqout code by Paul Badger
// freq – frequency value
// t – time duration of tone
void freqout(int freq, int t)
{
int hperiod;     //calculate 1/2 period in us
long cycles, i;

// subtract 7 us to make up for digitalWrite overhead – determined empirically
hperiod = (500000 / ((freq – 7) * pitchval));

// calculate cycles
cycles = ((long)freq * (long)t) / 1000;    // calculate cycles
for (i=0; i<= cycles; i++)
{              // play note for t ms
digitalWrite(DigitalOutSignal, HIGH);
delayMicroseconds(hperiod);
digitalWrite(DigitalOutSignal, LOW);
delayMicroseconds(hperiod – 1);     // – 1 to make up for fractional microsecond in digitaWrite overhead
}
}

—————————————————————

————————————————————

A Step Sequencer that I found on the nerd and that i loooove is the ASS!!!  Arduino Step Sequencer!  I am going to keep it close to me cause it might be the next project. ;)

 

ASSSSS FOR ALL OF USSSSS

One thought on “Arduino Step Sequencerrrrrrrrrrrrr (ASSrrrrrrgh!)”

Leave a Reply

Your email address will not be published. Required fields are marked *