Arduino Audio Input (8 / 8 steg)
Steg 8: Klippning indikator
För att ställa in räknaren klippning skapat jag några nya variabler. "klippning" har ett tillstånd av 1 när Arduino upptäcker klippning (den inkommande signalen mäts för att vara 0 eller 5V) och ett tillstånd av 0 när Arduino inte identifierar klippning. I koden nedan (för 8kHz samplingsfrekvens) ställa jag också in en variabel som kallas clippingCounter. Syftet med denna variabel är att hålla indikatorn LED på en stund efter urklippet upptäcktes så att den är synlig för det mänskliga ögat. I 38,5 kHz koden (längst ned i detta steg) använde jag en delay(100) för att uppnå samma effekt.
Enkla ljud i med klippning indikator
av Amanda Ghassaei
Sept 2012
/*
* Detta program är fri programvara; Du kan vidaredistribuera det och/eller ändra
* det enligt villkoren i GNU General Public License som offentliggjorts av
* den Free Software Foundation; antingen version 3 av licensen, eller
* (på ditt alternativ) någon senare version.
*
*/
int incomingAudio;
booleska klippning = 0; //zero = inte klippning, en = för närvarande klippning
int clippingCounter = 5000;
void setup() {
}
void loop() {
incomingAudio = analogRead (A0); //read input från A0
göra saker med variabeln "incomingAudio"
om (incomingAudio == 0 || incomingAudio == 1023) {//if klippning
digitalWrite (13, hög), //set stift 13 hög
klippningen = 1; //currently klippning
clippingCounter = 5000; //reset clippingCounter
}
om (klippning) {
om (clippingCounter > 0) {
clippingCounter--, //decrement klippning counter
}
annat {//if clippingCounter har räknat ända ner
klippningen = 0; //no längre klippning
digitalWrite (13, låg), //turn av klippning indikator
}
}
}
och nedan är koden för 38,5 kHz med avbryter:
Ljud med 38,5 kHz samplingsfrekvens, avbryter och klippning indikator
av Amanda Ghassaei
Sept 2012
/*
* Detta program är fri programvara; Du kan vidaredistribuera det och/eller ändra
* det enligt villkoren i GNU General Public License som offentliggjorts av
* den Free Software Foundation; antingen version 3 av licensen, eller
* (på ditt alternativ) någon senare version.
*
*/
variabel för att lagra inkommande ljud prov
byte incomingAudio;
Clipping indicator variabler
booleska klippning = 0;
void setup() {
pinMode (13, OUTPUT); //led indikator pin
(CLI); //disable avbrott
Ställ in kontinuerlig provtagning av analoga pin 0
Rensa ADCSRA och ADCSRB register
ADCSRA = 0;
ADCSRB = 0;
ADMUX | = (1 << REFS0); ange referens spänning
ADMUX | = (1 << ADLAR); Vänsterjustera ADC värde - så vi kan läsa högst 8 bitar från ADCH register endast
ADCSRA | = (1 << ADPS2) | (1 << ADPS0); ställa in ADC klockan med 32 prescaler - 16mHz/32 = 500 kHz
ADCSRA | = (1 << ADATE); enabble automatisk utlösare
ADCSRA | = (1 << Ebba Grön); Aktivera avbrott när mätningen är klar
ADCSRA | = (1 << ADEN); Aktivera ADC
ADCSRA | = (1 << ADSC); Starta ADC mätningar
SEI (); //enable avbrott
Om du vill lägga till andra saker i setup(), göra det här
}
ISR(ADC_vect) {//when nya ADC värdet redo
incomingAudio = ADCH; //store 8 bitars värde från analoga stift 0
om (incomingAudio == 0 || incomingAudio == 255) {//if klippning
digitalWrite (13, hög), //set stift 13 hög
klippningen = 1; //currently klippning
}
}
void loop() {
om (klippning) {//if för närvarande klippning
klippningen = 0; / /
digitalWrite (13, låg), //turn av klippning led indikator (stift 13)
}
Delay(100);
}