Wednesday, November 19, 2014

Ngiklan pakai SMS

Wah apalagi ini Mas?
Masih Seputar Kirim SMS. Kadang kita dapat iklan melalui SMS bunyinya;

From:
081231223XXXX
Kredit lunak Tanpa Angsuran hingga 2M.
Hubungi 081211111567

Lho kok mereka tau nomor kita ya?
Mereka sebenarnya tidak tau nomor kita. Yang mereka tau cuma ngarang kepalanya nomornya saja, lalu sebuah counter digunakan untuk menentukan nomor buntut nomer yang akan mereka kirimi SMS . Pusing? wah, maaf saya ngak bisa menerangkan dengan bahasa yang bagus he... Langsung ke contoh saja ya :)
Misal mereka mengarang kira-kira nomer-nomer yang ingin dijadikan sasaran iklan adalah; 08123456XXXX. Nomor tersebut mempunyai kepala 08123456 dan buntut XXXX. Nomer yang dapat dijadikan target adalah;
dari 081234560000 hingga 081234569999

Menentukan panjang kepala sama buntutnya gimana Mas? Kalo kepala tinggal kira-kira nomer yang hidup mana, kalo buntutnya ya tinggal dari 0000 sampai maksimal 9999, atau tergantung banyaknya pulsa yang ada. Pada contoh buntut yang digunakan empat digit berarti ada 10000 nomer yang akan di SMS. Kalo kuat isi pulsa hanya untuk 100 nomer ya panjang buntutnya dua digit saja, misalnya, 0812345678XX, yang akan terdapat 100 nomer sasaran, dari 081234567800 hingga 081234567899.

Alat dan bahan yang digunakan seperti biasanya, GSMduino, Adaptor 2A dan SIMCARD GSM

Lho Mas, kok beda GSMduinonya sama yang kemarin-kemarin. Ini yang massprod, yang merah kemarin versi uji coba.
Langsung saja ke programnya ya.
Nah kalo setiap kali kirim, buntut xxxx kita naikan 1 hingga maksimal maka semua nomer dari 081234560000 hingga 081234569999 akan dikirimi SMS promosi tersebut.
Variabel yang digunakan sebagai tempat menyimpan nomer GSM yang akan dikirimi SMS adalah  'remoteNum'. Variabel ini berbentuk array char.  Kepala menempati 8 digit pertama, sedangkan buntut menempati 4 digit terakhir. Karena kepala nomer tetap maka dapat langsung di berikan pada variabel di awal deklarasi

  char remoteNum[20]="08123456";

Nah ini yang agak susah buatnya. Buntutnya bisa jadi "0000", "0001" hingga "9999". Untuk membuat nomor tersebut kita memerlukan counter. Counter pada awal dapat diberi nilai 0 dan maksimal 9999. Counter memiliki bentuk 'int', yang harus di ubah menjadi string;
     int         string
       0 ---> "0000"
       1----> "0001"
        :
        :
9999 ---->"9999"

Sipil Mas pakai saja "String(Counter,DEC);"
Ya anda 90% benar!,
Kok bisa? salah saya apa Mas?

Begindang... Begindang.... Misal;
counter= 9999;

String(Counter,DEC); // akan menghasilkan "9999"


jika
counter= 1000;

String(Counter,DEC); // akan menghasilkan "1000"


Bagaimana jika nilainya kurang dari 1000? Misal;
counter= 99;

String(Counter,DEC); // akan menghasilkan "99"

Lho?! seharusnyakan "0099".
Makanya saya katakan 90% benar. Karena akan benar jika nilai counter dari 1000 hingga 9999. Sedangkan jika nilai counter kurang dari 1000, maka akan error, atau mengirim SMS bukan kenomor yang kita tuju.

Lalu Bagaimana Mas?
Kembali kejaman SD. Untuk mencari ribuan dari satu nomor bagaimana anak-anak? Ya Budi. Dibagi 1000 Bu Guru. Ya kamu benar Budi. Untuk cari ratusan, puluhan ya sama. bagi dengan ratusan dan puluhan. Misalkan;

counter= 99;
counter/1000 ---> HasilRibuan =0, sisa masukan counter
counter/100   ---> HasilRatusan =0, sisa masukan counter
counter/10   ---> HasilPuluhan =9 , sisa adalah satuan = 9

Untuk mengubah integer 0 menjadi character '0' maka tambahkan 0x30.
Hasil ribuan, ratusan, puluhan dan satuan tinggal masukan ke array remoteNum dibelakang kepala. Karena panjang array kepala 8digit (08123456) maka ribuan disimpan pada digit ke-8, ratusan pada digit ke-7, dan seterusnya. Mari kita rancang programnya;

