Pages: [1]   Go Down
Author Topic: Enabling GSM for Antrax GSM/GPRS shield  (Read 513 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 15
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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' ".

Code:
#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!
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 15
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ahh didnt mean to release that much of the code! Apologies, i am sure the issue lies at the start.
Logged

Scotland
Offline Offline
Edison Member
*
Karma: 26
Posts: 1343
Have you had your Arduino fix today?
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

You have no void setup() or void loo() !
Logged

Drew.
http://www.uk-pcb.co.uk - My UK Based PCB Fab & Assembly Company
Design work undertaken
SMD & Thru-Hole assembly

Pages: [1]   Go Up
Jump to: