Arduino steg Sequencer (3 / 5 steg)
Steg 3: kod
/* ======================================================================
Arduino Punk konsolen
En enkel programmerbar 8 steg tonen sequencer
av dano/beavisaudio.com
Varvtal
-----------------------------------
15 Sept djh första versionen
======================================================================*/
Mappa alla inkommande och utgående stift
#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
Ställ in matrisen för varje steg
int steg [] = {100,120,140,160,180,200,220,240}.
misc hushållning
int längd = 50;
int pitchval = 1;
int fPlayMode = sant;
int lastPushedStep = -1;
Initiera tempot
int tempo = 100;
void setup()
{
ställa in pin lägen (Digital pins är ingång som standard, men
Jag lik till sätta 'em uttryckligen bara så koden är klart.
pinMode (DigitalInSwitch0, indata);
pinMode (DigitalInSwitch1, indata);
pinMode (DigitalInSwitch2, indata);
pinMode (DigitalInSwitch3, indata);
pinMode (DigitalInSwitch4, indata);
pinMode (DigitalInSwitch5, indata);
pinMode (DigitalInSwitch6, indata);
pinMode (DigitalInSwitch7, indata);
pinMode (DigitalInStartStop, indata);
pinMode (DigitalOutSignal, OUTPUT);
pinMode (DigitalOutLED, OUTPUT);
}
void loop()
{
Huvudserien loop
för (int jag = 0; jag < 8; i ++)
{
Vi spelar eller stoppa?
fPlayMode = digitalRead (DigitalInStartStop);
digitalWrite (DigitalOutLED, hög);
Kolla hårdvara
readSwitches();
readPots();
uppdatera skärmen
updateDisplay();
Göra buller
om (fPlayMode)
{
freqout (steg [i], varaktighet);
}
digitalWrite (DigitalOutLED, låg);
Paus mellan stegen
fördröjning (tempo);
}
}
void updateDisplay()
{
Serial.Print (254, BYTE);
Serial.Print (192, BYTE);
Serial.Print ("T:");
Serial.Print (tempo);
Serial.Print ("d:");
Serial.Print (varaktighet);
om (lastPushedStep! = -1)
{
Serial.Print ("*");
Serial.Print (lastPushedStep);
}
}
Läs aktuella värden för krukor, kallas från slingan.
void readPots)
{
tempo = (analogRead (AnalogInTempo) * 1,9);
längd = (analogRead (AnalogInDuration));
}
Läsa de aktuella värdena av växlar och
Om du trycker, ersätta växelns slot frekvens
genom att läsa frekvens potten.
void readSwitches()
{
återställa förra skjuts knappen nummer
lastPushedStep = -1;
Kolla växla 0, om du trycker, få den nuvarande freq in steg 0, etc. etc.
om (digitalRead (DigitalInSwitch0) == hög)
{
steg [0] = analogRead(AnalogInFrequency);
lastPushedStep = 1;
}
annars om (digitalRead (DigitalInSwitch1) == hög)
{
steg [1] = analogRead(AnalogInFrequency);
lastPushedStep = 2;
}
annars om (digitalRead (DigitalInSwitch2) == hög)
{
steg [2] = analogRead(AnalogInFrequency);
lastPushedStep = 3;
}
annars om (digitalRead (DigitalInSwitch3) == hög)
{
steg [3] = analogRead(AnalogInFrequency);
lastPushedStep = 4;
}
annars om (digitalRead (DigitalInSwitch4) == hög)
{
åtgärder [4] = analogRead(AnalogInFrequency);
lastPushedStep = 5;
}
annars om (digitalRead (DigitalInSwitch5) == hög)
{
steg [5] = analogRead(AnalogInFrequency);
lastPushedStep = 6;
}
annars om (digitalRead (DigitalInSwitch6) == hög)
{
steg [6] = analogRead(AnalogInFrequency);
lastPushedStep = 7.
}
annars om (digitalRead (DigitalInSwitch7) == hög)
{
steg [7] = analogRead(AnalogInFrequency);
lastPushedStep = 8;
}
}
freqout koden av Paul Badger
Freq - frekvensvärde
t - time varaktighet av tonar
void freqout (int freq, int t)
{
int hperiod; beräkna 1/2 period i oss
långa cykler, i.
subtrahera 7 US att kompensera för digitalWrite overhead - bestäms empiriskt
hperiod = (500000 / ((freq-7) * pitchval));
beräkna cykler
cykler = ((långa) freq * (långa) t) / 1000; beräkna cykler
för (jag = 0; jag < = cykler; i ++)
{/ / spela anmärkning för t ms
digitalWrite (DigitalOutSignal, hög);
delayMicroseconds(hperiod);
digitalWrite (DigitalOutSignal, låg);
delayMicroseconds (hperiod - 1); -1 göra för fraktionerad mikrosekund i digitaWrite omkostnader
}
}