
Here’s a great music project you can build with an Arduino… Beavis Audio Research writes -
This is my first build using an arduino microcontroller. I wanted to create a simple tone output device along the lines of the 555-based atari punk console, but using solely the mcu as the tone generator. Unfortunately, that was just too simple a task with a microcontroller to play with–it was done in about five minutes and my mind was already forging ahead with a bunch of stupid ideas.Since coding the arduino is simple, I decided to set up eight tone “slots” and then sequence through them. A frequency knob would control the freq of each slot, and a separate tone duration control would allow me to get awesome eighties video game tones. Figuring out the component wiring wasn’t too tough once I’d figured out the basics of reading analog pots and digital switches.
Beavis Audio Research – Link.










That is bitchin’!
I was just looking into getting an Arduino kit today and this definitely pushed my decision.
I have made an APC before but yours is much cooler.
Great job!!!!
the link is dead! =(
Anyone has an idea where to find more information about this project? Maybe even the code…
//code
/* ======================================================================
Arduino Punk Console
A simple programmable 8 step tone sequencer
by dano/beavisaudio.com
Revs
———————————–
15 Sept djh initial version
======================================================================*/
// 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);
// setup comms for the LCD display
Serial.begin(9600);
StartupMessage();
}
void StartupMessage()
{
clearLCD();
Serial.print (“BEAVIS: Arduino”);
delay(300);
Serial.print (254, BYTE);
Serial.print (192, BYTE);
Serial.print (“Punk Console!”);
delay (2000);
clearLCD();
Serial.print (“Beavis: APC”);
}
void clearLCD()
{
Serial.print(254, BYTE);
Serial.print(1, BYTE);
}
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.print (254, BYTE);
Serial.print (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
}
}
link: http://www.beavisaudio.com/Projects/digital/ArduinoPunkConsole/index.htm
Thank you!!! =)
// What's Trending
Raspberry Pi Design Contest
Maker Faire: Day One
A Photo Tour of Maker Faire
Arduino Announces New Wireless Linux Board
Seventeen Sneaky Secret Hides
10 Things to Connect to Your Raspberry Pi
New Arduino Robot Available in the Maker Shed at Maker Faire
Maker Faire Bay Area Ready for Showtime
// What's Shared
A better way to slice a pumpkin
DIY Nerf Darts
In the Maker Shed: Minty Boost USB Charger
100 Dollar Store Organization Ideas for Craft Rooms and Beyond
Mad’s Mouse House
Lace Princess Crowns
I Have a (Puzzling) Dream
Play the Rings of a Tree Trunk Like a Record
// Most Commented
DIY Hacks & How To’s: Get Emergency Power from a Phone Line
Resin Casting: Going from CAD to Engineering-Grade Plastic Parts
Ten Tips for Screws and Screwdrivers
Ten Tips for Better Measurement
Makers on TV: Big Brain Theory
Pitches with Prototypes: Solar Tracker
Tool Review: BioLite CampStove
Grow: A Portable CNC Router System