Undefined reference to SoftwareSerial (Arduino NANO)

Hello. I'm pretty new to the whole Arduino thing, I was trying to set up a MP3 player in a little voice controlled relay circuit I had already finished. Problem is that I keep getting a "undefined reference to `SoftwareSerial::SoftwareSerial(unsigned char, unsigned char, bool)' " Error among others. I also was so far unable to find a solution that I was able to understand/that worked.

I'll attach the whole Error and the code I used below starting with the Error.

Arduino: 1.8.16 (Windows 10), Board: "Arduino Nano, ATmega328P (Old Bootloader)"





















C:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\patri\Documents\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega328old -vid-pid=1A86_7523 -ide-version=10816 -build-path C:\Users\patri\AppData\Local\Temp\arduino_build_419823 -warnings=default -build-cache C:\Users\patri\AppData\Local\Temp\arduino_cache_182406 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -verbose C:\Users\patri\Documents\Arduino\project2\project2.ino

C:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\patri\Documents\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega328old -vid-pid=1A86_7523 -ide-version=10816 -build-path C:\Users\patri\AppData\Local\Temp\arduino_build_419823 -warnings=default -build-cache C:\Users\patri\AppData\Local\Temp\arduino_cache_182406 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -verbose C:\Users\patri\Documents\Arduino\project2\project2.ino

Using board 'nano' from platform in folder: C:\Program Files (x86)\Arduino\hardware\arduino\avr

Using core 'arduino' from platform in folder: C:\Program Files (x86)\Arduino\hardware\arduino\avr

Detecting libraries used...

"C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10816 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Users\\patri\\AppData\\Local\\Temp\\arduino_build_419823\\sketch\\project2.ino.cpp" -o nul

Using cached library dependencies for file: C:\Users\patri\AppData\Local\Temp\arduino_build_419823\sketch\DFRobotDFPlayerMini.cpp

Generating function prototypes...

"C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10816 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Users\\patri\\AppData\\Local\\Temp\\arduino_build_419823\\sketch\\project2.ino.cpp" -o "C:\\Users\\patri\\AppData\\Local\\Temp\\arduino_build_419823\\preproc\\ctags_target_for_gcc_minus_e.cpp"

"C:\\Program Files (x86)\\Arduino\\tools-builder\\ctags\\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "C:\\Users\\patri\\AppData\\Local\\Temp\\arduino_build_419823\\preproc\\ctags_target_for_gcc_minus_e.cpp"

Compiling sketch...

"C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10816 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Users\\patri\\AppData\\Local\\Temp\\arduino_build_419823\\sketch\\project2.ino.cpp" -o "C:\\Users\\patri\\AppData\\Local\\Temp\\arduino_build_419823\\sketch\\project2.ino.cpp.o"

Using previously compiled file: C:\Users\patri\AppData\Local\Temp\arduino_build_419823\sketch\DFRobotDFPlayerMini.cpp.o

Compiling libraries...

Compiling core...

Using precompiled core: C:\Users\patri\AppData\Local\Temp\arduino_cache_182406\core\core_arduino_avr_nano_cpu_atmega328old_0c812875ac70eb4a9b385d8fb077f54c.a

Linking everything together...

"C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-gcc" -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p -o "C:\\Users\\patri\\AppData\\Local\\Temp\\arduino_build_419823/project2.ino.elf" "C:\\Users\\patri\\AppData\\Local\\Temp\\arduino_build_419823\\sketch\\DFRobotDFPlayerMini.cpp.o" "C:\\Users\\patri\\AppData\\Local\\Temp\\arduino_build_419823\\sketch\\project2.ino.cpp.o" "C:\\Users\\patri\\AppData\\Local\\Temp\\arduino_build_419823/..\\arduino_cache_182406\\core\\core_arduino_avr_nano_cpu_atmega328old_0c812875ac70eb4a9b385d8fb077f54c.a" "-LC:\\Users\\patri\\AppData\\Local\\Temp\\arduino_build_419823" -lm

C:\Users\patri\AppData\Local\Temp\ccKiDLic.ltrans0.ltrans.o: In function `global constructors keyed to 65535_0_DFRobotDFPlayerMini.cpp.o.2114':

<artificial>:(.text.startup+0x8e): undefined reference to `SoftwareSerial::SoftwareSerial(unsigned char, unsigned char, bool)'

C:\Users\patri\AppData\Local\Temp\ccKiDLic.ltrans0.ltrans.o: In function `setup':

C:\Users\patri\Documents\Arduino\project2/project2.ino:33: undefined reference to `SoftwareSerial::begin(long)'

C:\Users\patri\AppData\Local\Temp\ccKiDLic.ltrans0.ltrans.o: In function `__static_initialization_and_destruction_0':

C:\Users\patri\Documents\Arduino\project2/project2.ino:4: undefined reference to `SoftwareSerial::~SoftwareSerial()'

collect2.exe: error: ld returned 1 exit status

exit status 1

Error compiling for board Arduino Nano.

And here's the Code used. Bear in mind that I still contains the parts used for the voice control.

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
//----------------------------------------
SoftwareSerial softwareSerial(11, 12);
DFRobotDFPlayerMini player;
void printDeatil(uint8_t type, int value);


String voice;
int
led1 = 2, //Connect LED 1 To Pin #2
led2 = 3, //Connect LED 2 To Pin #3
led3 = 4, //Connect LED 3 To Pin #4
led4 = 5, //Connect LED 4 To Pin #5
led5 = 6; //Connect LED 5 To Pin #6
//--------------------------Call A Function-------------------------------// 
void allon(){
     digitalWrite(led1, HIGH);
     digitalWrite(led2, HIGH);
     digitalWrite(led3, HIGH);
     digitalWrite(led4, HIGH);
     digitalWrite(led5, HIGH);
}
void alloff(){
     digitalWrite(led1, LOW);
     digitalWrite(led2, LOW);
     digitalWrite(led3, LOW);
     digitalWrite(led4, LOW);
     digitalWrite(led5, LOW);
}
//-----------------------------------------------------------------------// 
void setup() {
  softwareSerial.begin(9600);
  player.begin(softwareSerial);
  Serial.begin(9600);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(9, INPUT);  //Pause Button
  pinMode(8, INPUT);  //Skip Button
}
  
  

//-----------------------------------------------------------------------// 
void loop() {
  if(digitalRead(9) == HIGH)
  {
    while(1)
    {
      player.pause();
      if(digitalRead(9) == HIGH) 
      {player.start(); 
      break;}
    }
  }
  if(digitalRead(8) == HIGH)
  {
    delay(100); 
    player.next();
  }
  
  while (Serial.available()){  //Check if there is an available byte to read
  delay(10); //Delay added to make thing stable
  char c = Serial.read(); //Conduct a serial read
  if (c == '#') {break;} //Exit the loop when the # is detected after the word
  voice += c; //Shorthand for voice = voice + c
  } 
  if (voice.length() > 0) {
    Serial.println(voice);
//-----------------------------------------------------------------------//   
  //----------Control Multiple Pins/ LEDs----------// 
  if(voice == "*all on") {allon();}  //Turn Off All Pins (Call Function)

  else if(voice == "*all off"){alloff();} //Turn On  All Pins (Call Function)
 
  //----------Turn On One-By-One----------//
  else if(voice == "*TV on") {digitalWrite(led1, HIGH);}
  else if(voice == "*fan on") {digitalWrite(led2, HIGH);}
  else if(voice == "*computer on") {digitalWrite(led3, HIGH);}
  else if(voice == "*bedroom lights on") {digitalWrite(led4, HIGH);}
  else if(voice == "*bathroom lights on") {digitalWrite(led5, HIGH);}
  //----------Turn Off One-By-One----------//
  else if(voice == "*TV off") {digitalWrite(led1, LOW);}
  else if(voice == "*fan off") {digitalWrite(led2, LOW);}
  else if(voice == "*computer off") {digitalWrite(led3, LOW);}
  else if(voice == "*bedroom lights off") {digitalWrite(led4, LOW);}
  else if(voice == "*bathroom lights off") {digitalWrite(led5, LOW);}
//-----------------------------------------------------------------------// 
voice="";}} //Reset the variable after initiating

In the folder for the Scetch I have the "Arduino.h", the "DFRobotDFPlayerMini.h" and "DFRobotDFPlayerMini.cpp" as well as the "SoftwareSerial.h" files.

I'd really appreciate it if anyone can help me, because I am very lost

You need SoftwareSerial.cpp too.

Or delete the local SoftwareSerial.h and use the built-in library.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.