I'm trying to make an sms printer using the Arduino/telefonica gsm shield and the Sparkfun thermal printer.
I've used the Arduino example code for receiving sms and it works.
I've used the example code for printing on the thermal printer and it works.
When combining both, I receive a compiler error.
As far as I can interpret the compiler error code, I assume there is a conflict between the gsm library and the software serial library.
Digital pins 0 and 1 are used by USB.
The gsm shield uses digital pins 2 and 3 for serial comm.
Therefore I used software serial to put the printer on port 4 and 5.
Enclosed the code.
Has someone an idea how to solve this?
Here is the error message:
SoftwareSerial/SoftwareSerial.cpp.o: In function __vector_3': /Applications/Arduino.app/Contents/Resources/Java/libraries/SoftwareSerial/SoftwareSerial.cpp:305: multiple definition of
__vector_3'
GSM/GSM3SoftSerial.cpp.o:/Applications/Arduino.app/Contents/Resources/Java/libraries/GSM/GSM3SoftSerial.cpp:511: first defined here
SoftwareSerial/SoftwareSerial.cpp.o: In function __vector_4': /Applications/Arduino.app/Contents/Resources/Java/libraries/SoftwareSerial/SoftwareSerial.cpp:312: multiple definition of
__vector_4'
GSM/GSM3SoftSerial.cpp.o:/Applications/Arduino.app/Contents/Resources/Java/libraries/GSM/GSM3SoftSerial.cpp:518: first defined here
SoftwareSerial/SoftwareSerial.cpp.o: In function __vector_5': /Applications/Arduino.app/Contents/Resources/Java/libraries/SoftwareSerial/SoftwareSerial.cpp:319: multiple definition of
__vector_5'
GSM/GSM3SoftSerial.cpp.o:/Applications/Arduino.app/Contents/Resources/Java/libraries/GSM/GSM3SoftSerial.cpp:525: first defined here
And here is the code:
/* project #5 SMS printer
versie a.0.01
15 augustus 2014
Chris Van Roey
© The Lab, a division of The House */
/* hardware
Arduino Uno Rev3
GSM shield Telefonica
Sparkfun Thermal Printer */
// INITIALISATIE
// bibliotheken
#include <GSM.h> // gsm bib
#include <SoftwareSerial.h> // softwareserial voor printer
SoftwareSerial Thermal(5, 4); // Tx=dPin 5, Rx= dPin 4
int heatTime = 80;
int heatInterval = 255;
char printDensity = 15;
char printBreakTime = 15;
#define PINNUMBER "1111" // PIN nummer SIM
// Initialiseer gsm bib
GSM gsmAccess;
GSM_SMS sms;
// array voor het nummer van de sms zender
char senderNumber[20];
// SETUP
void setup()
{
// initialize serial communications and wait for port to open:
Serial.begin(9600); // voor debug
Thermal.begin(19200); // om naar printer te schrijven
initPrinter();
Serial.println("SMS Messages Receiver");
// connection state
boolean notConnected = true;
// Start GSM connection
while(notConnected)
{
if(gsmAccess.begin(PINNUMBER)==GSM_READY)
notConnected = false;
else
{
Serial.println("Not connected");
delay(1000);
}
}
Serial.println("GSM initialized");
Serial.println("Waiting for messages");
}
// PROGRAMMA
void loop()
{
char c;
// If there are any SMSs available()
if (sms.available())
{
Serial.println("Message received from:");
// Get remote number
sms.remoteNumber(senderNumber, 20);
Serial.println(senderNumber);
Thermal.print("SMS van ");
Thermal.println(senderNumber);
// Read message bytes and print them
while(c=sms.read())
Serial.print(c);
Thermal.print(c);
Serial.println("\nEND OF MESSAGE");
Thermal.write(10); // Line feed printer
Thermal.write(10); // Line feed printer
// Delete message from modem memory
sms.flush();
Serial.println("MESSAGE DELETED");
}
delay(1000);
}
// FUNCTIE PRINTERINITIALISATIE
void initPrinter()
{
//Modify the print speed and heat
Thermal.write(27);
Thermal.write(55);
Thermal.write(7); //Default 64 dots = 8*('7'+1)
Thermal.write(heatTime); //Default 80 or 800us
Thermal.write(heatInterval); //Default 2 or 20us
//Modify the print density and timeout
Thermal.write(18);
Thermal.write(35);
int printSetting = (printDensity<<4) | printBreakTime;
Thermal.write(printSetting); //Combination of printDensity and printBreakTime
Serial.println();
Serial.println("Printer ready");
}