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 char5. 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:
Post a Comment