#include <Wire.h>
#include <INA219_WE.h>
#define I2C_ADDRESS 0x40
#include <SoftwareSerial.h>
SoftwareSerial Sim800L(2, 3);
const float alpha = .725; // 0.97 Low Pass Filter alpha (0.0 - 1.0 )
const float calCorrection = -0.29; // correct steady state error (ina260.readCurrent())
// Variabel kalkulasi arus dan pressure
float currentVal = 0.0;
float psiVal;
float barVal;
float max_press = 25; // spek max pressure : 10 bar
float m = max_press / (20 - 4);
float shuntVoltage_mV = 0.0;
float loadVoltage_V = 0.0;
float busVoltage_V = 0.0;
float current_mA = 0.0;
float power_mW = 0.0;
bool ina219_overflow = false;
INA219_WE ina219 = INA219_WE(&Wire, I2C_ADDRESS);
String Script_ID = "AKfycbwXt4PER5Mp7J5d7OhMlKcaue3CxVR5nhyK5cMwZeSwKhOg-fqe4rjrEUjT8DtxmCa8oA"; //V2 deploy ID
String pims_ref = "api.ptm-pims.com/api/send-data?location_code=bv27&value=4.3";
String location = "bv25";
String url;
String pims;
void setup() {
Serial.begin(115200);
Wire.begin();
Sim800L.begin(115200);
Serial.println("Initializing...");
delay(15000);
if (!ina219.init()) {
Serial.println("INA219 not connected!");
}
ina219.setADCMode(SAMPLE_MODE_128);
ina219.setMeasureMode(CONTINUOUS);
ina219.setPGain(PG_40);
ina219.setBusRange(BRNG_16);
Sim800L.println("AT");
delay(500);
updateSerial();
Sim800L.println("AT+CSQ");
delay(500);
updateSerial();
Sim800L.println("AT+CBC");
delay(500);
updateSerial();
GPRS_Connection();
delay(5000);
updateSerial();
}
void loop() {
for (int i = 1; i < 25; i++) {
if (i > 22) {
Serial.print("i : ");
Serial.println(i);
GPRS_Connection();
Sim800L.println("AT+HTTPINIT");
Serial.println("AT+HTTPINIT");
//updateSerial();
delay(500); //500
updateSerial();
Sim800L.println("AT+HTTPSSL=1");
Serial.println("AT+HTTPSSL=1");
delay(5000); //500
updateSerial();
Sim800L.println("AT+HTTPPARA=\"URL\"," + pims);
Serial.println("AT+HTTPPARA=\"URL\"," + pims);
//updateSerial();
delay(5000); //1000
updateSerial();
Sim800L.println("AT+HTTPPARA=\"CID\",1");
Serial.println("AT+HTTPPARA=\"CID\",1");
//updateSerial();
delay(1000); //1000
updateSerial();
Sim800L.println("AT+HTTPACTION=0");
Serial.println("AT+HTTPACTION=0");
//updateSerial();
delay(5000); //3000
updateSerial();
Sim800L.println("AT+HTTPREAD");
Serial.println("AT+HTTPREAD");
//updateSerial();
delay(5000); //3000
updateSerial();
Serial.println("AT+HTTPTERM");
Sim800L.println("AT+HTTPTERM");
delay(3000);
updateSerial();
}
current_mA = ina219.getCurrent_mA();
ina219_overflow = ina219.getOverflow();
float adcVal = (current_mA) + calCorrection; // Read current
currentVal = (alpha * currentVal) + ((1.0 - alpha) * adcVal);// Low Pass Filter
barVal = ((m * currentVal) - (m * 4));
if (barVal <= 0) {
barVal = 0;
}
//url = "script.google.com/macros/s/" + Script_ID + "/exec?value1=" + String(barVal) + "&location=BV%2025";
pims = "api.ptm-pims.com/api/send-data?location_code=" + location + "&value=4.9";
Serial.print("i : ");
Serial.println(i);
Serial.print("Current: ");
Serial.println(String(currentVal, 2 ) + " mA");
Serial.print("Pressure: ");
Serial.println(String(barVal, 2 ) + " bar");
Serial.print(" ");
Serial.println(" ");
delay(300);
}
}
void updateSerial()
{
while (Sim800L.available()) {
parseData(Sim800L.readString());
delay(2000);
}
while (Serial.available()) {
Sim800L.write(Serial.read());
delay(2000);
}
}
void GPRS_Connection()
{
Sim800L.println("AT+CGATT=1");
delay(1500);//500
Sim800L.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"");
delay(2000);//1000
Sim800L.println("AT+SAPBR=3,1,\"APN\",\"internet\"");
delay(1500);//500
Sim800L.println("AT+SAPBR=1,1");
delay(3000);//1000
Sim800L.println("AT+SAPBR=2,1");
delay(3000);//1000
}
void parseData(String buff)
{
unsigned int len, index;
index = buff.indexOf("\r");
buff.remove(0, index + 2);
//Sim800L.println("Buff: " + String(buff));
Serial.println("Buff:" + String(buff));
buff.trim();
if (buff.indexOf("+HTTPACTION: ") > -1)
{
index = buff.indexOf(":");
String HTTPACTION_code = buff.substring(index + 4, index + 7);
HTTPACTION_code.trim();
//Sim800L.println("HTTPACTION_code:" + String(HTTPACTION_code));
Serial.println("HTTPACTION_code:" + String(HTTPACTION_code));
if (HTTPACTION_code == "601")
{
//Serial.println("Restart GPRS Connection");
GPRS_Connection();
}
}
}