Re: Zvukový senzor MAX9814
Napsal: 26 úno 2023, 13:45
Ano něco by to tvořit mohlo, ale bude to reagovat na všechny frekvence ... takže i na dupnutí i na hvízdnutí. A bude ti furt jedna ledka svítit, nemáš tam stav kdy je zhasneš všechny.
České fórum pro všechny nadšence do Arduina a dalších technologií.
https://forum.hwkitchen.cz/
Kód: Vybrat vše
const int sampleWindow = 20; // Sample window width in mS (50 mS = 20Hz)
unsigned int sample;
int zvuk = A0;
int LED_G = 2;
int LED_Y = 4;
int LED_R = 6;
void setup() {
// put your setup code here, to run once:
pinMode (zvuk, INPUT) ;
pinMode (LED_G, OUTPUT) ;
pinMode (LED_Y, OUTPUT) ;
pinMode (LED_R, OUTPUT) ;
Serial.begin (115200);
}
void loop() {
// put your main code here, to run repeatedly:
unsigned long startMillis= millis(); // Start of sample window
float peakToPeak = 0; // peak-to-peak level
unsigned int signalMax = 0; //minimum value
unsigned int signalMin = 1024; //maximum value
// collect data for 50 mS
while (millis() - startMillis < sampleWindow)
{
sample = analogRead(zvuk); //get reading from microphone
if (sample < 1024) // toss out spurious readings
{
if (sample > signalMax)
{
signalMax = sample; // save just the max levels
}
else if (sample < signalMin)
{
signalMin = sample; // save just the min levels
}
}
}
peakToPeak = signalMax - signalMin; // max - min = peak-peak amplitude
int dB = map(peakToPeak,20,900,49.5,90); //calibrate for deciBels
Serial.print(48);
Serial.print(" ");
Serial.print(80);
Serial.print(" ");
Serial.println(dB);
if (dB >= 60){
digitalWrite (LED_G, HIGH);
digitalWrite (LED_Y, HIGH);
digitalWrite (LED_R, HIGH);
}
else if (dB < 60 && dB >= 55){
digitalWrite (LED_G, HIGH);
digitalWrite (LED_Y, HIGH);
digitalWrite (LED_R, LOW);
}
else if (dB < 55 && dB > 52){
digitalWrite (LED_G, HIGH);
digitalWrite (LED_Y, LOW);
digitalWrite (LED_R, LOW);
}
else{
digitalWrite (LED_G, LOW);
digitalWrite (LED_Y, LOW);
digitalWrite (LED_R, LOW);
}
}
Kód: Vybrat vše
if (dB >= 60){ // nebo libovolná jiná hranice
digitalWrite (Bzucak, HIGH); // zapnout bzučák
delay(500); // půl sekundy bzučet
digitalWrite (Bzucak, LOW); // vypnout bzučák
delay(88); // počkat na ozvěnu
}; // a můžeme do dalšího průběhu loop, kde se poslouchá
Kód: Vybrat vše
const int sampleWindow = 20; // Sample window width in mS (50 mS = 20Hz)
unsigned int sample;
int zvuk = A0;
int LED_G = 2;
int LED_Y = 4;
int LED_R = 6;
int bzucak = 12;
void setup() {
// put your setup code here, to run once:
pinMode (zvuk, INPUT) ;
pinMode (LED_G, OUTPUT) ;
pinMode (LED_Y, OUTPUT) ;
pinMode (LED_R, OUTPUT) ;
pinMode (bzucak, OUTPUT) ;
Serial.begin (115200);
}
void loop() {
// put your main code here, to run repeatedly:
unsigned long startMillis= millis(); // Start of sample window
float peakToPeak = 0; // peak-to-peak level
unsigned int signalMax = 0; //minimum value
unsigned int signalMin = 1024; //maximum value
// collect data for 50 mS
while (millis() - startMillis < sampleWindow)
{
sample = analogRead(zvuk); //get reading from microphone
if (sample < 1024) // toss out spurious readings
{
if (sample > signalMax)
{
signalMax = sample; // save just the max levels
}
else if (sample < signalMin)
{
signalMin = sample; // save just the min levels
}
}
}
peakToPeak = signalMax - signalMin; // max - min = peak-peak amplitude
int dB = map(peakToPeak,20,900,49.5,90); //calibrate for deciBels
Serial.print(48);
Serial.print(" ");
Serial.print(80);
Serial.print(" ");
Serial.println(dB);
if (dB >= 60){
digitalWrite (LED_G, HIGH);
digitalWrite (LED_Y, HIGH);
digitalWrite (LED_R, HIGH);
digitalWrite (bzucak, HIGH);
delay (150);
digitalWrite (bzucak, LOW);
}
else if (dB < 60 && dB >= 55){
digitalWrite (LED_G, HIGH);
digitalWrite (LED_Y, HIGH);
digitalWrite (LED_R, LOW);
digitalWrite (bzucak, LOW);
}
else if (dB < 55 && dB > 52){
digitalWrite (LED_G, HIGH);
digitalWrite (LED_Y, LOW);
digitalWrite (LED_R, LOW);
digitalWrite (bzucak, LOW);
}
else{
digitalWrite (LED_G, LOW);
digitalWrite (LED_Y, LOW);
digitalWrite (LED_R, LOW);
digitalWrite (bzucak, LOW);
}
delay(5);
}
Kód: Vybrat vše
delay(88); // počkat na ozvěnu