Hi,
I am attempting to initialize my Antrax GSM/GPRS shield to send and receive SMS. Below is the modified code without gps, I am having troubles uploading it. The error states: "core.a(main.cpp.o): In function 'main': undefined reference to 'setup', undefined reference to 'loop' ".
#include <Wire.h>
/*
GSM_GPS_Shield_Mega.h - Libary for using the GSM-Modul on the GSM/GPRS/GPS-Shield Rev.6 (without GPS)
Version: 1.3.3
Date: 20.11.2012
Company: antrax Datentechnik GmbH
*/
#ifndef GSM_GPS_Shield_h
#if defined(ARDUINO) && ARDUINO >= 100
// Choose Arduino.h for IDE 1.0
#include "Arduino.h"
#else
// Choose WProgram.h if IDE is older than 1.0
#include "WProgram.h"
#endif
#define GSM_GPS_Shield_h
#include <SPI.h>
class GSM
{
public:
GSM(int powerON_pin, int baud);
void initializeGSM(char pwd[4]);
void sendSMS(char number[50], char text[180]);
void makeCall(char number[50]);
private:
int _powerON_pin;
int _baud;
void readGSMAnswer();
};
#endif
// Adresses of the SCI16IS750 registers
#define RHR 0x00 << 3
#define FCR 0x02 << 3
#define LCR 0x03 << 3
#define LSR 0x05 << 3
#define SPR 0x07 << 3
#define IODIR 0x0A << 3
#define IOSTATE 0x0B << 3
#define IOCTL 0x0E << 3
// special registers
#define DLL 0x00 << 3
#define DLM 0x01 << 3
#define EFR 0x02 << 3
// SPI
#define MISO 50
#define MOSI 51
#define SCK 52
#define CS 53
// GSM
#define RXD 0
#define TXD 1
#define RING 2
#define CTS 3
#define DTR 4
#define RTS 5
#define DCD 6
int readAnswer = 0;
int state = 0;
int inByte = 0;
int GSM_OK = 0;
int sim_error = 0;
int reg_OK = 0;
char temp_in[10];
GSM gsm(7,9600);
// Arduino Duemilanove (ATmega328) & Arduino UNO (ATmega328)
GSM::GSM(int powerON_pin, int baud)
{
pinMode(powerON_pin, OUTPUT); // Pin 7
_powerON_pin = powerON_pin;
_baud = baud;
pinMode(_powerON_pin, OUTPUT);
pinMode(RXD, INPUT);
pinMode(TXD, OUTPUT);
pinMode(RING, INPUT);
pinMode(CTS, INPUT);
pinMode(DTR, OUTPUT);
pinMode(RTS, OUTPUT);
pinMode(DCD, INPUT);
}
void GSM::initializeGSM(char pwd[20])
{
Serial.begin(_baud); // 9600 Baud
pinMode(_powerON_pin, OUTPUT); // Pin 7 as Output
digitalWrite(_powerON_pin, HIGH); // enable Power GSM-Modul
delay(3000);
state = 0;
readAnswer=0;
do
if(readAnswer == 0)
{
if(state == 0)
{
inByte=0;
Serial.print("AT\r"); // send AT (wake up
readAnswer = 1;
}
if(state == 1)
{
inByte = 0;
Serial.print("ATE0\r"); // disable Echo
readAnswer = 1;
}
if(state == 2)
{
inByte = 0;
Serial.print("AT+IPR=9600\r"); // set Baudrate
readAnswer = 1;
}
if(state == 3)
{
inByte = 0;
Serial.print("AT#SIMDET=1\r"); // set SIM Detection mode (SIM)
readAnswer = 1;
}
if(state == 4)
{
sim_error = 0;
inByte = 0;
delay(1000);
Serial.print("AT+CPIN?\r"); // pin need? (SIM)
readAnswer = 1;
}
if(state == 5)
{
inByte = 0;
Serial.print("AT+CPIN=1234"); // enter pin (SIM)
Serial.print(pwd);
Serial.print("\r");
readAnswer = 1;
}
if(state == 6)
{
reg_OK = 0;
inByte = 0;
delay(2000);
Serial.print("AT+CREG?\r"); // Network Registration Report
readAnswer = 1;
}
if(state == 7)
{
inByte = 0;
Serial.print("AT+CMGF=1\r"); // use text-format for sms
readAnswer = 1;
}
}
else
{
readGSMAnswer();
}
while(state <= 7);
}
void GSM::sendSMS(char number[50], char text[180])
{
state = 0;
readAnswer=0;
do
if(readAnswer == 0)
{
if(state == 0)
{
inByte = 0;
Serial.print("AT+CMGS=hello world"); // send Message
Serial.print(number);
Serial.print("075xxxxxxxx"); // 129 - number in national format
// --> 145 - number in international
// format (contains the "+")
readAnswer = 1;
}
if(state == 1)
{
inByte = 0;
Serial.println("GSM/GPRS/GPS-Shield");
Serial.println(text); // Message-Text
Serial.write(26); // CTRL-Z
readAnswer = 1;
}
}
else
{
readGSMAnswer();
}
while(state <= 1);
}
void GSM::makeCall(char number[50])
{
state = 0;
readAnswer=0;
do
if(readAnswer == 0)
{
if(state == 0)
{
delay(1000);
inByte = 0;
Serial.print("ATD "); // dial number
Serial.print(number);
Serial.print(";\r");
readAnswer = 1;
}
if(state == 1)
{
delay(15000);
inByte = 0;
Serial.print("ATH\r"); // hang up
readAnswer = 1;
}
}
else
{
readGSMAnswer();
}
while(state <= 1);
}
void GSM::readGSMAnswer()
{
if(readAnswer == 1)
{
inByte = Serial.read();
if((char(inByte) != ' '))
{
//FIFO GSM-Answer
temp_in[0] = temp_in[1];
temp_in[1] = temp_in[2];
temp_in[2] = temp_in[3];
temp_in[3] = temp_in[4];
temp_in[4] = temp_in[5];
temp_in[5] = temp_in[6];
temp_in[6] = temp_in[7];
temp_in[7] = temp_in[8];
temp_in[8] = temp_in[9];
temp_in[9] = char(inByte);
}
delay(50);
if((temp_in[8] == 'O') && (temp_in[9] == 'K')) // If answer is OK!
{
GSM_OK = 1;
}
else if(temp_in[9] == '>') // If answer is >
{
GSM_OK = 1;
}
else if((temp_in[5] == 'R') && (temp_in[6] == 'E') && (temp_in[7] == 'A') && (temp_in[8] == 'D') && (temp_in[9] == 'Y')) // if SIM is ready no pin is needed
{
state = state + 1;
}
else if((temp_in[4] == 'S') && (temp_in[5] == 'I') && (temp_in[6] == 'M') && (temp_in[7] == 'P') && (temp_in[8] == 'U') && (temp_in[9] == 'K')) // if the PUK is needed
{
Serial.println("Please enter PUK and new PIN --> PUK,PIN");
GSM_OK = 0;
delay(5000);
state = 8; //end of Programm
}
This is not full code. Any input would be greatly appreciated, thanks!