1. Dibutuhkan counter. sediakan variabel global counter
int Counter=0;

2. Inisialisasi variabel remoteNum dengan kepala nomer
  char remoteNum[20]="08123456";

3. Isi variabel txtMsg dengan isi SMS yang dikirim
  char txtMsg[200]="Kredit lunak Tanpa Angsuran hingga 2M.\r\nHubungi 081211111567"; // Kalimat SMS 

4. Lakukan proses pembagian dengan 1000, 100, 10, dan masukan ke Array 'remoteNum' dibelakang kepala. Jika Kepala menempati remoteNum[0] hingga remoteNum[7], maka ribuan masukan ke remoteNum[8], ratusan ke remoteNum[9], puluhan ke remoteNum[10] dan satuan remoteNum[11].
Tambahkan juga 0 di akhir array sebagai tanda akhir array.
Dan yang juga penting  increment Counter.

  buff_Counter = Counter++;        // increment Counter

  remoteNum[8]=(buff_Counter/1000)+0x30; // Ribuan +0x30

  buff_Counter=(buff_Counter%1000);      // sisa disimpan buat ngitung yang lainnya

  

  remoteNum[9]=(buff_Counter/100)+0x30;   //Ratusan +0x30

  buff_Counter=(buff_Counter%100);         // sisa disimpan buat ngitung yang lainnya

  
  remoteNum[10]=(buff_Counter/10)+0x30;     //Puluhan +0x30

  remoteNum[11]=(buff_Counter%10)+0x30;     // sisa merupakan Satuan +0x30

  remoteNum[12]=0; // tanda akhir arrat char
5. Setelah selesai lalu dikirim   

 // send the message  

  sms.beginSMS(remoteNum);  
  sms.print(txtMsg);  
  sms.endSMS();   
  Serial.print(remoteNum);  
 Serial.println(txtMsg);  
 delay(3000);  

6. Jangan lupa beri pembatas Counter, agar satu nomer tidak dikirimi dua kali jika Counternya overflow.

 if ( Counter < 10000){

:

:

}

Program Lengkapnya adalah

/* 
 SMS sender 
 
 This sketch, for the Arduino GSM shield,sends an SMS message  
 you enter in the serial monitor. Connect your Arduino with the  
 GSM shield and SIM card, open the serial monitor, and wait for  
 the "READY" message to appear in the monitor. Next, type a  
 message to send and press "return". Make sure the serial  
 monitor is set to send a newline when you press return. 
 
 Circuit: 
 * GSM shield  
 * SIM card that can send SMS 
 
 created 25 Feb 2012 
 by Tom Igoe 
 
 This example is in the public domain. 
 
 http://arduino.cc/en/Tutorial/GSMExamplesSendSMS 
 
 */

// Include the GSM library  
#include <GSM.h>  

#define PINNUMBER ""  

// initialize the library instance  
GSM gsmAccess;  
GSM_SMS sms;  
int Counter=0;
void setup()  
{  
  // initialize serial communications and wait for port to open:  
  Serial.begin(9600);  
  while (!Serial) {  
    ; // wait for serial port to connect. Needed for Leonardo only  
  }  

  Serial.println("SMS Messages Sender");  

  // connection state  
  boolean notConnected = true;  

  //==================================================================  
  bool resp;  
  char auxLocate1 [4];  

  theGSM3ShieldV1ModemCore.gss.begin(9600);  
  gsmAccess.prepareAuxLocate(PSTR("OK"), auxLocate1);  
  theGSM3ShieldV1ModemCore.genericCommand_rq(PSTR("AT"));  
  delay(400);   
  theGSM3ShieldV1ModemCore.genericParse_rsp(resp, auxLocate1);  
  if(resp) {  
    gsmAccess.ModemConfiguration(PINNUMBER);      
    notConnected = false;  
  }  
  //==================================================================  

  // Start GSM shield  
  // If your SIM has PIN, pass it as a parameter of begin() in quotes  
  while(notConnected)  
  {  
    if(gsmAccess.begin(PINNUMBER)==GSM_READY)  
      notConnected = false;  
    else  
    {  
      Serial.println("Not connected");  
      delay(1000);  
    }  
  }  

  Serial.println("GSM initialized");  
  theGSM3ShieldV1ModemCore.setStatus(GSM_READY);
}  

void loop()  
{ 
  if ( Counter < 10000){
    char remoteNum[20]="08123456"; //Ganti dengan kepala Nomor HP
    char txtMsg[200]="Kredit lunak Tanpa Angsuran hingga 2M.\r\nHubungi 081211111567"; // Kalimat SMS  
    int buff_Counter;

    buff_Counter = Counter++;        // increment Counter
    remoteNum[8]=(buff_Counter/1000)+0x30; // Ribuan +0x30
    buff_Counter=(buff_Counter%1000);      // sisa disimpan buat ngitung yang lainnya

    remoteNum[9]=(buff_Counter/100)+0x30;   //Ratusan +0x30
    buff_Counter=(buff_Counter%100);         // sisa disimpan buat ngitung yang lainnya

    remoteNum[10]=(buff_Counter/10)+0x30;     //Puluhan +0x30
    remoteNum[11]=(buff_Counter%10)+0x30;     // sisa merupakan Satuan +0x30
    remoteNum[12]=0; // tanda akhir arrat char


    // send the message  
    sms.beginSMS(remoteNum);  
    sms.print(txtMsg);  
    sms.endSMS();   

    Serial.print(remoteNum);  
    Serial.println(txtMsg);  
    delay(3000);  
  }
}  

Kalo kuat saya cuma 100 SMS gimana programnya Mas? Ya sama saja. Oke deh saya buatkan he...



/* 
 SMS sender 
 
 This sketch, for the Arduino GSM shield,sends an SMS message  
 you enter in the serial monitor. Connect your Arduino with the  
 GSM shield and SIM card, open the serial monitor, and wait for  
 the "READY" message to appear in the monitor. Next, type a  
 message to send and press "return". Make sure the serial  
 monitor is set to send a newline when you press return. 
 
 Circuit: 
 * GSM shield  
 * SIM card that can send SMS 
 
 created 25 Feb 2012 
 by Tom Igoe 
 
 This example is in the public domain. 
 
 http://arduino.cc/en/Tutorial/GSMExamplesSendSMS 
 
 */

// Include the GSM library  
#include <GSM.h>  

#define PINNUMBER ""  

// initialize the library instance  
GSM gsmAccess;  
GSM_SMS sms;  
int Counter=0;
void setup()  
{  
  // initialize serial communications and wait for port to open:  
  Serial.begin(9600);  
  while (!Serial) {  
    ; // wait for serial port to connect. Needed for Leonardo only  
  }  

  Serial.println("SMS Messages Sender");  

  // connection state  
  boolean notConnected = true;  

  //==================================================================  
  bool resp;  
  char auxLocate1 [4];  

  theGSM3ShieldV1ModemCore.gss.begin(9600);  
  gsmAccess.prepareAuxLocate(PSTR("OK"), auxLocate1);  
  theGSM3ShieldV1ModemCore.genericCommand_rq(PSTR("AT"));  
  delay(400);   
  theGSM3ShieldV1ModemCore.genericParse_rsp(resp, auxLocate1);  
  if(resp) {  
    gsmAccess.ModemConfiguration(PINNUMBER);      
    notConnected = false;  
  }  
  //==================================================================  

  // Start GSM shield  
  // If your SIM has PIN, pass it as a parameter of begin() in quotes  
  while(notConnected)  
  {  
    if(gsmAccess.begin(PINNUMBER)==GSM_READY)  
      notConnected = false;  
    else  
    {  
      Serial.println("Not connected");  
      delay(1000);  
    }  
  }  

  Serial.println("GSM initialized");  
  theGSM3ShieldV1ModemCore.setStatus(GSM_READY);
}  

void loop()  
{ 
  if ( Counter < 100){
    char remoteNum[20]="0812345678"; //Ganti dengan Kepala Nomor HP
    char txtMsg[200]="Kredit lunak Tanpa Angsuran hingga 2M.\r\nHubungi 081211111567"; // Kalimat SMS  
    int buff_Counter;

    buff_Counter = Counter++;        // increment Counter
    remoteNum[10]=(buff_Counter/10)+0x30;     //Puluhan +0x30
    remoteNum[11]=(buff_Counter%10)+0x30;     // sisa merupakan Satuan +0x30
    remoteNum[12]=0; // tanda akhir arrat char


    // send the message  
    sms.beginSMS(remoteNum);  
    sms.print(txtMsg);  
    sms.endSMS();   

    Serial.print(remoteNum);  
    Serial.println(txtMsg);  
    delay(3000);  
  }
}  

Lebih mudah bukan?

Semoga Bermanfaat.










No comments: