Simple Audio Frequency Meter Compiling Code

I've made several attempts to compile this code but I keep getting several errors. The code references the AudioFrequencyMeter library which I downloaded from this link: GitHub - arduino-libraries/AudioFrequencyMeter: Allows the Arduino Zero and MKR1000 to sample a generic input audio signal and get the fundamental pitch

The first set of errors appeared to concern the AudioFrequencyMeter.cpp file so I moved it from the library which resulted in less but still several undefined reference to 'AudioFrequencyMeter:' errors. Both sets of errors appeared upon trying to compile the code. I got the code from a tutorial on how to use the Arduino AudioFrequencyMeter library: https://www.arduino.cc/en/Tutorial/SimpleAudioFrequencyMeter which I've also shown below.

Could someone please tell me how to fix the code so that it will compile and run with my circuit?

The Code:

/*
  Simple Frequency Meter for Arduino Zero

  Demonstrates how to sample an input signal and get back its frequency

  This example code is in the public domain

  http://arduino.cc/en/Tutorial/SimpleAudioFrequencyMeter

  created by Arturo Guadalupi <a.guadalupi@arduino.cc>
  10 Nov 2015
*/

#include <AudioFrequencyMeter.h>

AudioFrequencyMeter meter;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial.println("started");

  meter.setBandwidth(70.00, 1500);    // Ignore frequency out of this range
  meter.begin(A0, 45000);             // Intialize A0 at sample rate of 45kHz
}

void loop() {
  // put your main code here, to run repeatedly:
  float frequency = meter.getFrequency();
  if (frequency > 0)
  {
    Serial.print(frequency);
    Serial.println(" Hz");
  }
}

First Set of Errors Part 1:

WARNING: library AudioFrequencyMeter-master claims to run on (samd) architecture(s) and may be incompatible with your current board which runs on (avr) architecture(s).
C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp: In member function 'void AudioFrequencyMeter::ADCconfigure()':

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:163:6: error: base operand of '->' is not a pointer

   ADC->CTRLB.bit.RESSEL = ADC_CTRLB_RESSEL_8BIT_Val;

      ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:163:27: error: 'ADC_CTRLB_RESSEL_8BIT_Val' was not declared in this scope

   ADC->CTRLB.bit.RESSEL = ADC_CTRLB_RESSEL_8BIT_Val;

                           ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:167:6: error: base operand of '->' is not a pointer

   ADC->CTRLB.bit.PRESCALER = ADC_CTRLB_PRESCALER_DIV8_Val;     // Divide Clock by 8 -> ~100kHz

      ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:167:30: error: 'ADC_CTRLB_PRESCALER_DIV8_Val' was not declared in this scope

   ADC->CTRLB.bit.PRESCALER = ADC_CTRLB_PRESCALER_DIV8_Val;     // Divide Clock by 8 -> ~100kHz

                              ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:175:6: error: base operand of '->' is not a pointer

   ADC->SAMPCTRL.reg = 0x1F;                                    // Set max Sampling Time Length

      ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp: In function 'bool ADCisSyncing()':

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:184:14: error: base operand of '->' is not a pointer

   return (ADC->STATUS.bit.SYNCBUSY);

              ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp: In member function 'void AudioFrequencyMeter::ADCdisable()':

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:189:6: error: base operand of '->' is not a pointer

   ADC->CTRLA.bit.ENABLE = 0x00;                               // Disable ADC

      ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp: In member function 'void AudioFrequencyMeter::ADCenable()':

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:196:6: error: base operand of '->' is not a pointer

   ADC->CTRLA.bit.ENABLE = 0x01;                               // Enable ADC

      ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp: In member function 'void AudioFrequencyMeter::ADCsetMux()':

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:208:28: error: 'g_APinDescription' was not declared in this scope

   pinPeripheral(samplePin, g_APinDescription[samplePin].ulPinType);

                            ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:208:66: error: 'pinPeripheral' was not declared in this scope

   pinPeripheral(samplePin, g_APinDescription[samplePin].ulPinType);

                                                                  ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:212:6: error: base operand of '->' is not a pointer

   ADC->INPUTCTRL.bit.MUXPOS = g_APinDescription[samplePin].ulADCChannelNumber; // Selection for the positive ADC input

      ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp: In member function 'void AudioFrequencyMeter::tcConfigure()':

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:218:3: error: 'GCLK' was not declared in this scope

   GCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID(GCM_TC4_TC5)) ;

   ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:218:35: error: 'GCLK_CLKCTRL_CLKEN' was not declared in this scope

   GCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID(GCM_TC4_TC5)) ;

                                   ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:218:56: error: 'GCLK_CLKCTRL_GEN_GCLK0' was not declared in this scope

   GCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID(GCM_TC4_TC5)) ;

                                                        ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:218:97: error: 'GCM_TC4_TC5' was not declared in this scope

   GCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID(GCM_TC4_TC5)) ;

                                                                                                 ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:218:108: error: 'GCLK_CLKCTRL_ID' was not declared in this scope

   GCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID(GCM_TC4_TC5)) ;

                                                                                                            ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:224:3: error: 'TC5' was not declared in this scope

   TC5->COUNT16.CTRLA.reg |= TC_CTRLA_MODE_COUNT16;

   ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:224:29: error: 'TC_CTRLA_MODE_COUNT16' was not declared in this scope

   TC5->COUNT16.CTRLA.reg |= TC_CTRLA_MODE_COUNT16;

                             ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:227:29: error: 'TC_CTRLA_WAVEGEN_MFRQ' was not declared in this scope

   TC5->COUNT16.CTRLA.reg |= TC_CTRLA_WAVEGEN_MFRQ;

                             ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:229:29: error: 'TC_CTRLA_PRESCALER_DIV1' was not declared in this scope

   TC5->COUNT16.CTRLA.reg |= TC_CTRLA_PRESCALER_DIV1 | TC_CTRLA_ENABLE;

                             ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:229:55: error: 'TC_CTRLA_ENABLE' was not declared in this scope

   TC5->COUNT16.CTRLA.reg |= TC_CTRLA_PRESCALER_DIV1 | TC_CTRLA_ENABLE;

                                                       ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:231:40: error: 'SystemCoreClock' was not declared in this scope

   TC5->COUNT16.CC[0].reg = (uint16_t) (SystemCoreClock / sampleRate - 1);

                                        ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:238:19: error: 'TC5_IRQn' was not declared in this scope

   NVIC_DisableIRQ(TC5_IRQn);

                   ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:238:27: error: 'NVIC_DisableIRQ' was not declared in this scope

   NVIC_DisableIRQ(TC5_IRQn);

It might be that the AudioFrequencyMeter library is for Arduino zero, which uses different hardware than a Uno.

Here's a bit of 'quick and dirty' code to read an audio frequency from a digital pin:

const byte inputPin = 2;

boolean inputState = false;
boolean lastInputState = false;
long count = 0UL;

unsigned long previousCountMillis = millis();
const long countMillis = 500L;

void setup() {
  pinMode(inputPin, INPUT_PULLUP);
  Serial.begin(115200);
}

void loop() {
  inputState = digitalRead(inputPin);
  if (inputState != lastInputState) {
    count++;  
    lastInputState = inputState;
  }

  // runs every half second, count is equal to Hz
  if (millis() - previousCountMillis >= countMillis) {
    previousCountMillis += countMillis;
    
    Serial.print(count); 
    Serial.print(" Hz");
    Serial.print('\n');
    count = 0UL;
  }
}

First Set of Errors Part 2:

                         ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:239:32: error: 'NVIC_ClearPendingIRQ' was not declared in this scope

   NVIC_ClearPendingIRQ(TC5_IRQn);

                                ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:240:34: error: 'NVIC_SetPriority' was not declared in this scope

   NVIC_SetPriority(TC5_IRQn, 0x00);

                                  ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:241:26: error: 'NVIC_EnableIRQ' was not declared in this scope

   NVIC_EnableIRQ(TC5_IRQn);

                          ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp: In member function 'bool AudioFrequencyMeter::tcIsSyncing()':

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:251:10: error: 'TC5' was not declared in this scope

   return TC5->COUNT16.STATUS.reg & TC_STATUS_SYNCBUSY;

          ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:251:36: error: 'TC_STATUS_SYNCBUSY' was not declared in this scope

   return TC5->COUNT16.STATUS.reg & TC_STATUS_SYNCBUSY;

                                    ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp: In member function 'void AudioFrequencyMeter::tcEnable()':

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:256:3: error: 'TC5' was not declared in this scope

   TC5->COUNT16.CTRLA.reg |= TC_CTRLA_ENABLE;

   ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:256:29: error: 'TC_CTRLA_ENABLE' was not declared in this scope

   TC5->COUNT16.CTRLA.reg |= TC_CTRLA_ENABLE;

                             ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp: In member function 'void AudioFrequencyMeter::tcReset()':

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:263:3: error: 'TC5' was not declared in this scope

   TC5->COUNT16.CTRLA.reg = TC_CTRLA_SWRST;

   ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:263:28: error: 'TC_CTRLA_SWRST' was not declared in this scope

   TC5->COUNT16.CTRLA.reg = TC_CTRLA_SWRST;

                            ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp: In member function 'void AudioFrequencyMeter::tcDisable()':

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:273:3: error: 'TC5' was not declared in this scope

   TC5->COUNT16.CTRLA.reg &= ~TC_CTRLA_ENABLE;

   ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:273:30: error: 'TC_CTRLA_ENABLE' was not declared in this scope

   TC5->COUNT16.CTRLA.reg &= ~TC_CTRLA_ENABLE;

                              ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp: In function 'uint8_t ADCread()':

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:285:6: error: base operand of '->' is not a pointer

   ADC->SWTRIG.bit.START = 1;

      ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:287:14: error: base operand of '->' is not a pointer

   while ( ADC->INTFLAG.bit.RESRDY == 0 );        // Waiting for conversion to complete

              ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:288:20: error: base operand of '->' is not a pointer

   returnValue = ADC->RESULT.reg;                 // Store the value

                    ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:293:6: error: base operand of '->' is not a pointer

   ADC->SWTRIG.bit.START = 0;

      ^

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp: In function 'void TC5_Handler()':

C:\Users\ebowe_000\Documents\Arduino\libraries\AudioFrequencyMeter-master\src\AudioFrequencyMeter.cpp:376:3: error: 'TC5' was not declared in this scope

   TC5->COUNT16.INTFLAG.bit.MC0 = 1;     // Clear interrupt

   ^

exit status 1
Error compiling for board Arduino/Genuino Uno.

Second Set of Errors after removing AudioFrequencyMeter.cpp:

Arduino: 1.8.7 (Windows Store 1.8.15.0) (Windows 10), Board: "Arduino/Genuino Uno"

WARNING: library AudioFrequencyMeter-master claims to run on (samd) architecture(s) and may be incompatible with your current board which runs on (avr) architecture(s).
C:\Users\EBOWE_~1\AppData\Local\Temp\cceT8ahe.ltrans0.ltrans.o: In function `global constructors keyed to 65535_0_sketch_oct27a.ino.cpp.o.1819':

C:\Users\ebowe_000\Documents\Arduino\sketch_oct27a\sketch_oct27a/sketch_oct27a.ino:16: undefined reference to `AudioFrequencyMeter::AudioFrequencyMeter()'

C:\Users\EBOWE_~1\AppData\Local\Temp\cceT8ahe.ltrans0.ltrans.o: In function `setup':

C:\Users\ebowe_000\Documents\Arduino\sketch_oct27a\sketch_oct27a/sketch_oct27a.ino:23: undefined reference to `AudioFrequencyMeter::setBandwidth(float, float)'

C:\Users\ebowe_000\Documents\Arduino\sketch_oct27a\sketch_oct27a/sketch_oct27a.ino:24: undefined reference to `AudioFrequencyMeter::begin(int, unsigned int)'

C:\Users\EBOWE_~1\AppData\Local\Temp\cceT8ahe.ltrans0.ltrans.o: In function `loop':

C:\Users\ebowe_000\Documents\Arduino\sketch_oct27a\sketch_oct27a/sketch_oct27a.ino:29: undefined reference to `AudioFrequencyMeter::getFrequency()'

collect2.exe: error: ld returned 1 exit status

exit status 1
Error compiling for board Arduino/Genuino Uno.

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

The library only works on Zero boards, the first line of the docs state this. The compile errors indicate you
are not compiling it for that board.