Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

[SOLVED] Can't send SMS using AT commands

Status
Not open for further replies.

Isuru Senarath

Member level 2
Joined
Apr 10, 2012
Messages
42
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,286
Activity points
1,580
hi all,
I am trying to Send SMS using AT commands when I press the keypad button. I can send SMS using hyper-terminal (AT+CMGS="TEL NO"
MESSAGE
CTRLZ)
I think something wrong with my C program. Please guide me to send sms using C programming.

Code:
if(rowLoc == 3 && colLoc == 0x0D)                           // keypad 0
                        {
                                        SMSString( "\r");
                                        Delay(50);
                                        SMSString( "AT+CMGS=\"0718021336\"\r");//my mob number here
                                        Delay(50);
                                        SMSString("7.10PM");
                                        Delay(50);
                                        SMSString("CTRLZ");
					Delay(50);
					SMSString( "\r");
                                        Delay(50);
										lcdcmd(0x01);  //clear screen
                                        lcdcmd(0x80);        //Row 1 and First Column
                                        lcd_data_string("Info. Sent: 7.10PM ");                
                                        Delay(10);
                                        lcdcmd(0x0C0);
                                        lcd_data_string("ACHIVE Y/N?  ");
                                        Delay(10);
                                        }
        
       
                          }

new5.JPGnew6.JPG
 

try this i think it will work

Code:
if(rowLoc == 3 && colLoc == 0x0D)                           // keypad 0
                        {
                                        SMSString(0x0D);
                                        SMSString( "AT+CMGF=1");
                                        SMSString(0x0D);
                                        Delay(50);
                                        SMSString( "AT+CMGS="0718021336");//my mob number here
                                        SMSString(0x0D);
                                        Delay(50);
                                        SMSString("7.10PM");
                                        Delay(50);
                                        SMSString(0x1A);
					Delay(50);
                                        SMSString(0x0D);
                                        Delay(50);
										lcdcmd(0x01);  //clear screen
                                        lcdcmd(0x80);        //Row 1 and First Column
                                        lcd_data_string("Info. Sent: 7.10PM ");                
                                        Delay(10);
                                        lcdcmd(0x0C0);
                                        lcd_data_string("ACHIVE Y/N?  ");
                                        Delay(10);
                                        }
        
       
                          }
 

send the smsstring code
what is "CTRLZ" meand string or Ctrl Z
 

CTRLZ is sms string which I used to put Ctrl+Z (to send) sms
 

i don't know you can use CTRLZ for Ctrl+Z try using 0x1A followed by 0x0d 0x0a

instead of modem connect to pc com port and check using hyper terminal all message are going to modem is correct
 

Can we use 0x1A as

SMSString(0x1A);


I have define the SMSString as

void SMSString(char*text) ;
 

no you cant use void SMSString(char*text) for character, i thing you can use you can use putc(0x1d);
which compiler you are using

---------- Post added at 18:37 ---------- Previous post was at 18:36 ----------

post your void SMSString(char*text) ; code
 

Im using Keil uVision3. Can You please tel me how to define this 0x1A
 

in keil i thing you can use putchar function like putchar(0x1a);
you have to include stdio.h header file
 

void SMSString(char*text) ; code

Code:
void SMSString(unsigned char* text) //function to send SMS using GSM modem
{
        while (*text)
        {
                SerTX(*text++);
        }
}
 

SerTX() ? is it your function on Keil
 

This is my full program. I use a keypad to enter details (sms body) and send it to another unit which will display received sms.

Code:
#include <REGX51.H>
#include<string.h>
#define COL P2
#define ROW P0
#define CTRLZ 26
sfr LcdData = 0x90;                                                        //LCD Data Pins
sbit RS =  P2^5;
sbit RW =  P2^6;
sbit EN =  P2^7;

//Function Prototype Declaration


void lcd_data_string(unsigned char *str);
void lcdcmd(unsigned char value);
void lcddata(unsigned char value);
void Delay(unsigned int itime);
void SerTX(unsigned char);
void SMSString(char*text) ;
unsigned char msg[] = "Enter Info:-";
unsigned char CtrlZ=0x1A;
unsigned char keypad[4][4] =        {'1','2','3','A',
                                                                 '4','4','6','B',
                                                                 '7','8','9','C',
                                                                 'Y','0','N',':'};
void main()
{
        unsigned char colLoc,rowLoc;
        unsigned int len,i;
        LcdData = 0x00;                 //Port-1 as Output Port
        TMOD = 0x20;        //For Baud Rate Generation
        TH1 = -3;                //Baud Rate of 9600bps
        SCON = 0x50;
        TR1 = 1;                //Start Timer-1

        //LCD Initialization Commands
        SMSString("AT\r"); // AT commands to initialize gsm modem
        Delay(50);

        SMSString( "ATe0\r"); // turn off echo
        Delay(50);

        SMSString( "AT+CMGF=1\r"); // turn off echo
        Delay(50);

        SMSString( "AT&W\r"); // save settings
        Delay(50);

        lcdcmd(0x38);        //Initialize LCD Commands
        Delay(1);
        lcdcmd(0x0E);        //Display on Cursor Blinking
        Delay(1);
        lcdcmd(0x01);        //Clear LCD
        Delay(1);
        lcdcmd(0x80);        //Row 1 and First Column
        //lcd_data_string("Bus Route Info.");                
        //Delay(10);
        //lcdcmd(0x0C0);
        //lcd_data_string("System Project");
        //Delay(10);
        lcdcmd(0x01);  //clear screen
        Delay(1);
        len = strlen(msg);
        for(i=0;i<len;i++)
        {
                lcddata(msg[i]);
                Delay(1);
        }
        lcdcmd(0x0C0);                                                //Move to Second Line of the LCD
        COL =  0x0FF;                                                //Make Port-2 as Input Port
        while(1)                                                                //Infinite Loop
        {
                do
                {
                        ROW = 0x00;                                                //Groud all Row's
                        colLoc = COL;                                        //Read all the Columns
                        colLoc = colLoc & 0x0F;                        //Mask the Unused Bits.
                }while(colLoc != 0x0F);                         //Check until all the Keys are released
                do
                {
                        do
                        {
                                Delay(2);                                        //20msec delay
                                colLoc = COL;                                //Read all the Columns
                                colLoc = colLoc & 0x0F;                //Mask the Unused Bits.
                        }while(colLoc == 0x0F);                         //Keep Checking for Key-press
                        //It may be possible that this key-press may be due to some noise-spikes in the circuit
                        //thats why we will check once again whether the same key is pressed or not.
                        //If not the whole loop will be executed once again
                        Delay(2);
                        colLoc = COL;                                        //read all columns
                        colLoc = colLoc & 0x0F;                        //Mask the Unused Bits.
                }while(colLoc == 0x0F);                                //Wait for the Key-Press

                while(1)
                {
                        ROW = 0x0FE;                                        //Ground First Row
                        colLoc = COL;
                        colLoc = colLoc & 0x0F;                        //Mask the Unused Bits.
                        if(colLoc != 0x0F)                                //1111 Column Detected
                        {
                                rowLoc = 0;                                        //1st Row Selected
                                break;
                        }

                        ROW = 0x0FD;                                        //Ground Second Row
                        colLoc = COL;
                        colLoc = colLoc & 0x0F;                        //Mask the Unused Bits.
                        if(colLoc != 0x0F)                                //Column Detected
                        {
                                rowLoc = 1;                                        //2nd Row Selected                                
                                break;
                        }

                        ROW = 0x0FB;                                        //Ground Third Row
                        colLoc = COL;
                        colLoc = colLoc & 0x0F;                        //Mask the Unused Bits.
                        if(colLoc != 0x0F)                                //Column Detected
                        {
                                rowLoc = 2;                                        //3rd Row Selected
                                break;
                        }

                        ROW = 0x0F7;                                        //Ground Fourth Row
                        colLoc = COL;
                        colLoc = colLoc & 0x0F;                        //Mask the Unused Bits.
                        if(colLoc!= 0x0F)
                        {
                                rowLoc = 3;                                        //4th Row Selected
                                break;
                        }
                }

                if(colLoc == 0x0E)                                  //1110 This means that First column is Selected
                {
                        SerTX(keypad[rowLoc][0]);
                }
                else if(colLoc == 0x0D)                        // 1101
                {
                        SerTX(keypad[rowLoc][1]);
                }
                else if(colLoc == 0x0B)                         // 1011
                {
                        SerTX(keypad[rowLoc][2]);
                }
                else if(colLoc == 0x07)                          // 0111
                {
                        SerTX(keypad[rowLoc][3]);
                }

                //lcdcmd(0xC0);        //Second Row
                
                        //Check Columns and send the Data to the LCD Screen:-
                        if(colLoc == 0x0E)                                  //1110 This means that First column is Selected
                        {
                                lcddata(keypad[rowLoc][0]);
                        }
                        else if(colLoc == 0x0D)                                         // 1101
                        {
                                lcddata(keypad[rowLoc][1]);
                        }
                        else if(colLoc == 0x0B)                                         //  1011
                        {
                                lcddata(keypad[rowLoc][2]);
                        }
                        else if(colLoc == 0x07)                                         //  0111
                        {
                                lcddata(keypad[rowLoc][3]);
                        }
        
        if(rowLoc == 3 && colLoc == 0x0D)                           // keypad 0
                        {
                                        SMSString( "\r");
                                        Delay(50);
                                        SMSString( "AT+CMGS=\"0718021336\"\r");//my mob number here
                                        Delay(50);
                                        SMSString("7.10PM");
                                        Delay(50);
                                        SMSString("CTRLZ");
										Delay(50);
										SMSString( "\r");
                                        Delay(50);
										lcdcmd(0x01);  //clear screen
                                        lcdcmd(0x80);        //Row 1 and First Column
                                        lcd_data_string("Info. Sent: 7.10PM ");                
                                        Delay(10);
                                        lcdcmd(0x0C0);
                                        lcd_data_string("ACHIVE Y/N?  ");
                                        Delay(10);
                                        }
        
       
                          }
                          }
                         
                        
                        
                



void lcdcmd(unsigned char value)
{
        LcdData = value;
        RS = 0;
        RW = 0;
        EN = 1;
        Delay(1);
        EN = 0;
}
void lcddata(unsigned char value)
{
        LcdData = value;
        RS = 1;
        RW = 0;
        EN = 1;
        Delay(1);
        EN = 0;
}
void Delay(unsigned int itime)
{
        unsigned int i,j;
        for(i=0;i<1275;i++)
        for(j=0;j<itime;j++);
}
void SerTX(unsigned char x)
{
        SBUF = x;
        while(TI == 0);
        TI = 0;
}

void lcd_data(unsigned char item)                // Function to send one byte data to LCD
{
        LcdData = item;
        RS= 1;
        RW=0;
        EN=1;
        Delay(1);
        EN=0;
        return;
}

void lcd_data_string(unsigned char *str)        // Function to send string to LCD
{
        int i=0;
        while(str[i]!='\0')
        {
                lcd_data(str[i]);
                i++;
                Delay(10);
        }
        return; 
}


void SMSString(unsigned char* text) //function to send SMS using GSM modem
{
        while (*text)
        {
                SerTX(*text++);
        }
}
 

change SMSString("CTRLZ"); to putchar(0x1A);

and add #include<stdio.h>
and check
 

Program will run upto putchar(0x1A); and stop there. See attachment :
Code:
 SMSString( "AT+CMGS=\"0718021336\"\r");//my mob number here
                                        Delay(50);
                                        SMSString("7.10PM");
                                        Delay(50);
                                        putchar(0x1A);
										Delay(50);[ATTACH=CONFIG]74712._xfImport[/ATTACH]
 

Its working, Thanks a lot. :smile: Highly appreciate your help. Thanks again.
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top