1

I'm trying to send SMS using Arduino Uno v3 and Sony Ericsson K700i. I have a function that converts a text and a number to pdu format but I'm unable to deliver the message. I don't get any error after posting the serial data to phone. Could someone please quide me? Here is the function that I use

void send_sms(String message, String phone_nr )
{
 byte original_byte;
byte newbyte;
int pdu_length;
int counter;
String newphone_nr;
int numlength;

 delay(1000);
  Serial.begin(9600);  
  delay(1000);
  numlength=phone_nr.length()-1;
  if (numlength% 2 != 0 ) {
    phone_nr += "F"; 
  }
  for(int x = 0; x < numlength; x = x+2){
    newphone_nr.concat(phone_nr.charAt(x+2));
    newphone_nr.concat(phone_nr.charAt(x+1));
  }

  //start sending SMS
  Serial.println("AT");  //optional: say hello to the modem
  delay(3000);
  Serial.println("AT+CMGF=0"); //set pdu mode
  delay(3000);
  int textlength= message.length()*7/8;   // text message length: number of characters*7/8
  if (message.length()*7%8 != 0) {
    textlength++;
  } 
  if (numlength%2 != 0) {   //if the length of phone number was uneven, it now increases by 1 because of the added "F"
    pdu_length = (8 + (numlength+1)/2 + textlength);
  } 
  else { //8 bytes of parameters + (length of phonenumber)/2 + number of bytes in the text
    pdu_length = (8 + numlength/2 + textlength);
  }

  Serial.print("AT+CMGW="); //message will be stored in the mobile phone - AT+CMGS will send it off.
  //delay(3000);
  Serial.println(pdu_length);
  //delay(100);
  Serial.print("001100");  //these are some parameters which we don't need to bother about
  //delay(100);
  if (numlength<16){       //now we have to send the byte containing the length of the phone number in HEX format
    Serial.print(0);
  //delay(100);  
  }        //the byte in HEX format needs to be 2 characters long; if needed we add a 0 in front, e.g. "C" will become "0C"
  Serial.print(numlength,HEX); //length telnr - this time any additional F is not to be considered
 // delay(100);
  Serial.print("91");     //international format of phone number //81 for national format
  //delay(100);
  Serial.print(newphone_nr); //now we send the rearranged phone number
  //delay(100);
  Serial.print("0000AA"); //some more parameters 
  //delay(100);
  if (message.length()<16){
    Serial.print(0);
    //delay(100);
  }       //a byte in HEX format indicating the length of the text. Again the byte needs to be made of 2 characters
  Serial.print(message.length(),HEX); 
  //delay(100);

  counter=0;
  newbyte=0;
  for (int j=0; j<message.length(); j++) {
    original_byte = message.charAt(j); //one by one we take each byte out of the original text

    for (int i=0; i<7; i++) {
      newbyte=newbyte|bitRead(original_byte, i)<<counter;  //take the bits 0 to 6 of the old byte, shift as required for the new byte and add to the new byte
      counter++;
      if (counter==8) {
        counter=0;          //if a new byte is complete, set the counter to 0
        if (newbyte<16){
          Serial.print(0);
         // delay(100);
        } //each byte in HEX format should consist of 2 characters, if necessary add 0 in front
        Serial.print (newbyte, HEX); //when the new byte is finished, send it to the mobile phone
        //delay(100);
        newbyte=0; // the next new byte will start again from 0
      }
    }
  }
  if (message.length()*7%8!=0) {    //if there were remaining bits (not enough to form a new byte), these are sent out as the last byte
    if (newbyte<16){
      Serial.print(0);
      //delay(100);
    } //each byte in HEX format should consist of 2 characters, if necessary add 0 in front
    Serial.println (newbyte, HEX);
    //delay(100);
  }
  delay (3000);
  Serial.write(26); //this is a command telling the mobile phone that the end of the transmission has been reached  

}

Q1: Is there any way I can add service message center as a parameter? Q2: How can I make this functionshow the phone response to the commands I give?

Thanks a lot!

Your Answer

By clicking "Post Your Answer", you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.