Are there some additional defines which i can not see because if i just use the main.cpp like this:
#include "USB.h"
#include "Arduino.h"
#if ARDUINO_USB_CDC_ON_BOOT
#define HWSerial Serial0
#define USBSerial Serial
#else
#define HWSerial Serial
USBCDC USBSerial;
#endif
// HWSerial = buildin UART in developmentboard
// USBSerial = Use D+ and D- on the esp32S2 as serial
void setup()
{
HWSerial.begin(115200);
HWSerial.setDebugOutput(true);
USBSerial.begin();
USB.begin();
}
void loop()
{
USBSerial.println("Message from the USB port");
delay(2000);
}
Everthing works but when I use:
#if ARDUINO_USB_CDC_ON_BOOT
#define HWSerial Serial0
#define USBSerial Serial
#else
#define HWSerial Serial
USBCDC USBSerial;
#endif
In a class I get a
multiple definition of `USBSerial';
error.
main.cpp:
#include "USBCommunication.h"
USBCommunication com;
void messageListener(String message)
{
com.sendMessage("Got message", "PING");
}
void setup()
{
com.setMessageListener(messageListener);
com.initCommunication();
com.startMessageListener();
}
void loop()
{
// Serial.println("Testmessage");
com.sendMessage("Message from the USB port", "MESSAGE");
delay(2000);
}
USBCommunication.h
#include "Communication.h"
#include <Arduino.h>
#include "USB.h"
#pragma once
// ########### Causes problems ################
#if ARDUINO_USB_CDC_ON_BOOT
#define HWSerial Serial0
#define USBSerial Serial
#else
#define HWSerial Serial
USBCDC USBSerial;
#endif
// ############################################
class USBCommunication : public Communication
{
public:
USBCommunication();
~USBCommunication();
int initCommunication();
// Becarefull when you call this methode. This will stop all serial communications.
int stopCommunication();
int sendMessage(String message,String label);
int checkForMessages();
private:
};
USBCommunication.cpp:
#include "USBCommunication.h"
USBCommunication::USBCommunication()
{
}
USBCommunication::~USBCommunication()
{
}
int USBCommunication::initCommunication()
{
HWSerial.begin(115200);
HWSerial.setDebugOutput(true);
USBSerial.begin();
USB.begin();
USBSerial.begin();
USB.begin();
return 0;
}
int USBCommunication::stopCommunication()
{
USBSerial.end();
return 0;
}
int USBCommunication::sendMessage(String message,String label)
{
USBSerial.print("["+label+"]");
USBSerial.println(message);
return 0;
}
int USBCommunication::checkForMessages()
{
while(USBSerial.available())
{
this->processMessage(USBSerial.readStringUntil('\n'));
}
return 0;
}
(files as full example jqEgewqP)
(The same error happens in the arduion IDE and PlatformIO)
Does someone know more about this? Is that a bug or do in need other defines?