Hoe knop functies toevoegen aan Peter Knight's Auduino project (3 / 4 stap)

Stap 3: Meer knoppen!


Wat andere effecten kunt u toevoegen? Ik heb geprobeerd een pauze functie en een dim functie, toegevoegd met behulp van bitsgewijze operatoren verstoren de PWM_OUTPUT gebruiken als verklaringen aan de onderkant van de code. Ik had moeite met de programmeertaal C++ die Auduino bibliotheek lijkt te worden gebruikt en welke marktdeelnemers die ik kon krijgen werken, maar in geslaagd om deze te krijgen gaan.

De pauze functie die ik toegevoegd heeft ook wat achtergrond lawaai dat ik denk dat is vanwege de vertraging-functie. Kon niet ontdoen van het, maar in korte persen die niet opvalt, is het alleen als je druk op de pauzeknop voor meer dan een moment, en treedt alleen op wanneer de potentiometers in extreme standpunten zijn.

Ik gebruikte deze knoppen:

http://www.adafruit.com/products/1010

Ze zijn kleurrijk, groot en leuk te drukken. Ze soldeer in de PCB vrij aardig.

Op dit punt ik ook gesoldeerd op het hele project aan een proto-shield om er meer stevig en compact.

Hier is de code van de Peter Knight uit RCArduino de blog met de pauzeknop en de "dim" knop, dat ik heb toegevoegd dat soort verstoren-y verlaagt het volume wanneer gedrukt. Het maakt een koele percussieve element bij sommige frequenties. De pauzeknop is echt leuk om mee te spelen, ook.

Auduino, de Lo-Fi granular synthesizer
//
door Peter Knight, Tinker.it http://tinker.it
//
Help: http://code.google.com/p/tinkerit/wiki/Auduino
Meer informatie: http://groups.google.com/group/auduino
//
Analoge in 0: 1 worp van graan
Analoge in 1: graan 2 verval
Analoge in 2: 1 verval van graan
Analoog in 3: graan 2 toonhoogte
Analoge in 4: graan herhaling frequentie
//
Digitale 3: Audio-uitgang (digitale 11 op ATmega8)
//
Changelog:
19 Nov 2008: Added support voor ATmega8 boards
21 Mar 2009: Added support voor ATmega328 boards
7 Apr 2009: vaste interruptvector voor ATmega328 boards
8 Apr 2009: toegevoegde ondersteuning voor ATmega1280 boards (Arduino Mega)

#include
#include

uint16_t syncPhaseAcc;
vluchtige uint16_t syncPhaseInc;
uint16_t grainPhaseAcc;
vluchtige uint16_t grainPhaseInc;
uint16_t grainAmp;
vluchtige uint8_t grainDecay;
uint16_t grain2PhaseAcc;
vluchtige uint16_t grain2PhaseInc;
uint16_t grain2Amp;
vluchtige uint8_t grain2Decay;

Kaart analoge kanalen
#define SYNC_CONTROL (4)
#define GRAIN_FREQ_CONTROL (0)
#define GRAIN_DECAY_CONTROL (2)
#define GRAIN2_FREQ_CONTROL (3)
#define GRAIN2_DECAY_CONTROL (1)

DB
#define SMOOTH_PIN 8

Wijzigt deze zal ook, moet herschrijven van audioOn()

#if defined(__AVR_ATmega8__)
//
Op oude ATmega8 boards.
Uitvoer is op pin 11
//
#define LED_PIN 13
#define LED_PORT PORTB
#define LED_BIT 5
#define PWM_PIN 11
#define PWM_VALUE OCR2
#define PWM_INTERRUPT TIMER2_OVF_vect

#elif defined(__AVR_ATmega1280__)
//
Op de Arduino Mega
Uitvoer is op pin 3
//
#define LED_PIN 13
#define LED_PORT PORTB
#define LED_BIT 7
#define PWM_PIN 3
#define PWM_VALUE OCR3C
#define PWM_INTERRUPT TIMER3_OVF_vect
#else
//
Voor moderne ATmega168 en ATmega328 boards
Uitvoer is op pin 3
//
#define PWM_PIN 3
#define PWM_VALUE OCR2B
#define LED_PIN 13
#define LED_PORT PORTB
#define LED_BIT 5
#define PWM_INTERRUPT TIMER2_OVF_vect
#endif

