Hi Blynkers,
I need to use in my project GET requests, calls and sending sms. I am using Arduino Nano + SIM800L and android v.10 with the program from app inventor. The problem is as follows. When I write separate code for Blynk and Arduino Nano + SIM800L, I get GET requests. When I write a separate code for calls and SMS for my provider, the calls go through and SMS are sent. But if I combine these 2 codes and one thing stops working. If I call on sim800, then calls do not arrive and sms is not sent, but GET requests work. If I comment on lines with Blynk, then calls and sms work. What is the problem?
#define BLYNK_PRINT Serial
#define TINY_GSM_MODEM_SIM800
#include <TinyGsmClient.h>
#include <BlynkSimpleSIM800.h>
char auth[] = "xSBq7y65Mp_*********************";
char apn[] = "internet";
char user[] = "";
char pass[] = "";
#include <SoftwareSerial.h>
SoftwareSerial SIM800(2, 3); // RX-3, TX-2
TinyGsm modem(SIM800);
int start_in = 0;
BLYNK_WRITE(V0) {
int pinValue = param.asInt();
if (pinValue == 1) {
start_in = 1;
}
if (pinValue == 0) {
start_in = 0;
}
}
}
unsigned long millisperiod = 0;
String _response = "";
long lastUpdateSMS = millis();
long updatePeriodSMS = 60000;
String whiteListPhones = "+7961*********";
String innerPhone = "";
unsigned long ENGINE_WARM_TIME = 600000;
int ENGINE_START_MAX_TIME = 3 ;
const int engine_out = 4;
int actual_mode = 0;
int left_start_try = 0;
unsigned long last_start_time = 0;
int prevGsmState = 0;
int lastGsmState;
void setup() {
Serial.begin(9600);
delay(10);
SIM800.begin(19200);
sendATCommand("AT", true);
delay(20);
_response = sendATCommand("AT+CLIP=1", true);
sendATCommand("ATE1", true);
lastUpdateSMS = millis();
delay(3000);
Serial.println("Initializing modem...");
modem.init();
Blynk.begin(auth, modem, apn, user, pass);
pinMode(engine_out, OUTPUT);
digitalWrite(engine_out, HIGH);
}
void loop() {
Blynk.run();
if (start_in ==1) {
digitalWrite(engine_out, LOW);
delay(3000);
digitalWrite(engine_out, HIGH);
sendSMSinPDU(innerPhone, "RELAY Tripped");
}
if (SIM800.available()) {
_response = waitResponse();
_response.trim();
Serial.println(">>>" + _response);
Serial.println(_response);
if (_response.startsWith("RING")) {
int phoneindex = _response.indexOf("+CLIP: \"");
if (phoneindex >= 0) {
phoneindex += 8;
innerPhone = _response.substring(phoneindex, _response.indexOf("\"", phoneindex));
Serial.println("Number: " + innerPhone); //
}
if (innerPhone.length() >= 7 && whiteListPhones.indexOf(innerPhone) >= 0) {
digitalWrite(engine_out, LOW);
delay(3000);
digitalWrite(engine_out, HIGH);
sendSMSinPDU(innerPhone, "RELAY Tripped");
}
else {
sendATCommand("ATH", true);
}
}
}
if (Serial.available()) {
SIM800.write(Serial.read());
}
}
void sendSMSinPDU(String phone, String message)
{
Serial.println("Sending a message: " + message);
String *ptrphone = ☎
String *ptrmessage = &message;
String PDUPack;
String *ptrPDUPack = &PDUPack;
int PDUlen = 0;
int *ptrPDUlen = &PDUlen;
getPDUPack(ptrphone, ptrmessage, ptrPDUPack, ptrPDUlen);
Serial.println("PDU-pack: " + PDUPack);
Serial.println("PDU length without SCA:" + (String)PDUlen);
sendATCommand("AT+CMGF=0", true);
sendATCommand("AT+CMGS=" + (String)PDUlen, true);
sendATCommand(PDUPack + (String)((char)26), true);
sendATCommand("AT+CMGDA=\"DEL ALL\"", true);
}