Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "SIM900.h"
- #include <SoftwareSerial.h>
- #include "sms.h"
- SMSGSM sms;
- int numdata;
- boolean started=false;
- char smsposition;
- char sms_text[160];
- char phone_num[20];
- char primalac[256] = "+381655231300";
- char Kredit[30];
- //control pins of relay.
- int ventil_1=4;
- int ventil_2=5;
- long trajanje_trenutnog_zalivanja = 0L;
- unsigned long vreme_poslednje_akcije = 0;
- int trenutna_akcija = 0; // 0 = svi zatvoreni, 1 = upalio prvi i drugi
- void setup()
- {
- Serial.begin(9600);
- Serial.println("GSM Shield testing.");
- //Start configuration of shield with baudrate.
- //For http uses is raccomanded to use 4800 or slower.
- if (gsm.begin(2400)){
- Serial.println("\nstatus=READY");
- started=true;
- }
- else Serial.println("\nstatus=IDLE");
- // Initialize PINs
- pinMode( 4, OUTPUT );
- pinMode( 5, OUTPUT );
- digitalWrite( 4, HIGH );
- digitalWrite( 5, HIGH );
- delay(200);
- }
- void loop(){
- proveriVentile();
- Serial.println(millis());
- if(started){
- smsposition = sms.IsSMSPresent(SMS_UNREAD);
- if (smsposition) {
- // there is new SMS => read it
- sms.GetSMS(smsposition, phone_num, 20, sms_text, 160);
- sms.DeleteSMS(smsposition);
- Serial.println("\nRead SMS");
- Serial.println(phone_num);
- Serial.println(sms_text);
- ProcessSms(sms_text, phone_num);
- //delay(1000);
- }
- }
- }
- // EN: Make action based on the content of the SMS.
- // Notice than SMS content is the result of the processing of several GPRS shield messages.
- void ProcessSms( String smsbuffer, String number ){
- strcpy(primalac,number.c_str());
- if( smsbuffer.indexOf("#stop") >= 0 ){
- digitalWrite( 4, HIGH );
- delay(200);
- digitalWrite( 5, HIGH );
- delay(200);
- trenutna_akcija = 0;
- trajanje_trenutnog_zalivanja = 0;
- delay(200);
- if(started){
- sms.SendSMS(primalac, "Zalivanje je zaustavljeno.");
- }
- }
- if( smsbuffer.indexOf("#start") >= 0 ){
- if (trenutna_akcija == 0) {
- int spaceIndex = smsbuffer.indexOf(' ');
- String minutesString = smsbuffer.substring(spaceIndex);
- int minutes = minutesString.toInt();
- Serial.println(minutes);
- if (minutes == 0) {
- if(started){
- sms.SendSMS(primalac, "Unesite trajanje zalivanja po zoni u minutima npr. #start 10");
- }
- } else { // start sa periodom zalivanja, npr. #start 120
- trajanje_trenutnog_zalivanja = minutes;
- digitalWrite( ventil_1, LOW );
- vreme_poslednje_akcije = millis();
- trenutna_akcija = 1;
- char smsmessage[160];
- sprintf(smsmessage,"%s%d%s","Zalivanje u trajanju od ", trajanje_trenutnog_zalivanja, "min po zoni je zapoceto.");
- Serial.println(smsmessage);
- if(started){
- sms.SendSMS(primalac, smsmessage);
- }
- }
- } else {
- char smsmessage[160];
- sprintf(smsmessage,"%s%d%s","Trenutno je u toku zalivanje ", trenutna_akcija , " zone, nije moguce zapoceti novo zalivanje.");
- Serial.println(smsmessage);
- if(started){
- sms.SendSMS(primalac, smsmessage);
- }
- }
- }
- if( smsbuffer.indexOf("#kredit") >= 0 ){
- gsm.SimpleWriteln("AT+CUSD=1,\"*100#\""); //sending AT+CUSD=1,"*100#"
- delay(5000);
- char resp[125];
- gsm.read(resp, 125); //this command will send the response to the serial port and, at the same time, copy to "resp" string
- //Serial.println(resp);
- izvuciKredit(resp, Kredit);
- Serial.println(Kredit);
- if(started){
- sms.SendSMS(primalac, Kredit);
- }
- }
- if( smsbuffer.indexOf("#promenibroj") >= 0 ){
- char tmp[256];
- int i, j;
- tmp[0] = '+';
- for(i=0;smsbuffer[i];i++) {
- j=1;
- while(smsbuffer[i]>='0' && smsbuffer[i]<='9') {
- tmp[j]=smsbuffer[i];
- i++;
- j++;
- }
- tmp[j]=0;
- }
- strncpy(primalac, tmp, 256);;
- Serial.println("Novi primalac je ");
- Serial.println(primalac);
- if (sms.SendSMS(primalac, "Uspesno je izvrsena promena broja.")) {
- Serial.println("\nSMS sent OK");
- }
- }
- }
- void proveriVentile() {
- if ((trenutna_akcija == 1) && !(millis() - vreme_poslednje_akcije < trajanje_trenutnog_zalivanja * 60000L)) {
- digitalWrite( ventil_1, HIGH );
- digitalWrite( ventil_2, LOW );
- trenutna_akcija = 2;
- vreme_poslednje_akcije = millis();
- Serial.println("Zalivanje prve zone je zavrseno, zapoceto zalivanje druge zone.");
- } else if ((trenutna_akcija == 2) && !(millis() - vreme_poslednje_akcije < trajanje_trenutnog_zalivanja * 60000L)) {
- digitalWrite( ventil_2, HIGH );
- trenutna_akcija = 0;
- vreme_poslednje_akcije = millis();
- Serial.println("Zalivanje je završeno.");
- if(started){
- sms.SendSMS(primalac, "Zalivanje je zavrseno.");
- }
- }
- }
- int izvuciKredit (char* porukaUSSD, char* preostaloKredita)
- {
- int duzinaPoruke=0;
- int i=0, j=0, pocetak=-1, kraj=-1;
- // your code goes here.
- duzinaPoruke=strlen(porukaUSSD);
- //Serial.print(porukaUSSD);
- //Serial.print("\nDuzina stringa: ");
- //Serial.print("%d\n",duzinaPoruke);
- for(j=0; j<duzinaPoruke-5;j++)
- if(porukaUSSD[j]=='K')
- if(porukaUSSD[j+1]=='r')
- if(porukaUSSD[j+2]=='e')
- if(porukaUSSD[j+3]=='d')
- if(porukaUSSD[j+4]=='i')
- if(porukaUSSD[j+5]=='t')
- pocetak=j; // pocetak reci Kredit u velikoj poruci
- if(pocetak==-1) return 1; // Pretrazen ceo niz i nema reci "Kredit", pa je to greska
- //Serial.print("\nPocetak Kredita: ");
- //Serial.print("%d\n",pocetak);
- /* Ranije MTS slao din. ,a sad vise nema TACKE nego samo din pa ovo vise ne vazi
- for(j=0; j<duzinaPoruke-3;j++)
- if(porukaUSSD[j]=='d')
- if(porukaUSSD[j+1]=='i')
- if(porukaUSSD[j+2]=='n')
- if(porukaUSSD[j+3]=='.')
- kraj=j+4; // kraj reci din. u velikoj poruci
- */
- // Novi format MTS odgovora je samo din bez tacke i ovo radi za oba slucaja dok ne udjemo u EU
- for(j=0; j<duzinaPoruke-2;j++)
- if(porukaUSSD[j]=='d')
- if(porukaUSSD[j+1]=='i')
- if(porukaUSSD[j+2]=='n')
- kraj=j+3; // kraj reci din u velikoj poruci
- if(kraj==-1) return 2; // Pretrazen ceo niz i nema reci "din." , pa je to greska
- //Serial.print("\nKraj Kredita: ");
- //printf("%d\n",kraj);
- if(kraj<pocetak) return 3; // Moze to i bolje, nije pokriven bas svaki slucaj
- for(i=0; i<kraj-pocetak; i++)
- preostaloKredita[i]=porukaUSSD[pocetak+i];
- preostaloKredita[i]='\0';
- //Serial.print("\nPreostalo kredita: ");
- //Serial.print("%s\n",Kredit);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement