Hi there,
I already saw this question but never saw an aswer that could help me. I'm using an Arduino mega2560. The main problem is that my project uses 2 libraries that have a same class name "Pin". This leads to an terminal error :
Arduino: 1.8.13 (Windows 10), Board: "Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"
In file included from C:\Users\Matteo Zucchi\Desktop\LEDMUSIC2021\LEDMUSIC2021.ino:4:0:
C:\Users\Matteo Zucchi\Documents\Arduino\libraries\FastLED\src/FastLED.h:14:21: note: #pragma message: FastLED version 3.004.000
# pragma message "FastLED version 3.004.000"
^~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from C:\Users\Matteo Zucchi\Documents\Arduino\libraries\FastLED\src/FastLED.h:48:0,
from C:\Users\Matteo Zucchi\Desktop\LEDMUSIC2021\LEDMUSIC2021.ino:4:
C:\Users\Matteo Zucchi\Documents\Arduino\libraries\FastLED\src/fastpin.h:77:26: error: reference to 'Pin' is ambiguous
class OutputPin : public Pin {
^~~
C:\Users\Matteo Zucchi\Documents\Arduino\libraries\FastLED\src/fastpin.h:34:7: note: candidates are: class Pin
class Pin : public Selectable {
^~~
In file included from C:\Users\Matteo Zucchi\Desktop\LEDMUSIC2021\LEDMUSIC2021.ino:2:0:
C:\Users\Matteo Zucchi\Documents\Arduino\libraries\Analog-Digital_Multiplexers\src/Mux.h:43:16: note: struct admux::Pin
typedef struct Pin {
^~~
In file included from C:\Users\Matteo Zucchi\Documents\Arduino\libraries\FastLED\src/FastLED.h:48:0,
from C:\Users\Matteo Zucchi\Desktop\LEDMUSIC2021\LEDMUSIC2021.ino:4:
C:\Users\Matteo Zucchi\Documents\Arduino\libraries\FastLED\src/fastpin.h: In constructor 'OutputPin::OutputPin(int)':
C:\Users\Matteo Zucchi\Documents\Arduino\libraries\FastLED\src/fastpin.h:79:23: error: class 'OutputPin' does not have any field named 'Pin'
OutputPin(int pin) : Pin(pin) { setOutput(); }
^~~
C:\Users\Matteo Zucchi\Documents\Arduino\libraries\FastLED\src/fastpin.h:79:34: error: 'setOutput' was not declared in this scope
OutputPin(int pin) : Pin(pin) { setOutput(); }
^~~~~~~~~
C:\Users\Matteo Zucchi\Documents\Arduino\libraries\FastLED\src/fastpin.h:79:34: note: suggested alternative: 'setup'
OutputPin(int pin) : Pin(pin) { setOutput(); }
^~~~~~~~~
setup
C:\Users\Matteo Zucchi\Documents\Arduino\libraries\FastLED\src/fastpin.h: At global scope:
C:\Users\Matteo Zucchi\Documents\Arduino\libraries\FastLED\src/fastpin.h:82:25: error: reference to 'Pin' is ambiguous
class InputPin : public Pin {
^~~
C:\Users\Matteo Zucchi\Documents\Arduino\libraries\FastLED\src/fastpin.h:34:7: note: candidates are: class Pin
class Pin : public Selectable {
^~~
In file included from C:\Users\Matteo Zucchi\Desktop\LEDMUSIC2021\LEDMUSIC2021.ino:2:0:
C:\Users\Matteo Zucchi\Documents\Arduino\libraries\Analog-Digital_Multiplexers\src/Mux.h:43:16: note: struct admux::Pin
typedef struct Pin {
^~~
In file included from C:\Users\Matteo Zucchi\Documents\Arduino\libraries\FastLED\src/FastLED.h:48:0,
from C:\Users\Matteo Zucchi\Desktop\LEDMUSIC2021\LEDMUSIC2021.ino:4:
C:\Users\Matteo Zucchi\Documents\Arduino\libraries\FastLED\src/fastpin.h: In constructor 'InputPin::InputPin(int)':
C:\Users\Matteo Zucchi\Documents\Arduino\libraries\FastLED\src/fastpin.h:84:22: error: class 'InputPin' does not have any field named 'Pin'
InputPin(int pin) : Pin(pin) { setInput(); }
^~~
C:\Users\Matteo Zucchi\Documents\Arduino\libraries\FastLED\src/fastpin.h:84:33: error: 'setInput' was not declared in this scope
InputPin(int pin) : Pin(pin) { setInput(); }
^~~~~~~~
C:\Users\Matteo Zucchi\Documents\Arduino\libraries\FastLED\src/fastpin.h:84:33: note: suggested alternative: 'setvbuf'
InputPin(int pin) : Pin(pin) { setInput(); }
^~~~~~~~
setvbuf
C:\Users\Matteo Zucchi\Desktop\LEDMUSIC2021\LEDMUSIC2021.ino: At global scope:
LEDMUSIC2021:25:12: error: reference to 'Pin' is ambiguous
Mux RG_mux(Pin(A7, INPUT, PinType::Analog), Pinset(29, 27, 25, 23)); // create a new Mux object
^~~
In file included from C:\Users\Matteo Zucchi\Documents\Arduino\libraries\FastLED\src/FastLED.h:48:0,
from C:\Users\Matteo Zucchi\Desktop\LEDMUSIC2021\LEDMUSIC2021.ino:4:
C:\Users\Matteo Zucchi\Documents\Arduino\libraries\FastLED\src/fastpin.h:34:7: note: candidates are: class Pin
class Pin : public Selectable {
^~~
In file included from C:\Users\Matteo Zucchi\Desktop\LEDMUSIC2021\LEDMUSIC2021.ino:2:0:
C:\Users\Matteo Zucchi\Documents\Arduino\libraries\Analog-Digital_Multiplexers\src/Mux.h:55:3: note: typedef struct admux::Pin admux::Pin
} Pin;
^~~
LEDMUSIC2021:28:12: error: reference to 'Pin' is ambiguous
Mux BI_mux(Pin(A8, INPUT, PinType::Analog), Pinset(37, 35, 33, 31)); //create a new Mux object
^~~
In file included from C:\Users\Matteo Zucchi\Documents\Arduino\libraries\FastLED\src/FastLED.h:48:0,
from C:\Users\Matteo Zucchi\Desktop\LEDMUSIC2021\LEDMUSIC2021.ino:4:
C:\Users\Matteo Zucchi\Documents\Arduino\libraries\FastLED\src/fastpin.h:34:7: note: candidates are: class Pin
class Pin : public Selectable {
^~~
In file included from C:\Users\Matteo Zucchi\Desktop\LEDMUSIC2021\LEDMUSIC2021.ino:2:0:
C:\Users\Matteo Zucchi\Documents\Arduino\libraries\Analog-Digital_Multiplexers\src/Mux.h:55:3: note: typedef struct admux::Pin admux::Pin
} Pin;
^~~
LEDMUSIC2021:31:14: error: reference to 'Pin' is ambiguous
Mux Rled_mux(Pin(6, OUTPUT, PinType::Digital), Pinset(39, 41, 43, 45)); // create a new Mux object
^~~
In file included from C:\Users\Matteo Zucchi\Documents\Arduino\libraries\FastLED\src/FastLED.h:48:0,
from C:\Users\Matteo Zucchi\Desktop\LEDMUSIC2021\LEDMUSIC2021.ino:4:
C:\Users\Matteo Zucchi\Documents\Arduino\libraries\FastLED\src/fastpin.h:34:7: note: candidates are: class Pin
class Pin : public Selectable {
^~~
In file included from C:\Users\Matteo Zucchi\Desktop\LEDMUSIC2021\LEDMUSIC2021.ino:2:0:
C:\Users\Matteo Zucchi\Documents\Arduino\libraries\Analog-Digital_Multiplexers\src/Mux.h:55:3: note: typedef struct admux::Pin admux::Pin
} Pin;
^~~
exit status 1
reference to 'Pin' is ambiguous
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
#CODE // if needed
#include <AudioAnalyzer.h>// audio analyser library
#include "Mux.h"//multiplexer library
using namespace admux;
#include <FastLED.h>
Analyzer Audio = Analyzer(10, 9, 0); //Strobe pin ->10 RST pin ->9 Analog Pin ->0
int FreqVal[6];// frequency values
float FreqValhelp[6];// frequency values
//list per potentiometer type (R, G, B, intensity, quantiy)
double Rpotval[6];//list of all values of red knobs start Rpotval[0]= value knob red 63Hz
double Gpotval[6];//list of all values of green knobs start Gpotval[0]= value knob red 63Hz
double Bpotval[6];//list of all values of blue knobs start Bpotval[0]= value knob red 63Hz
int intensitypotval[6];//list of potentiometer value for intensity start potval[0]= potentiometer value of knob 63Hz
double quantitypotval[6];//list of potentiometer value to choose the quantity of the frequence to put on the led stripe
//multiplexer 1
Mux RG_mux(Pin(A7, INPUT, PinType::Analog), Pinset(29, 27, 25, 23)); // create a new Mux object
//multiplexer 2
Mux BI_mux(Pin(A8, INPUT, PinType::Analog), Pinset(37, 35, 33, 31)); //create a new Mux object
//multiplexer 3
Mux Rled_mux(Pin(6, OUTPUT, PinType::Digital), Pinset(39, 41, 43, 45)); // create a new Mux object
void setup() {
Serial.begin(57600); //Init the baudrate
Audio.Init();//Init module
}
void loop() {
Audio.ReadFreq(FreqVal);//return 7 value of 7 bands pass filiter
//Frequency(Hz):63 160 400 1K 2.5K 6.25K 16K
//FreqVal[]: 0 1 2 3 4 5 6
// for (int i = 0; i < 7; i++)
// {
// if (FreqVal[i] > potval) {
// FreqValhelp[i] = Map(FreqVal[i]);
// } else {
// FreqValhelp[i] = 0;
// }
// }
for (int i = 0; i < 14; i++) {
if (i < 7) {
Rpotval[i] = RG_mux.read(i);
Bpotval[i] = BI_mux.read(i);
quantitypotval[i] = analogRead(9 + i);//reads values from intesity potentimeter
} else {//if (i >= 7)
Gpotval[i - 7] = RG_mux.read(i);
intensitypotval[i - 7] = BI_mux.read(i);
intensitypotval[i - 7] = 1023 - (intensitypotval[i - 7]); //reverting signal value in order to turn the knob in the right direction
if (intensitypotval[i - 7] < FreqVal[i - 7]) {
Rled_mux.write(FreqVal[i - 7], i - 7); //give the frequency impulse to the red led
} else {
Rled_mux.write(LOW, i - 7); //give the frequency impulse to the red led
}
}
}
}
// for (int i = 0; i < 10 ; i++)
// {
// leds[i].setRGB(( Map(valB) / 255)*FreqValhelp[Mapinteger(potvalnum)], (Map(valR) / 255)*FreqValhelp[Mapinteger(potvalnum)], (Map(valG) / 255)*FreqValhelp[Mapinteger(potvalnum)]);
// }
double Map(double x) { //maps all value from 0-1023 to 0-255
return map(x, 0, 1023, 0, 255);
}
double Maptoone(double x) {
return map(x, 0, 1023, 0, 1);
}
I've read that I could change the name of the class in one of the library itself but this isn't realy a solution to the problem beacause every time that I'ld update the library I'ld have to rechange the classes name. Can't I tell in the code that I'm refering to the class of the Mux.h library when using "Pin" ?