×¢²á µÇ¼
µç×Ó¹¤³ÌÊÀ½ç-ÂÛ̳ ·µ»ØÊ×Ò³ EEWORLDÊ×Ò³ ƵµÀ EE´óѧÌà ÏÂÔØÖÐÐÄ Datasheet רÌâ
oxlm_1µÄ¸öÈË¿Õ¼ä https://home.eeworld.com.cn/space-uid-1076641.html [ÊÕ²Ø] [¸´ÖÆ] [·ÖÏí] [RSS]
ÈÕÖ¾

¡¾Follow meµÚ¶þ¼¾µÚ4ÆÚ¡¿½ø½×ÈÎÎñÒ» MIC·ù¶ÈÓÃledÑÕɫչʾ

ÒÑÓÐ 232 ´ÎÔĶÁ2024-11-23 14:56 |¸öÈË·ÖÀà:arduino nano rp2040 connect

Ô¤±¸ÖªÊ¶
        ÄÜÁ¿¼ì²â£¬ÊôÓÚÒôƵÀïÃæ×î¼òµ¥µÄËã·¨ÁË°É£¬Æä¼ÆËãÂß¼­Îª£º
energy = sqrt((a0 * a0 + a1 * a1 + ... + an * an) / (n + 1))
Ô­Àí·ÖÎö
        ¶ø¾­¹ýÁËÇ°Ãæmic¼ÖÆÐźŲ¢´òÓ¡µÄ²¿·Ö£¬ÎÒÃÇ¿ÉÒÔͨ¹ý²¨ÐλñÈ¡ÒÔÏÂÐÅÏ¢£¬ÔÚarduino nano rp2040 connectÀÒôƵ´¦Àí¾«¶ÈΪ16bit£¬Ò²¾ÍÊÇ˵ËãÉÏ·ûºÅ룬ÆÆÒôÖµÔÚ32767 ºÍ -32768¡£
        ¾­¹ý¶ÔÉÏÃ溯ÊýµÄ·ÖÎö£¬ÔÙ½áºÏmicÐźŷ¶Î§£¬ÎÒÃÇ×îÖÕËã³öµÄÄÜÁ¿ÐÅÏ¢Ó¦¸ÃÔÚ0~32767Ö®¼ä£¬´ËʱÈç¹ûÐèҪת»¯³ÉpwmµÄ0~255Ö®¼ä£¬ÄǾͺܼòµ¥ÁË£¬Ö»ÐèÒª°ÑÊý¾ÝÏòÓÒÆ«ÒÆ7λ¼´¿É£¨Èç¹ûÊǶ¨µãÊýµÄ»°£©¡£
        Ö®ºóÔÙ×Ô¶¨Òå½»»¥Âß¼­£¬ÊµÏÖÈý¿Å²»Í¬µÆÖéµÄÁÁ¶Èµ÷½Ú¼´¿É¡£
Èí¼þ±àÂë
        »ùÓÚÉÏÃæµÄ·ÖÎö£¬ÎÒ²ÉÓÃÁ˸¡µãÊýÈ¥¼ÆËãÄÜÁ¿£¨½ö½öÊÇΪÁË·ÀÖ¹Êý¾ÝÒç³ö¶øÒÑ£¬Æäʵ2040µÄm0+ºË²¢²»Ö§³Ö¸¡µãÔËË㣩£¬¼ÆËãÍê±ÏºóÔÙ½«¸¡µãÊýת»¯³ÉpwmµÆµÄ0~255µÄÕ¼¿Õ±ÈÐÅÏ¢£¬Ö®ºóÔÙ°´ÕÕÒ»¶¨Âß¼­È¥·Ö±ð¿ØÖƺìµÆºÍÂ̵ƣ¨Ö®ËùÒÔ²»È¥¿ØÀ¶µÆ£¬ÊÇÒòΪûÓеƹâÕÖµÄÇ°ÌáÏ£¬Èý¿ÅµÆʵÔÚÊÇÅIJ»³öЧ¹û£¬Á½¿ÅµÆ·´¶øÄÜ͸¹ýÖ¸¼×¸Ç¿´³ö±ä»¯£©¡£
#include <WiFiNINA.h>
#include <PDM.h>

static const char channels = 1;
static const int frequency = 16000;
short sampleBuffer[512];
volatile int samplesRead;

void setup() {
  //pinMode(LEDB, OUTPUT);
  pinMode(LEDR,OUTPUT);
  pinMode(LEDG,OUTPUT);
  analogWrite(LEDR,255);
  analogWrite(LEDG,255);
  Serial.println("Hello DigiKey & EEWorld!");
  Serial.println();
  Serial.begin(9600);
  while (!Serial);
  PDM.onReceive(onPDMdata);
  if (!PDM.begin(channels, frequency)) {
    Serial.println("Failed to start PDM!");
    while (1);
  }
}

void rgbledShow(float level) {
    unsigned short value = level / 128;
    unsigned char r,g,b;
    Serial.print("value : ");
    Serial.print(value);
    Serial.print(" level: ");
    Serial.println(level);
    r = value;
    g = 255 - value;
    analogWrite(LEDR,r);
    analogWrite(LEDG,g);
}

void micHandle() {
  float level = 0;
  if (samplesRead) {
    for (int i = 0; i < samplesRead; i++) {
      level += (sampleBuffer[i] * sampleBuffer[i]);
    }
    level /= samplesRead;
    level = sqrt(level);
    rgbledShow(level);
    samplesRead = 0;
  }
}

void loop() {
    micHandle();
}

void onPDMdata() {
  // Query the number of available bytes
  int bytesAvailable = PDM.available();
  PDM.read(sampleBuffer, bytesAvailable);
  samplesRead = bytesAvailable / 2;
}

×ܽá

        ÔÚÕâÀÓÖÒ»´Î»Ø¹ËÁËÒôƵ´¦ÀíÉϵÄͨÓÃ×ö·¨£¬ºóÐøÈçÓÐÐèÒª£¬¿ÉÒÔ½øÒ»²½µÄ×öusb micÖ®ÀàµÄÍæÒâÍæÍ棬µ«²»È·¶¨arduinoÊÇ·ñÖ§³ÖÕâôÍæ¡£

±¾ÎÄÀ´×ÔÂÛ̳£¬µã»÷²é¿´ÍêÕûÌû×ÓÄÚÈÝ¡£

ÆÀÂÛ (0 ¸öÆÀÂÛ)

facelist doodle Í¿Ñ»°å

ÄúÐèÒªµÇ¼ºó²Å¿ÉÒÔÆÀÂÛ µÇ¼ | ×¢²á

ÈÈÃÅÎÄÕÂ