Duane B
rcarduino.blogspot.com
15/11/2012
Zeer eenvoudige ring buffer vertraging
Wij registreren de uitvoer in deze array
en meng het vervolgens terug met de output als de buffer terugloopt
in- en uitschakelen kunnen worden ontstoken door een knop op de DELAY_BUTTON
#define MAX_DELAY 1024
unsigned char sDelayBuffer [MAX_DELAY];
unsigned int nDelayCounter = 0;
unsigned char bDelay;

#define DELAY_BUTTON 10

na voorbeeld fo vertraging effect, niet-ondertekende variabele introducting en defingint hij pinout voor het puase-effect
unsigned char bSync;
unsigned char bPause;

#define PAUSE_BUTTON 12
#define SYNC_BUTTON 11

4,5,10

Soepele logaritmische toewijzing
//
uint16_t antilogTable [] {} =
64830,64132,63441,62757,62081,61413,60751,60097,59449,58809,58176,57549,56929,56316,55709,55109,
54515,53928,53347,52773,52204,51642,51085,50535,49991,49452,48920,48393,47871,47356,46846,46341,
45842,45348,44859,44376,43898,43425,42958,42495,42037,41584,41136,40693,40255,39821,39392,38968,
38548,38133,37722,37316,36914,36516,36123,35734,35349,34968,34591,34219,33850,33486,33125,32768
};
uint16_t mapPhaseInc (ingang uint16_t) {}
retourneren (antilogTable [input & 0x3f]) >> (ingang >> 6);
}

Stapte chromatische toewijzing
//
uint16_t midiTable [] {} =
17,18,19,20,22,23,24,26,27,29,31,32,34,36,38,41,43,46,48,51,54,58,61,65,69,73,
77,82,86,92,97,103,109,115,122,129,137,145,154,163,173,183,194,206,218,231,
244,259,274,291,308,326,346,366,388,411,435,461,489,518,549,581,616,652,691,
732,776,822,871,923,978,1036,1097,1163,1232,1305,1383,1465,1552,1644,1742,
1845,1955,2071,2195,2325,2463,2610,2765,2930,3104,3288,3484,3691,3910,4143,
4389,4650,4927,5220,5530,5859,6207,6577,6968,7382,7821,8286,8779,9301,9854,
10440,11060,11718,12415,13153,13935,14764,15642,16572,17557,18601,19708,20879,
22121,23436,24830,26306
};
uint16_t mapMidi (ingang uint16_t) {}
retourneren (midiTable[(1023-input) >> 3]);
}

Stapte pentatonische toewijzing
//
uint16_t pentatonicTable, [54] = {}
0,19,22,26,29,32,38,43,51,58,65,77,86,103,115,129,154,173,206,231,259,308,346,
411,461,518,616,691,822,923,1036,1232,1383,1644,1845,2071,2463,2765,3288,
3691,4143,4927,5530,6577,7382,8286,9854,11060,13153,14764,16572,19708,22121,26306
};

uint16_t mapPentatonic (ingang uint16_t) {}
uint8_t waarde = (1023-input) / (1024/53);
terugkeer (pentatonicTable[value]);
}

ongeldig audioOn() {}
#if defined(__AVR_ATmega8__)
ATmega8 heeft verschillende registers
TCCR2 = _BV(WGM20) | _BV(COM21) | _BV(CS20);
TIMSK = _BV(TOIE2);
#elif defined(__AVR_ATmega1280__)
TCCR3A = _BV(COM3C1) | _BV(WGM30);
TCCR3B = _BV(CS30);
TIMSK3 = _BV(TOIE3);
#else
PWM instellen voor 31,25 kHz, fase nauwkeurig
TCCR2A = _BV(COM2B1) | _BV(WGM20);
TCCR2B = _BV(CS20);
TIMSK2 = _BV(TOIE2);
#endif
}

VOID Setup {}
pinMode(PWM_PIN,OUTPUT);
audioOn();
pinMode(LED_PIN,OUTPUT);

pinMode(DELAY_BUTTON,INPUT);

mijn knoppen instellen als input, volgende voorbeeld van het effect van de vertraging

pinMode (SYNC_BUTTON, INPUT);
pinMode (PAUSE_BUTTON, INPUT);

pin-modus instellen en inschakelen van pull up, zodat die standaard modus
is PENTATONIC, trek de pin laag om over te schakelen om te glad
pinMode(SMOOTH_PIN,INPUT);
digitalWrite(SMOOTH_PIN,HIGH);
}

void loop {}
De lus is vrij eenvoudig - het werkt alleen de parameters voor de oscillatoren.
//
Vermijd het gebruik van alle functies die uitgebreid gebruik van interrupts maken of interrupts uitschakelen.
Zij zal leiden tot klikken en poept in de audio.

de standaardinstelling is pentatonische getrapt tonen, pull pin laag voor soepele frequentie zonder afzonderlijke tonen
syncPhaseInc = mapPhaseInc(analogRead(SYNC_CONTROL)) / 4;

syncPhaseInc = mapPentatonic(analogRead(SYNC_CONTROL));

bijgewerkt 29/01/2013
Trek de DELAY_BUTTON pin hoog voor vertraging, laag voor geen vertraging
Gebruik ofwel een pull up/pull-down weerstand
- of een pull up weerstand met een schakelaar tussen de pin en grond
bDelay = digitalRead(DELAY_BUTTON);
bSync = digitalRead(SYNC_BUTTON);
bPause = digitalRead(PAUSE_BUTTON);

Stapte toewijzen aan MIDI notities: C met Db, D, Eb, E, F...
syncPhaseInc = mapMidi(analogRead(SYNC_CONTROL));

Stapte pentatonische toewijzing: D, E, G, A, B

grainPhaseInc = mapPhaseInc(analogRead(GRAIN_FREQ_CONTROL)) / 2;
grainDecay = analogRead(GRAIN_DECAY_CONTROL) / 8;
grain2PhaseInc = mapPhaseInc(analogRead(GRAIN2_FREQ_CONTROL)) / 2;
grain2Decay = analogRead(GRAIN2_DECAY_CONTROL) / 4;
}

SIGNAL(PWM_INTERRUPT)
{
uint8_t waarde;
uint16_t output;

syncPhaseAcc += syncPhaseInc;
Als (syncPhaseAcc < syncPhaseInc) {}
Tijd om te beginnen de volgende korrel
grainPhaseAcc = 0;
grainAmp = 0x7fff;
grain2PhaseAcc = 0;
grain2Amp = 0x7fff;
LED_PORT ^ = 1 << LED_BIT; Sneller dan met behulp van digitalWrite
}

_ / / Verhogen de fase van de korrel oscillatoren
grainPhaseAcc += grainPhaseInc;
grain2PhaseAcc += grain2PhaseInc;

Fase omzetten in een driehoek golf
waarde = (grainPhaseAcc >> 7) & 0xff;
Als (grainPhaseAcc & 0x8000) waarde = ~ waarde;
Vermenigvuldig met huidige graan amplitude om monster
uitvoer = value * (grainAmp >> 8);

Herhaal voor tweede graan
waarde = (grain2PhaseAcc >> 7) & 0xff;
Als (grain2PhaseAcc & 0x8000) waarde = ~ waarde;
uitgang += waarde * (grain2Amp >> 8);

Maken van de korrel amplitudes verval met een factor van elke steekproef (exponentiële afname)
grainAmp-= (grainAmp >> 8) * grainDecay;
grain2Amp-= (grain2Amp >> 8) * grain2Decay;

Schaal output naar het beschikbare bereik, knippen indien nodig
uitvoer >> = 9;
als output (uitgang > 255) = 255;

