Go Down

Topic: Enabling GSM for Antrax GSM/GPRS shield (Read 636 times) previous topic - next topic

weestee

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: [Select]
#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!

weestee

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

spycatcher2k

You have no void setup() or void loo() !
Drew.
http://www.uk-pcb.co.uk - My UK Based PCB Fab & Assembly Company
Design work undertaken
SMD & Thru-Hole assembly

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy