Home > Technologie > Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

0
Advertisement

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Dieses Arduino-betriebene Vocal-Effekt-Box-Pitch verschiebt und verzerrt eingehende Audiosignale, um eine Vielzahl von Vocal-Effekten zu erzeugen. Dieses Projekt ist mein erstes Experiment mit Echtzeit-Digitalsignalverarbeitung unter Verwendung von Arduino. Es tastet ein eingehendes Mikrofonsignal mit einer Rate von etwa 40 kHz, manipuliert das Audio digital und gibt dann 8 Bit Audio bei 40 kHz aus. Um die Menge der Berechnung minimiert die durch den Arduino erforderlich, benutzte ich eine Technik namens Granularsynthese auf das eingehende Audiosignal zu manipulieren. Im Wesentlichen, wie Audio kommt in den Arduino wird es geschnitten und gespeichert als kleine (Millisekunde oder Mikrosekunde Größe) Proben namens "Körner". Diese Körner werden dann einzeln manipuliert und wiedergegeben; Sie können verlängert oder verkürzt, gedehnt oder komprimiert, rückwärts gespielt, mehrmals kopiert oder mit anderen Körnern vermischt werden. Sie hören ein (etwas gruseliges) Audiosample aus dem darunter liegenden Effekt-Feld:

Die körnige Synthese erzeugt eine einzigartige Verzerrung, die durch Diskontinuitäten zwischen den einzelnen Körnern im Ausgangssignal verursacht wird. Manchmal erzeugt diese Verzerrung einen Effekt, den ich nur als einen "Ripping" -Ton beschreiben kann, andernfalls führt er neue Frequenzen in den Ton ein, die vorher nicht vorhanden waren. Hier ist ein Beispiel von Aphex Twin , die granularen Synthese ist besonders prominent in der Brücke bei etwa 3min in. Ein weiteres Beispiel für Granularsynthese, diesmal auf Gesang für Tonhöhenverschiebung und Textureffekte ist von Paul Lansky . Mein Favorit , was mit dieser Effekte Box zu tun ist , verschiebt subtile Tonhöhe zu verwenden , um eine androgyne Gesangs - Sound zu erreichen, hatte ich die Idee für das Projekt , nachdem sie reichlich zu hören Fever Ray im vergangenen Winter, können Sie hören , wie sie ihre Stimme Tonhöhe verschiebt Manchmal etwas männlich klingen.

LISTE DER EINZELTEILE

(1x) Arduino Uno REV 3 Radio Shack 276-128
(7x) 10K Ohm 1/4 Watt Carbon Film Resistor (2 Pakete) Radio Shack # 271-1335
(9x) 20K Ohm 1/4-Watt Kohleschichtwiderstand (2 Pakete)
(1x) 1K Ohm 1/4 Watt Carbon Film Resistor Radio Shack 271-1321
(1x) 50K-Ohm Linear-Taper Potentiometer Radio Shack # 271-1716
(1x) 10KOhm Audio Control Potentiometer mit SPST - Schalter Radio Shack # 271-215 (dies wird verwendet Lautstärke zu steuern und schalten Sie das Gerät ein / aus)
(5x) 0,25 "Rändelknopf Radio Shack 274-424
(2x) 9 V Alkaline Batterie Radio Shack # 23-866
(2x) Heavy-Duty - 9V Schnappverbindungen Radio Shack # 270-324
(1x) PC - Board mit Kupfer Radio Shack # 276-147
(1x) SPST PC-montierbare Subminiatur Kippschalter Radio Shack # 275-645
(2x) Stiftleiste Pins Jameco 103393
(3x) 8 - Pin - Buchse Radio Shack 276-1995
(1x) TL082 Weit Dual - JFET - Eingang Op Amp Radio Shack 276-1715
(3x) 100K Ohm 1/4 Watt Carbon Film Resistor (1 Paket) Radio Shack 271-1347
(1x) 10uF Elektrolytkondensator
(1x) 47nF Kondensator
(3x) 0.1uf Kondensator Radio Shack 55047557
(2x) 1 M-Ohm Linear Taper Potentiometer Radio Shack 271-211
(1x) 1MOhm logarithmisches Potentiometer
(1x) 2kOhm 1/4-Watt Kohleschichtwiderstand
(1x) männl Sockelpins Jameco 103393
(1x) 10K-Ohm Linear-Taper Potentiometer Radio Shack 271-1715
(1x) DPDT Flatted Metallhebel Kippschalter Radio Shack 275-636
(2x) 1/4 "Stereo - Klinke Radio Shack 274-141 oder Radio Shack 274-312
(2x) 5 mm hoher Helligkeit weiße LED (1 Paket) Radio Shack 276-017
(2x) 100 Ohm 1 / 4W 5% Carbon Film Resistor Radio Shack 271-1311
(2x) TS922IN Dual - Op Amp Digikey 497-3049-5-ND (ein TS924 würde auch, aber sie sind auf digikey im Moment nicht verfügbar)

Zusätzliche Materialien:
22 - Gauge - Kabel Radio Shack # 278-1224
Solder Radio Shack # 64-013
Sandpapier
Sperrholz
Holzkleber
Heißkleber
Schrauben

Herunterladen Arduino IDE

Schritt 1: Schema

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Ich habe den Schaltplan in drei Teile gebrochen, so ist es leichter zu verstehen.

Das erste Schaltbild zeigt den Audioausgang. Dieses Projekt gibt Audio über einen 8 - Bit - R2R Digital - Analog - Wandler durch Arduino digitalen Pins 0-7. Dieses Signal wird über einen Verstärker, einen Tiefpassfilter und einen Lautstärkeregler gesendet, bevor es an Lautsprecher gesendet wird.

Das zweite Schema zeigt die Mic-Eingangsschaltung. Die Leitung im Mikrofon wird über einen Verstärker und eine DC-Offsetschaltung geschickt, bevor sie über den analogen Eingangsanschluss A0 in den Arduino geschickt werden.

Das dritte Schema zeigt, wie alle Bedienelemente der Effektbox mit dem Arduino verbunden sind. In diesem Projekt gibt es zwei LED-Anzeigen: eine Clipping-Anzeige und eine Ausgangsanzeige. Drei Töpfe auf dem Gerät steuern Korngröße, Tonhöhe und Nass / Trockenmischung und ein Schalter steuert die Richtung der Probenwiedergabe (vorwärts oder rückwärts).

Schritt 2: Kopfstifte

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Löten Sie die Kopfstifte an Ihrem Protoboard, so dass Sie das Arduino direkt an der Platine befestigen können. Leider ist der Abstand zwischen den digitalen Pins 7 und 8 auf dem Arduino nicht der Standard 2.54mm, also habe ich festgestellt, dass es am besten ist, zu versuchen, diese Pins möglichst zu vermeiden (anolog Pins können auch als digitale I / O verwendet werden). Wenn Sie sie verwenden müssen, versuchen Sie zu finden , lange Sockelpins , die Sie in Form (Abb 4- aus einem anderen Projekt) biegen kann.

Schritt 3: DAC: Teil 1

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Löten Sie acht 20kOhm-Widerstände an die Arduino-Pins D0-D7, wie in den obigen Bildern gezeigt.

Schritt 4: DAC: Teil 2

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Löten Sie sieben 10kOhm Widerstände zwischen jedem der 20kOhm Sie gerade gelötet. Fügen Sie einen zusätzlichen 20kOhm Widerstand zum 20kOhm an arduino D0 (die Unterseite der Leiter) angeschlossen.

Schritt 5: DAC: Teil 3

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Schließen Sie das andere Ende des 20kOhm-Reisistors an Arduino-Masse an

Schritt 6: Test DAC

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Verbinden Sie den Ausgang vom DAC bis zu einem Oszilloskop, achten Sie darauf, auch die Masse zu verbinden. Laden Sie die Firmware unten auf den Arduino. Der DAC sollte eine Sinuswelle oszillieren, die zwischen 0 und 5V mit einer Frequenz von ~ 63Hz schwingt (siehe Bild oben). Wenn Sie Hilfe verstehen müssen, wie Sie das Oszilloskop verwenden / lesen, lesen Sie in diesem Tutorial nach.

  // 63Hz Sinuswelle // von Amanda Ghassaei 2012 //http://www.instructables.com/id/Arduino-Vocal-Effects-Box/ * * Dieses Programm ist freie Software;  Können Sie sie unter den Bedingungen der GNU General Public License, wie sie von der Free Software Foundation veröffentlicht wird, weiterverteilen und / oder ändern.  Entweder Version 3 der Lizenz oder * (nach Ihrer Wahl) jede spätere Version.  * * / // sendet 63Hz Sinuswelle an arduino PORTD DAC float t = 0;  Void setup () {// Port / Pin einstellen.  Siehe http://www.arduino.cc/de/Reference/PortManipulation für weitere Informationen DDRD = 0xFF; // Port d (digitale Pins 0-7) alle Ausgänge cli (); // Stopp-Interrupts // Timer2 unterbrechen bei 40kHz TCCR2A = 0; // vollständiges TCCR2A-Register auf 0 setzen TCCR2B = 0; // für TCCR2B TCNT2 = 0; // Zählerstand auf 0 setzen // Vergleichsregister für 40kHz-Stufen setzen OCR2A = 49; // = 16 * 10 ^ 6) / (8 * 40000) -1 // CTC-Modus einschalten TCCR2A | = (1 << WGM21);  // Set CS11 Bit für 8 Prescaler TCCR2B | = (1 << CS11);  // Timer-Vergleichsunterbrechung aktivieren TIMSK2 | = (1 << OCIE2A);  Sei (); // Interrupts zulassen} ISR (TIMER2_COMPA_vect) {// Inkrement t t + = 1;  Wenn (t == 628) {// 40kHz / 628 = ~ 63Hz t = 0;  }} Void loop () {// Sinuswelle der Frequenz ~ 63Hz // Sinuswerte senden an PORTD zwischen 0 und 255 PORTD = Byte (127 + 127 * sin (t / 100));  aufrechtzuerhalten.

Einige Informationen über den Code-Grundsätzlich, was ich hier getan habe, ist ein Timer-Interrupt, dass die Variable t mit einer Frequenz von 40kHz inkrementiert. Sobald t erreicht 627 setzt es zurück auf Null (dies geschieht mit einer Frequenz von 40.000 / 628 = 63Hz). Unterdessen wird in der Hauptschleife sendet der Arduino einen Wert zwischen 0 (00000000 binär) und 255 (11111111 binär) in digitale Stifte 0 bis 7 ( PORTD ). Er berechnet diesen Wert mit folgender Gleichung:

PORTD = Byte (127 + 127 * sin (2 * t / 100));

Bei t Inkrementen von 0 bis 627 bewegt sich die Sinusfunktion durch einen kompletten Zyklus. Der an PORTD gesendete Wert ist eine Sinuswelle mit einer Frequenz von 63 Hz und einer Amplitude 127, die um 127 oszilliert. Der DAC wandelt diese auf eine Spannung zwischen 0 und 5 V um, wobei ein an PORTD gesendetes 0 gleich 0V und ein an PORTD gesendetes 255 gleich 5V ist.

Schritt 7: 8-polige Buchse und Puffer

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Löten Sie eine 8-polige Buchse an der Steckdose. Verbinden Sie Masse zu Stift 4, 5V zu Stift 8 und das Signal vom DAC zu Stift3. Lötstifte 1 und 2 zusammen (Abb. 2). Dadurch wird das Signal über einen Spannungsfolger . Der Spannungsfolger wirkt als Puffer und schützt das Ausgangssignal des DAC vor jeglichen Lasten, die später in der Schaltung angelegt werden.

Schritt 8: Wire up pot

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Verbinden Sie drei Leitungen mit einem "A" (siehe Abbildung 3). Löten Sie die rote Leitung auf Pin 1, die grüne Leitung auf Pin 5 und die schwarze Leitung auf Masse / Pin 4. Lötstellen 6 Und 7 zusammen (Fig. 2). Dieser Pot wird die Amplitude des Signals einstellen - es ist ein Lautstärkeregler. Es tut dies , indem sie als variable wirkenden Spannungsteilers .

Schritt 9: Zweite 8-polige Buchse

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Löten Sie eine zweite 8-polige Buchse und schließen Sie Masse an Pin 4 und 5V an Pin 8 an.

Schritt 10: Spannungsteiler

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Löten Sie einen 10kOhm-Widerstand an Pin 7 des ersten TS922IN. Verbinden Sie einen 2kOhm-Widerstand in Serie mit dem 10kOhm-Widerstand und schließen Sie das andere Ende des 2kOhm auf Masse. Dies ist ein weiterer Spannungsteiler - der Zweck dieses Teils der Schaltung ist das Signal zu 2000 / (10000 + 2000) = 1/6 seiner Amplitude zu skalieren, ich tat dies , damit die maximale Lautstärke nicht ganz mein Gehör zerstören würde. Anders als der im letzten Schritt mit dem Topf aufgebaute Spannungsteiler ändert sich dieser Spannungsteiler nicht; Sie skaliert die Amplitude des Signals permanent. Das skalierte Signal kommt von der Verbindungsstelle zwischen den beiden Widerständen.

Wenn Sie planen, den Ausgang als Line-Pegel in ein anderes Effektmodul oder Verstärker zu senden, dann fügen Sie diesen Spannungsteiler nicht hinzu.

Schritt 11: RC-Tiefpaßfilter

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Der Zweck eines Tiefpaßfilters in diesem Teil der Schaltung ist , die digitalen Artefakte aus dem Ausgangssignal des DAC zu entfernen , ohne zu viel Detail in den höheren Frequenzen des Audiosignals zu verlieren.
Nyquist-Theroum besagt , daß für eine Abtastrate von x Hz, die höchste Frequenz , die erzeugt werden kann , ist , x / 2 Hz. Wenn Sie also eine Abtastrate von 40 kHz (Standard für die meisten Audio) haben, dann ist die maximale Frequenz , die Sie wiedergeben kann , ist 20 kHz (die obere Grenze des hörbaren Spektrums ).
Durch Verwendung eines Tiefpaßfilters auf dem Signal mit einer Grenzfrequenz von 20 kHz können Sie die "Schritte" in Ihrer Wellenform glätten, während die Gesamtform der Wellenform intakt bleibt. I verwendet , um einen einfachen Strömungspassfilter RC dies zu erreichen: einen Widerstand und einen Kondensator in Reihe mit Erde verbunden . Schließen Sie den Widerstand an das ankommende Signal und den Kondensator an Masse, das Signal von der Verbindung zwischen diesen zwei Bestandteilen wird Tiefpaß gefiltert.
Sie können die Werte des Kondensators und des Widerstands, die Sie für ein Tiefpassfilter benötigen, nach folgender Gleichung berechnen:

Grenzfrequenz = 1 / (2 * pi * R * C)

So für eine Grenzfrequenz von 20.000 Hz und 1 kOhm Widerstand:

20000 = 1 / (2 · 3,14 · 1000 · C)
C = ~ 8nF

Da 8nF Kondensatoren schwer zu bekommen sind, bin ich auf 0,01uF aufgerundet. Dies ergibt eine Grenzfrequenz von etwa 16 kHz. Sie können herum mit verschiedenen Werten herumschauen und sehen, was Ihnen am besten gefällt, neige ich wie schwerere Filterung bc es entfernt mehr unerwünschte Geräusche.

Lösen Sie einen 1kOhm-Widerstand an der Verbindungsstelle vom Spannungsteiler aus dem letzten Schritt (wenn Sie nicht den Spannungsteiler, Lötmittel direkt auf Pin 7). Lösen Sie einen 0.01uF Kondensator in Serie mit diesem Widerstand auf Masse. Löten Sie einen Draht von der Verbindungsstelle zwischen dem Kondensator und dem Widerstand an Pin 5 der zweiten Buchse.

Schritt 12: Mehr Pufferung

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

In diesem Schritt verdrahtet ich die beiden Operationsverstärker auf dem zweiten Chip als Spannungsfolger und verdrahtet sie parallel , so dass sie zweimal die Stromquelle könnte. Wie im Schritt 7 wirkt dieser Spannungsfolger als Puffer und schützt die eingehende Wellenform vor der Last des Kopfhörers, die schließlich an den Ausgang des Puffers angeschlossen wird.

Löten Sie einen Draht zwischen den beiden nicht invertierenden Eingängen der Operationsverstärker (Pins 5 und 3 der zweiten Buchse). Löten Sie einen anderen Draht zwischen den beiden Ausgängen (Pins 1 und 7 der zweiten Buchse). An der Unterseite der Platine werden die invertierenden Eingänge an ihren Ausgängen gelötet (Abb. 2).

Schritt 13: DC-Offset

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Nach allen Spannungsteilern schwankt das aus den Operationsverstärkern kommende Signal zwischen 0 und etwa 1 V (oder 0 bis 5 V, wenn Sie den Spannungsteiler nicht in Schritt 10 enthalten haben). Bevor Sie das Signal an Lautsprecher / Kopfhörer senden, muss es versetzt werden, um um 0 V oszillieren. Dies wird als ein Gleichstrom - Offset wird erreicht , indem das Signal über einen Kondensator ausgeführt.

Lösen Sie das Ende eines 100uF (oder höher) Kondensators an den Ausgang des zweiten Operationsverstärkers. Das vom + Ende des Kondensators kommende Signal wird DC-Offset sein, um um 0 V oszilliert zu werden.

Schritt 14: Audio-Buchse

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Schrauben Sie das Kunststoffgehäuse der Audio-Buchse ab. Löten Sie einen schwarzen Draht (Masse) an den längeren Anschluss und verdrahten Sie einen grünen Draht (Signalausgang) mit den beiden kürzeren Anschlüssen. Diese Buchse ist Stereo, aber das Signal aus dem Arduino ist mono, so dass nur das Mono-Signal an beide Stereo-Ausgänge.

Heißkleber verwenden, um diese Verbindungen strukturell zu unterstützen und Kurzschlüsse zu vermeiden. Löten Sie das grüne Kabel am + Ende des 100uF Kondensators und verlöten Sie das schwarze Kabel an Masse.

Schritt 15: Mikrofonschaltung

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Fig. 2 zeigt das Signal, das direkt aus dem Mikrophon auf einem Oszilloskop herauskommt. Das Signal ist relativ schwach, mit einer Amplitude von nur 200mV. Beachten Sie, wie das Signal um 0 Volt oszilliert - das ist typisch für Audiosignale. Idealerweise möchten Sie ein Signal mit einer maximalen Amplitude von 2,5 V haben, die um 2,5 V oszilliert. Auf diese Weise ist das Signal vollständig innerhalb von 0-5 V enthalten; Wird der Arduino in der Lage sein, es mit maximaler Auflösung und ohne Clipping zu messen. Um dies zu tun, muss das Signal sein , DC - Offset und verstärkt. DC - Offset - Mittel , um den Pegel zu ändern , dass die Welle um oszilliert (der Mittelpunkt der Welle). Die Verstärkung bedeutet die Amplitude (Abstand zwischen dem Mittelpunkt und max erhöht oder Min) eines Signals. Verstärkung puffert auch das Mikrofonelement von irgendwelchen Lasten, die Sie später in der Schaltung anbringen können, was eine gute Sache ist, da sie Verzerrungen verhindert.

3 zeigt dasselbe Mikrofonsignal nach der Verstärkung, Sie können sehen, wie sich die Höhe der Peaks erhöht hat, so dass die Welle zwischen -2,5 und 2,5 V (Amplitude von 2,5 V) oszilliert. Fig. 4 das Signal nach dem DC-Offset zeigt; Es hat immer noch eine Amplitude von 2,5 V, aber der Mittelpunkt ist 2,5 V statt 0 V, so dass die Welle nie unter 0 V sinkt. (Anmerkung - die geringfügige Formveränderung zwischen den Signalen in den Fig. 3 und 4 ist auf Änderungen in meiner Stimme zwischen den beiden Bildern zurückzuführen, sie hat nichts mit der Schaltung zu tun). Das Signal in Abb. 4 ist bereit, an einen analogen Arduino-Eingang zu gehen.

Schritt 16: Batterien

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Für die Stromversorgung des TL082 werden zwei Batterien von neun Volt benötigt. Die Doppel - Pole Double Throw ( DPDT ) Schalter als Leistungsschalter für beide Batterien handeln. DPDT-Schalter haben tatsächlich zwei getrennte Schalter in ihnen, aber sie werden durch den gleichen Kniehebelmechanismus gesteuert (Abb. 1). Verdrahten Sie die roten Enden von zwei Batterie-Snaps zu einer Seite (die gleiche Seite) jedes Schalters (Abb. 3 und 4). Löten Sie die roten Leitungen zu den mittleren Leitungen jedes Schalters (Abb. 5 und 6). Heißkleber verwenden, um die Lötverbindungen zu sichern (Abb. 7).

Schritt 17: Verstärker-Buchse und Stromversorgung

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Löten Sie eine 8-polige Buchse auf das Protoboard (Abb. 1). Wie im Pin-Diagramm für den TL082 gezeigt, verbindet sich + V mit Pin 8 und -V mit Pin 4. Verbinden Sie die roten Leitungen von der mittleren Leitung des DPDT-Schalters mit Pin 8. Rufen Sie den angeschlossenen Batterie-Snap an Zu diesem roten Blei Snap # 1. Lösen Sie die schwarze Leitung von der Sicherung # 2 zum Stift 4 der Buchse (Abb. 2 und 3). Lösen Sie die schwarze Leitung von der Sicherung # 1 und die verbleibende rote Leitung vom Zentralstift des Schalters # 2 zusammen auf dem Protoboard (Abb. 3 und 4), dies ist der Mittelabgriff (0v) zwischen der + 9 / -9V Versorgung. Diese Verbindung mit Arduino-Masse verlöten (Abb. 8).

Schritt 18: Mikrofoneingang

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Wenn Sie ein Mono-Mikrofon haben, lösen Sie das rechte Kabel (Abb. 2), und ich habe auch ein Teil des Metalls von der größeren Lei- tung abgeschnitten (Abb. 5 und 6). Löten Sie einen schwarzen Draht an die Erdleitung und einen grünen Draht an die andere Leitung. Decken Sie die Anschlüsse der Buchse mit Heißleim ab, um Kurzschlüsse oder Brüche zu vermeiden.

Schritt 19: Nichtinvertierender Verstärker: Teil 1

Arduino Vocal Wirkung Box

Löten Sie die Drähte von der 1/4 "Buchse zum Protoboard. Löten Sie das schwarze Kabel an die Arduino-Masse und das grüne Kabel an Pin 5 der 8-poligen Buchse.

Schritt 20: Nichtinvertierender Verstärker: Teil 1

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Löten Sie einen 100K Widerstand zwischen den Pins 6 und 7 der 8-poligen Buchse.

Schritt 21: Nichtinvertierender Verstärker: Teil 2

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Löten Sie zwei Leitungen auf ein Potentiomer (siehe Abbildung 1), so dass es als variabler Widerstand wirkt. Löten Sie eine Seite (egal welche) auf Masse und die andere Seite auf Pin 6 der Steckdose. Dieser Pot steuert die Amplitude des eingehenden Mikrofonsignals.

Schritt 22: Gleichstromversatz: Teil 1

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Die DC-Offsetschaltung besteht aus zwei Kondensatoren und einem Spannungsteiler. Lösen Sie einen 10μF Elektrolytkondensator so, dass die + Leitung mit Pin 7 der Steckdose verbunden ist.

Schritt 23: DC-Offset: Teil 2

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Lösen Sie einen 47nF Kondensator an das Ende des 10uF Kondensators. Verbinden Sie die andere Seite der 47nF-Schutzkappe mit der Erde.

Schritt 24: Gleichstromversatz: Teil 3

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Erstellen Sie einen Spannungsteiler zwischen Arduino + 5V und Masse durch Verdrahtung zwei 100kOhm Widerstände in Reihe zwischen 5V und Masse. Verbinden Sie den Mittelpunkt des Spannungsteilers mit dem Verbindungspunkt zwischen den beiden Kondensatoren des DC-Offsetschaltkreises. Dadurch wird das verstärkte Mikrofonsignal um 2,5 V erweitert.

Schritt 25: An den Analogeingang anschließen

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Verbinden Sie den analogen Eingang 0 mit dem Übergang zwischen den beiden Kondensatoren im DC-Offset-Schaltkreis.

Schritt 26: Einfache Audioausgabe

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Laden Sie den folgenden Code auf das Arduino. Dieser Code liest das Signal, das in A0 kommt, wandelt es in eine Zahl zwischen 0 und 255 um und gibt es an den DAC aus. Auf dem Oszilloskop im Bild oben sehen Sie das eingehende Mic-Signal in blau und das Signal direkt aus dem DAC in gelb. Beachten Sie, dass jeder Schritt der DAC-Ausgabe etwa 125 Sekunden lang ist. Bei dieser einfachen Einstellung beträgt die Abtastrate 1 / 125us oder 8 kHz. In den nächsten Schritten werde ich den ADC-Zähler manuell einstellen und die Auflösung der Arduino-Analog-Digital-Umwandlung von 10 Bit (0-1023) auf 8 Bit (0-255) verringern, um die Geschwindigkeit zu erhöhen und die Abtastrate zu erhöhen.

  // Einfache Audioausgabe // von Amanda Ghassaei //http://www.instructables.com/id/Arduino-Vocal-Effects-Box/ // Juli 2012 / * * Dieses Programm ist freie Software;  Können Sie sie unter den Bedingungen der GNU General Public License, wie sie von der Free Software Foundation veröffentlicht wird, weiterverteilen und / oder ändern.  Entweder Version 3 der Lizenz oder * (nach Ihrer Wahl) jede spätere Version.  * * / Int incomingAudio;  Void setup () {für (Byte i = 0; i <8; i ++) {pinMode (i, OUTPUT); // digitale Anschlüsse 0-7 als Ausgänge} pinMode (A0, INPUT);  } // void loop () {incomingAudio = analogRead (A0) // Leseeingabe von A0 incomingAudio = incomingAudio / 4 // Skala von 10 Bit bis 8 Bit PORTD = incomingAudio; // DAC senden}

Schritt 27:

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Im folgenden Code habe ich die Funktion analogRead () umgangen, um meine Abtastrate zu erhöhen. Ich setze den ADC-Zähler manuell auf 500kHz und lese einen 8-Bit-Wert vom analogen Eingang 0 vom ADCH direkt ein. Ich setze den ADC-Zähler auf 500kHz, weil der ADC 13 Taktzyklen nimmt, um einen neuen analogen Wert zu lesen. 500/13 = 38,5 kHz, die mich ziemlich nah an 40kHz (Standard-Audio-Sampling-Rate) ohne zusätzliche Rauschen bekommt.

  // Audio mit 38,5 kHz Abtastrate // von Amanda Ghassaei //http://www.instructables.com/id/Arduino-Vocal-Effects-Box/ // Juli 2012 / * * Dieses Programm ist freie Software;  Können Sie sie unter den Bedingungen der GNU General Public License, wie sie von der Free Software Foundation veröffentlicht wird, weiterverteilen und / oder ändern.  Entweder Version 3 der Lizenz oder * (nach Ihrer Wahl) jede spätere Version.  * * / Void setup () {DDRD = 0xFF; // Port einstellen d (digitaler Pin s0-7) als Ausgänge DDRC = 0x00 // alle analogen Pins als Eingänge setzen // kontinuierliche Abtastung des analogen Pins einstellen 0 // Löschen ADCSRA- und ADCSRB-Register ADCSRA = 0;  ADCSRB = 0;  ADMUX | = (1 << REFS0);  // Set Referenzspannung ADMUX | = (1 << ADLAR);  // linke Ausrichtung des ADC-Werts - damit wir die höchsten 8 Bits aus dem ADCH-Register nur lesen können ADCSRA | = (1 << ADPS2) |  (1 << ADPS0);  // ADC-Uhr einstellen mit 32 Prescaler-16mHz / 32 = 500kHz ADCSRA | = (1 << ADATE);  // Enabble Auto Trigger ADCSRA | = (1 << ADEN);  // ADC ADCSRA aktivieren | = (1 << ADSC);  // ADC-Messung starten} void loop () {PORTD = ADCH; // 8-Bit-Wert vom analogen Pin 0 zum DAC senden}

Im folgenden Code habe ich den Ausgang zum DAC über den ADC-Interrupt ausgelöst. Dieser Interrupt ähnelt anderen Arduino-Timer-Interrupts, wird aber nur ausgeführt, wenn ein neuer ADC-Wert erreicht ist (in diesem Fall mit einer Rate von ~ 38,5 kHz oder alle 26us). Die Ausgabe des Code unten ist genau die gleiche wie der obige Code, aber es ist bequemer, den Interrupt-Code voranzutreiben.

  // Audio out mit 38,5 kHz Abtastrate und Interrupts // von Amanda Ghassaei //http://www.instructables.com/id/Arduino-Vocal-Effects-Box/ // Juli 2012 / * * Dieses Programm ist freie Software ;  Können Sie sie unter den Bedingungen der GNU General Public License, wie sie von der Free Software Foundation veröffentlicht wird, weiterverteilen und / oder ändern.  Entweder Version 3 der Lizenz oder * (nach Ihrer Wahl) jede spätere Version.  * * / Void setup () {DDRD = 0xFF; // set port d (digital pin s0-7) als Ausgänge DDRC = 0x00; // alle analogen Pins als Eingänge cli () setzen; // diable interrupts // setup Kontinuierliche Abtastung des Analoganschlusses 0 // ADCSRA- und ADCSRB-Register löschen ADCSRA = 0;  ADCSRB = 0;  ADMUX | = (1 << REFS0);  // Set Referenzspannung ADMUX | = (1 << ADLAR);  // linke Ausrichtung des ADC-Werts - damit wir die höchsten 8 Bits aus dem ADCH-Register nur lesen können ADCSRA | = (1 << ADPS2) |  (1 << ADPS0);  // ADC-Uhr einstellen mit 32 Prescaler-16mHz / 32 = 500kHz ADCSRA | = (1 << ADATE);  // Enabble Auto Trigger ADCSRA | = (1 << ADIE);  // Freigabe von Interrupts, wenn die Messung abgeschlossen ist ADCSRA | = (1 << ADEN);  // ADC ADCSRA aktivieren | = (1 << ADSC);  // ADC-Messungen starten (); // Interrupts freigeben} ISR (ADC_vect) {// wenn neuer ADC-Wert bereit PORTD = ADCH; // 8 Bit-Wert vom analogen Pin 0 zum DAC senden} void loop () {}

Schritt 28: Halbtonwiedergabe

Arduino Vocal Wirkung Box

Der folgende Code enthält einen kurzen Abschnitt des eingehenden Audiomaterials in eines von zwei Arrays: buffer1 und buffer2. Es führt auch eine Variable namens "scale". Diese Variable wird verwendet, um die Wiedergabe des gespeicherten Puffer-Audiosignals zu skalieren, um die Frequenz zu ändern. Der unten stehende Code setzt die Skalierung auf 2, dies verdoppelt die Dauer, die für die Ausgabe des gespeicherten Audiosignals benötigt wird. Wie Sie im obigen Bild sehen können, ist der Ausgang des dac (gelb) halb so groß wie der Eingang des Mikrofons (blau).

  // Half Frequency Playback // von Amanda Ghassaei //http://www.instructables.com/id/Arduino-Vocal-Effects-Box/ // Juli 2012 / * * Dieses Programm ist freie Software;  Können Sie sie unter den Bedingungen der GNU General Public License, wie sie von der Free Software Foundation veröffentlicht wird, weiterverteilen und / oder ändern.  Entweder Version 3 der Lizenz oder * (nach Ihrer Wahl) jede spätere Version.  * * / // Audiospeicherbyte buffer1 [1000];  Byte-Puffer2 [1000];  Byte incomingAudio; // Speichervariable int i = 0; // Indexvariable int iscale = 0; // Indexvariable int scale = 2;  Boolean toggle = 0;  Boolean rec = 1;  Int Grenzwert = 1000;  Void setup () {DDRD = 0xFF; // set port d (digital pin s0-7) als Ausgänge DDRC = 0x00; // alle analogen Pins als Eingänge einstellen cli (); // diable interrupts // set up continuous sampling Analog Pin 0 // ADCSRA- und ADCSRB-Register löschen ADCSRA = 0;  ADCSRB = 0;  ADMUX | = (1 << REFS0);  // Set Referenzspannung ADMUX | = (1 << ADLAR);  // linke Ausrichtung des ADC-Werts - damit wir die höchsten 8 Bits aus dem ADCH-Register nur lesen können ADCSRA | = (1 << ADPS2) |  (1 << ADPS0);  // ADC-Uhr einstellen mit 32 Prescaler-16mHz / 32 = 500kHz ADCSRA | = (1 << ADATE);  // Enabble Auto Trigger ADCSRA | = (1 << ADIE);  // Freigabe von Interrupts, wenn die Messung abgeschlossen ist ADCSRA | = (1 << ADEN);  // ADC ADCSRA aktivieren | = (1 << ADSC);  // Start ADC Messungen sei (); // Enable Interrupts} ISR (ADC_vect) {// wenn neuer ADC-Wert ready incomingAudio = ADCH;  If (rec) {if (Umschalten) {buffer1 [i] = incomingAudio; // eingehenden PORTD speichern = Puffer2 [iscale]; // DAC senden} else {buffer2 [i] = incomingAudio; [Iscale]; // DAC senden}} else {if (umschalten) {PORTD = buffer2 [iscale]; // DAC aussenden} else {PORTD = Puffer1 [iscale]; // DAC senden}} i + = 1;  Iscale = i / scale;  If (i == Grenzwert) {rec = 0; // stoppt Aufzeichnung} if (i == (Grenzwert * Skala)) {i = 0;  Iscale = 0;  Toggle ^ = 1;  Rec = 1;  }} Void Schleife () {}

Schritt 29: RC-Potentiometer

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Da der ADC mit dem Umwandeln des eingehenden Audiosignals von A0 zu digital beschäftigt ist, müssen die drei Steuerpotentiometer auf der Effektbox (Naß / Trocken, Tonhöhe und Korngröße) mit einem der digitalen Pins überwacht werden. Dies kann unter Verwendung einer RC-Schaltung erfolgen. Diese Schaltung verwendet einen digitalen Stift auf dem Arduino die zu messen Menge an Zeit, um einen Kondensator zu entladen nimmt . Diese Zeit bezieht sich auf den Widerstand in der Schaltung, der durch ein Potentiometer eingestellt wird. Auf diese Weise können wir den Widerstand des Potentiometers indirekt messen.

Löten Sie eine Reihe zu den Kopfstiften zu den digitalen Stiften 9-13. Löten Sie einen 10kOhm Widerstand und 0.1uF Kondensator in Serie zu den Stiften 10-12. Lösen Sie das freie Ende der 0.1uF-Kondensatoren zusammen und verbinden Sie sie mit Arduino + 5V. Verbinden Sie den Außenzapfen zweier 1mOhm linearer Taper-Töpfe mit der Verbindung zwischen dem Widerstand und dem Kondensator, der an den digitalen Pins 11 und 12 befestigt ist. Schließen Sie den äußeren Pin eines logarithmischen Taper-Potentiometers von 1mOhm an den Übergang zwischen dem Widerstand und dem Kondensator an, der am digitalen Pin 10 befestigt ist. Löten Sie die Mittelstifte jedes Topfes auf Masse.

Ich möchte, dass Sie die Auflösung einer dieser Steuerelemente erhöhen können, indem Sie die Kapazität der 0,1uF-Kappe auf 1uF oder 10uF erhöhen. Diese Änderung muss auch in der endgültigen Firmware berücksichtigt werden.

Schritt 30: Schalter

Arduino Vocal Wirkung Box

Dieser Schalter ermöglicht die umgekehrte Wiedergabe von aufgezeichneten Samples. Lösen Sie einen 10kOhm-Widerstand auf eine der Anschlüsse des Schalters. Löten Sie ein rotes Kabel an das andere Ende des Widerstandes und an Masse anschließen. Löten Sie einen Draht an die Verbindung zwischen dem Widerstand und dem Schalter und verbinden Sie mit dem Arduino Digital Pin 9. Löten Sie einen schwarzen Draht an den verbleibenden Pin vom Switch und verbinden Sie ihn mit Masse.

Schritt 31: LED-Anzeigen

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Löten Sie 100ohm Widerstände an die Anoden zweier weißer LEDs. Verbinden Sie die Kathoden der beiden Leuchtdioden mit Masse. Verbinden Sie die Anode einer der LEDs mit dem Digital Pin 13 - dies ist die Clipping-Anzeige. Die andere LED-Anzeige wird im nächsten Schritt mit einem Schalter verbunden.

Schritt 32: Ausgangsschalter

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Schaltet dieser Schalter eine LED ein, um anzuzeigen, dass der Ausgang eingeschaltet ist. Löten Sie zwei Drähte auf die Rückseite des 10kOhm Topfes. Verbinden Sie ein Kabel mit dem Arduino 5V und das andere mit der Anode der Anzeige-LED. Das andere Ende der LED leuchtet auf.

Schritt 33: Gehäuse

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Arduino Vocal Wirkung Box

Ich habe ein dreieckiges Gehäuse in Corel-Zeichnung und schneide es aus 1/4 "Sperrholz auf einem Laserschneider.Zwei Seiten haben Löcher für die Eingabe und Ausgänge Steuerelemente (Buchse, LED-Anzeige und Gain-Potentiometer) Die Frontplatte hat Löcher für die Rest der Bedienelemente (Ein- / Aus-Schalter, Rückwärtsschalter, Nass- / Trockenmischer, Pitch-Topf, Korngrösse) Der Boden hat ein Loch für einfachen Zugang zum USB-Port des arduino.

Ich beschichtete das Sperrholz in drei Schichten Polycryl und klebte die Seiten mit Holzleim zusammen. Ich klebte drei kleine dreieckige Stücke in die Ecken des Gehäuses, so dass ich die Rückwand mit Holzschrauben anschrauben konnte (Abb. 3).

Befestigen Sie das Arduino mit den Kopfstiften auf dem Protoboard und beginnen Sie mit der Installation der Komponenten im Gehäuse. Ich begann mit der Befestigung der Töpfe und Schalter auf der Frontplatte und fügte dann die Buchsen, LED-Anzeigen und Töpfe an den Seiten. Schließlich schob ich den Arduino-USB-Port durch das quadratische Loch auf der Unterseite des Gehäuses. Mein Arduino saß fest an seinem Platz, Sie konnten es an die hintere Platte für einen Extra sicheren Sitz schrauben.

Ich habe die corel-Datei für das Gehäuse, das ich gebaut habe.

Schritt 34: Batterien

Arduino Vocal Wirkung Box

Sichern Sie die Batterien in den Ecken des Gehäuses mit einem Batterieclip oder einem Stück Klettband. Gehäuseboden aufschrauben.

Schritt 35: Knöpfe

Arduino Vocal Wirkung Box

Drehknöpfe auf Potentiometer aufstecken und mit einer Stellschraube sichern.

Schritt 36: Endgültige Firmware

Arduino Vocal Wirkung Box

Hier ist der endgültige Code für das Projekt. Ich habe schon die Grundideen hinter den meisten der Audio-Verarbeitung in früheren Schritten erklärt. Die einzigen Änderungen, die ich hier gemacht habe, ist, einen Code hinzuzufügen, der die Töpfe und Schalter auf dem Gerät erlaubt, den Wert einiger Variablen zu verändern: "scale", "grain", "forward" und "wet" und "dry .

  // Final Effects Box-Code // von Amanda Ghassaei //http://www.instructables.com/id/Arduino-Vocal-Effects-Box/ // Aug 2012 / * * Dieses Programm ist freie Software;  Können Sie sie unter den Bedingungen der GNU General Public License, wie sie von der Free Software Foundation veröffentlicht wird, weiterverteilen und / oder ändern.  Entweder Version 3 der Lizenz oder * (nach Ihrer Wahl) jede spätere Version.  * * / / * Töpfe: nasse / trockene Korngröße Pitch Shift * / // Audiospeicher Byte Puffer1 [500];  Byte-Puffer2 [500];  // Puffer-Aufzeichnungsvariablen boolean toggle = 0;  Boolean rec = 1;  // Topfkontrolle Lagerung int Skala = 20;  Int scalePot;  Int newScale = Skalierung;  Byte-Multiplikator = 0;  Int Korn = 500;  Int grainPot;  Int newGrain = Getreide;  Int wetDryPot;  Int naß = 16;  Int trocken = 16-naß;  Int newWetDry = nass;  // Datenabrufvariablen unsigned int i = 0; // Indexvariable int iscale = 0; // Indexvariable int iscalerev = korn-1;  // Clipping-Indikatorvariablen Boolescher Clipping;  Int clippingCounter = 5000;  // Umkehrschalter-Variablen boolean forward = 0;  Boolean newForward = forward;  Leere setup () {DDRD = 0xFE; // digital eingestellt Stifte 0-7 als DDRB ausgibt = 0xFD; // setzt digitale Stifte 10-13 als Ausgänge, 9 als Eingabe DDRC = 0x00; // alle analogen Pins als Eingänge cli eingestellt (); // diable interrupts // setze kontinuierliche Abtastung des analogen Pins 0 // lösche ADCSRA- und ADCSRB-Register ADCSRA = 0;  ADCSRB = 0;  ADMUX = 0; // ADMUX-Register löschen ADMUX | = (1 << REFS0);  // Set Referenzspannung ADMUX | = (1 << ADLAR);  // linke Ausrichtung der ADC-Wert, so kann ich die höchsten 8 Bits aus ADCH-Register nur lesen // Da ich A0 lesen, brauche ich nicht zu spezifizieren, welche Analog-Pin ich aus lesen wollen (0 ist Standard) ADCSRA | = (1 << ADPS2)  (1 << ADPS0);  // ADC-Uhr einstellen mit 32 Prescaler-16mHz / 32 = 500kHz ADCSRA | = (1 << ADATE);  // Enabble Auto Trigger ADCSRA | = (1 << ADIE);  // Freigabe von Interrupts, wenn die Messung abgeschlossen ist ADCSRA | = (1 << ADEN);  // ADC ADCSRA aktivieren | = (1 << ADSC);  // ADC-Messungen sei () beginnen; // Interrupts ermöglichen} ISR (ADC_vect) {// wenn neue ADC-Wert bereit, wenn (rec) {if (Toggle) {buffer1 [i] = ADCH; // speichern eingehende if (ADCH == 0 || ADCH == 1023) {// wenn PORTB Clipping | = 32; // gesetzt Stift 13 hoch clippingCounter = 5000; // Zähler zurücksetzen ausschnitt = 1; // derzeit Clipping} if (vorwärts) {/ / vorwärts PORTD = (nass * int (buffer2 [iSCALE]) + trocken * int (ADCH)) >> 4; // DAC} else {// auszusenden PORTD = (nass * int reverse (buffer2 [iscalerev]) + (ADCH == 0 || ADCH == 1023) {// Wenn Sie PORTB ausschneiden | = 32; // gesetzt Stift 13 hoch clippingCounter = 5000; // Zähler zurücksetzen ausschnitt = 1; // derzeit Clipping} if (vorwärts) {PORTD = (nass * int (buffer1 [iSCALE]) + trocken * int ( ADAC)) >> 4; // DAC ausgeben}}}}}} 4, // DAC ausgeben} else {PORTD = (nass * int (Puffer1 [iscalerev]) + trocken * int (ADCH) (Toggle) {if (vorwärts) {PORTD = (nass * int (buffer2 [iSCALE]) + trocken * int (ADCH)) >> 4; // DAC aussenden} else {PORTD = (nass * int (buffer2 [ iscalerev]) + trocken * int (ADCH)) >> 4; // senden DAC}} else {if (vorwärts) {PORTD = (nass * int (buffer1 [iSCALE]) + trocken * int (ADCH))> > 4; // DAC aussenden} else {PORTD = (nass * int (buffer1 [iscalerev]) + trocken * int (ADCH)) >> 4; // senden DAC}}} i ++; // Schritt i iSCALE = I * 10 / Skalenkorn-Multiplikator;  Iscalerev = Korn-iscale-1;  Wenn (i == Korn) {i = 0; // Aufzeichnung} if (i = = Korn / Skala / 10)  Iscale = 0;  Iscalerev = Körnung-1;  Forward = newForward; // Aktualisierungsrichtung scale = newScale; // Aktualisierungsskala grain = newGrain; // Aktualisierungskorn trocken = newWetDry; // Update nass trocken nass = 16-trocken;  Toggle ^ = 1; // versuchen Sie, diese rec = 1 zu entfernen;  Multiplikator = 0;  } Else if (iscale> = Körnung) {iscale = 0;  Iscalerev = Korn-1;  Multiplikator ++;  }} Else {i = 0;  Iscale = 0;  Iscalerev = Körnung-1;  Forward = newForward; // Aktualisierungsrichtung scale = newScale; // Aktualisierungsskala grain = newGrain; // Aktualisierungskorn trocken = newWetDry; // Update nass trocken nass = 16-trocken;  Toggle ^ = 1; // versuchen Sie, diese rec = 1 zu entfernen;  Multiplikator = 0;  }} If (clipping) {clippingCounter -; // Dekrement-Clipping-Zähler}} void checkScale () {PORTB & = 251; // set pin 10 low scalePot = 0;  Während (digitalRead (10)) {scalePot ++;  } NewScale = scalePot + 2;  } Void checkGrainSize () {PORTB & = 247; // set pin 11 low grainPot = 0;  Während (digitalRead (11)) {grainPot ++;  } If (grainPot <1) {grainPot = 1;  } Sonst wenn (grainPot> 20) {grainPot = 20;  } NewGrain = grainPot * 25;  } Void checkWetDry () {PORTB & = 239; // set pin 12 low wetDryPot = 0;  Während (digitalRead (12)) {wetDryPot ++; // von 0 bis ~ 185} if (wetDryPot <10) {wetDryPot = 0;  } Else if (wetDryPot> 160) {wetDryPot = 160;  } NewWetDry = wetDryPot / 10; // Skalierung bis zu 16} void checkRev () {// check reverse switch if (digitalRead (9)) {newForward = 1;  } Else {newForward = 0;  }} Void Schleife () {if (clipping) {// falls Clipping aktuell (clippingCounter <= 0) {// wenn genügend Zeit verstrichen ist seit Clipping Clipping = 0; // momentan nicht clipping PORTB & = 223; // (Pin 13)}} DDRB = 0xFD; // Setzen der Pins 10-12 als Ausgänge PORTB | = 28; // Setzen der Pins 10-12 hohe Verzögerung (1); // warten, bis der Kondensator checkRev entladen hat (); // Reverse-Schalter prüfen DDRB = 0xE1; // Setzen der Pins 10-12 als Eingänge checkScale ();  CheckGrainSize ();  CheckWetDry ();  aufrechtzuerhalten.
Related Reading