Duane B
rcarduino.blogspot.com
15/11/2012
toevoegen van een knop om te stellen bDelay true of false om de vertraging inschakelen en uitschakelen

if(bDelay)
{
Uitvoer naar PWM (dit is sneller dan het gebruik van analogWrite)
Hier voegen we de buffer vertraging aan de output waarde, dit levert
een subtiele echo-effect, de buffer vertraging is bemanning herhalen van het geluid van
1/8ste van een seconde geleden.

LED_PORT | = 1 << LED_BIT; Sneller dan met behulp van digitalWrite
PWM_VALUE = (output + (sDelayBuffer[nDelayCounter])) >> 1;

de nieuwe uitvoer toevoegen aan de buffer, zodat we het gebruiken kunnen wanneer de buffer volgende wraps rond
sDelayBuffer [nDelayCounter] = PWM_VALUE;
nDelayCounter ++;
if(nDelayCounter == MAX_DELAY)
{
nDelayCounter = 0;
}
}
anders
{
LED_PORT & = ~ (1 << LED_BIT); Sneller dan met behulp van digitalWrite

PWM_VALUE = output;
}

Kyle
in het voorbeeld van hierboven nemen en proberen een percussieve pauze en dim functie toevoegen aan knop 11 en 12
het werkt en maar is moeilijk te krijgen van de vertraging en de pauze werken samen, soms als deze is onderbroken, er nu achtergrondgeluiden

Als (bSync)
{
door dit leeg laat, is het effect van de vertraging toegestaan om te werken, in plaats van worden overschreven door wat ik had hier

}
anders
{
++ maakt een dimmen effect
LED_PORT | = 1 << LED_BIT; Sneller dan met behulp van digitalWrite
PWM_VALUE = (uitgang ++) >> 1;

}

een ander effect die licht het geluid dimt toegevoegd

Als (bPause)
{
}
anders
{
verschuiving van de bits uit de schaal om een "pauze" knop werkte goed!
LED_PORT | = 1 << LED_BIT; Sneller dan met behulp van digitalWrite
PWM_VALUE = (uitgang << 50) >> 1;

}
}

Gerelateerde Artikelen

Hoe meerdere afbeeldingen toevoegen aan Pintrest.

Hoe meerdere afbeeldingen toevoegen aan Pintrest.

Hier zal ik u tonen hoe meerdere afbeeldingen toevoegen aan een pin op Pintrest. It's easy! Volg gewoon deze paar stappen. Lets go!Stap 1: Download Photo Collage (iOS 6.12 +) ik ben met behulp van iOS 6.12. Dus als je met android dan een foto collage
Bling op je Breadboard (hoe LED-vermogenindicator toevoegen aan Solarbotics transparante breadboard)

Bling op je Breadboard (hoe LED-vermogenindicator toevoegen aan Solarbotics transparante breadboard)

deze transparante breadboard zijn net als alle andere elektronica breadboard, maar ze zijn duidelijk! Dus, wat kan men doen met een duidelijke breadboard? Ik denk dat het voor de hand liggende antwoord is een power LED's toe te voegen!Stap 1: Hier zi
Hoe LED's toevoegen aan uw 3D-printer!

Hoe LED's toevoegen aan uw 3D-printer!

Dus je ofwel gekocht of gebouwd uw eigen 3D-printer, en hebben uren afdrukken beetje sleutelhangers en robots. Of misschien u jouwe voor een lange tijd hebben gehad, en drukt een InMoov robot of sommige koele mechanismen. Na mijn eigendom voor een so
Hoe cool lettertypen toevoegen aan uw computer

Hoe cool lettertypen toevoegen aan uw computer

Ever gezocht dat cool lettertype die u zag op een teken? Of het Coca Cola lettertype op uw schoolwerk?Goed dit leerprogramma zal u tonen hoe!U moet:Computer (duh!)Internet (duh!)Een tekstverwerker, voorbeelden:> Microsoft Word> OpenOffice Writer>
Hoe een gat toevoegen aan uw riem?

Hoe een gat toevoegen aan uw riem?

ik veel gewicht heeft verloren en liep uit gaten in mijn lederen riem.Ik heb niet een lederen punch handig, dus ik gewoon het gat geboord.Stap 1: Meten en markeren Eerste, ik gemeten en gemarkeerd de plaats voor de nieuwe gat, dan sloeg een gaatje in
How To Repair Damaged Threads of RVS draden toevoegen aan om het even welk Project

How To Repair Damaged Threads of RVS draden toevoegen aan om het even welk Project

ik heb nooit veel geluk met behulp van enkele van de traditionele methoden voor reparatie beschadigde draden in mijn projecten.  Deze technieken mogelijk om verschillende redenen niet werkbare oplossingen.  De draad te beschadigd om "schoonmaak"
Een iPhone Dock-Connector toevoegen aan een kartonnen iPod Boombox

Een iPhone Dock-Connector toevoegen aan een kartonnen iPod Boombox

ik weet het, ik weet wat je denkt... niet een andere ipod spreker/usb lader, juiste? Nou, wilde ik mijn specifieke toepassing met een iPhone en met deze sprekers ThinkGeek document. En het gebeurt gewoon zo dat er een wedstrijd van de ThinkGeek gaand
Geluid toevoegen aan projecten.

Geluid toevoegen aan projecten.

Maken van een Prop en noodzaak geluid? Dit instructable wordt beschreven hoe u geluiden toevoegen aan elk project met de snelle en gemakkelijke manier. Wij tonen u de basisprincipes van de werking van deze geluidskaart.Stap 1: Laat sommige geluid toe
Een draadloze antenne toevoegen aan uw eeepc 900a

Een draadloze antenne toevoegen aan uw eeepc 900a

dit instructable laat zien hoe u een draadloos-connector te installeren op uw eeepc, geschikt voor antennes en dergelijke.Dus laten we zeggen dat je hebt een eeepc 900a (of andere boeken van het "netto" RAS). Het heeft een goed draadloze kaart,
Detail toevoegen aan een foto

Detail toevoegen aan een foto

Ik ga u laten zien hoe eenvoudige detail toevoegen aan een afbeelding die u niet bevalt! Maar in dit instructable, mij zal zitten using GIMP, een gratis kunstprogramma dat is eenvoudig (Nou, ten minste eenmaal je wennen aan it..) te gebruiken en grot
Een echte gids knop toevoegen aan Homebrew Xbox 360 Arcade Stick

Een echte gids knop toevoegen aan Homebrew Xbox 360 Arcade Stick

De eerste arcade-sticks die ik heb voor de 360 gebruikt gemaakt wired controllers en hoefde echt feedback over de status van de verbinding van de controller, zodat mijn "Guide Button" altijd gewoon een standaard groen drukknop was.  Maar vast co
Hoe u kunt koppelingen toevoegen aan uw instructables

Hoe u kunt koppelingen toevoegen aan uw instructables

In dit instructable ik zal u tonen hoe koppelingen toevoegen aan instructables.Stap 1: Maak een instructable Te maken van een instructable moet je een account hebben.Eerst moet u inloggenTen tweede moet u klikken op 'Maak aan'Klik vervolgens op "stap
Hoe goed een Mixtape toevoegen aan uw iTunes

Hoe goed een Mixtape toevoegen aan uw iTunes

Ik ben net hier te helderen enige verwarring met iTunes betreffende mixtapes.Stap 1: Zoek een goede mixtape websitePersoonlijk, denk ik www.livemixtapes.com is de beste website om te vinden van de beste mixtapes.Stap 2: Maak een accountLeden van Live
Een spel/skip knop toevoegen aan uw standalone cd-rom-station

Een spel/skip knop toevoegen aan uw standalone cd-rom-station

als u wilt maken van een CD-speler uit een oude cd-rom-station (Bekijk hier) maar het station niet een PLAY/SKIP-knop op de voorkant hoeft... Dont wanhoop, kunt u toevoegen aan de meeste Cd-stations, >>>> Lees verderStap 1: Tools n StuffTOOLS: