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");
}
}
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);
^
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.