Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SoftwareSerial.h>
- #include <Event.h>
- #include <Timer.h>
- #include <avr/pgmspace.h>
- Timer t;
- int EVENT_LED;
- int EVENT_SEND_AT;
- enum
- {
- CMD_SIM900_NONE,
- CMD_SIM900_START,
- CMD_SIM900_SENDSMS
- };
- SoftwareSerial SIM900(7, 8);
- byte resultbyte;
- bool isSIM900on = false;
- bool isSIM900starting = false;
- byte SIM900_sendCMD = CMD_SIM900_NONE;
- const char respond[] PROGMEM = {'O', 'K', 13, 10};
- byte respID = 0;
- #define PIN_SIM900_ONOFF 9
- #define PIN_LED 2
- void setup()
- {
- Serial.begin(9600);
- pinMode(PIN_SIM900_ONOFF, OUTPUT);
- digitalWrite(PIN_SIM900_ONOFF, LOW);
- pinMode(PIN_LED, OUTPUT);
- digitalWrite(PIN_LED, LOW);
- SIM900powerON();
- }
- void SIM900powerON()
- {
- digitalWrite(PIN_SIM900_ONOFF, HIGH);
- t.after(2000, SIM900power2);
- EVENT_LED = t.oscillate(PIN_LED, 300, HIGH);
- EVENT_SEND_AT = t.after(20000L, SIM900startingSendAT);
- isSIM900starting = true;
- }
- void SIM900powerOFF()
- {
- if(isSIM900starting)
- {
- t.stop(EVENT_LED);
- t.stop(EVENT_SEND_AT);
- isSIM900starting = false;
- }
- digitalWrite(PIN_SIM900_ONOFF, HIGH);
- t.after(2000, SIM900power2);
- isSIM900on = false;
- digitalWrite(PIN_LED, LOW);
- SIM900.end();
- }
- void SIM900power2()
- {
- digitalWrite(PIN_SIM900_ONOFF, LOW);
- }
- void SIM900startingSendAT()
- {
- SIM900.begin(19200);
- delay(100);
- SIM900_sendCMD = CMD_SIM900_START;
- SIM900.print(F("AT\r"));
- }
- void SIM900started()
- {
- isSIM900on = true;
- isSIM900starting = false;
- t.stop(EVENT_LED);
- digitalWrite(PIN_LED, HIGH);
- }
- void SIM900sendSMS(int state)
- {
- SIM900.print(F("AT+CMGF=1\r"));
- delay(100);
- SIM900.println(F("AT+CMGS=\"501239XXX\""));
- delay(100);
- if(state == 1) SIM900.println(F("AKTYWACJA ALARMU"));
- else SIM900.println(F("DEAKTYWACJA ALARMU"));
- delay(100);
- SIM900.println((char)26);
- delay(100);
- SIM900_sendCMD = CMD_SIM900_SENDSMS;
- SIM900.println();
- }
- void loop()
- {
- t.update();
- while(SIM900.available())
- {
- resultbyte = SIM900.read();
- if((resultbyte != 0) && (resultbyte != 0xFF))
- {
- if(SIM900_sendCMD != CMD_SIM900_NONE)
- {
- if(resultbyte == pgm_read_byte(&respond[respID])) respID++;
- else respID = 0;
- if(respID == 4)
- {
- if(isSIM900starting)
- {
- SIM900started();
- }
- else if(SIM900_sendCMD == CMD_SIM900_SENDSMS)
- {
- Serial.println(F("SMS wyslany"));
- }
- SIM900_sendCMD = CMD_SIM900_NONE;
- }
- }
- }
- }
- while(Serial.available())
- {
- resultbyte = Serial.read();
- if(resultbyte == 'c')
- {
- SIM900powerOFF();
- }
- else if(resultbyte == 'o')
- {
- SIM900powerON();
- }
- else if(resultbyte == 's')
- {
- Serial.println(F("wysylanie SMS..."));
- SIM900sendSMS(1);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment