Hi Everyone,
I am trying to call particle function in my argon device but it always says failed to call the function. Can anyone tell me what I am doing wrong in my code?
char devName[32] = "W0001"; /**<Declaring the Device ID */
char jsonData[256]; /**< Variable declared to hold the JSON formatted data */
bool cloudSuccess; /**< Variable declared for checking cloud upload*/
char recData[30]; /**< Varibale to hold UART data*/
int count = 0;
int t=30 ;
float vfr= 0;
int timeInteraval(String seconds);
// setup() runs once, when the device is first turned on.
void setup() {
// Put initialization like pinMode and begin functions here.
Serial1.begin(115200); /**< UART Initialized*/
//Registering the function
Particle.function("time", timeInteraval);
}
// loop() runs over and over again, as quickly as it can execute.
void loop() {
// The core of your code will likely live here.
/* Checks whether particle is connected to cloud*/
while(Particle.connected())
{
/* Checks whether UART data is available*/
while(Serial1.available())
{
tone(D3, 20, 50); /**< LED Signal*/
/* Reading the serail data*/
String s = Serial1.readStringUntil('\n');
s.toCharArray(recData, 30);
/* Stripping the string using delimit*/
char * dlimiter = strtok(recData,",");
char * dData = strtok(NULL,",");
int d = atoi(dlimiter);
if(d==4)
{
/*Converting hex to float*/
std::string s = dData;
unsigned int x = std::stoul(s, nullptr, 16);
static_assert(sizeof(float) == sizeof x, "`float` has a weird size.");
float ret;
std::memcpy(&ret, &x, sizeof(float));
vfr = vfr + ret;
count= count+1;
if (count==t)
{
/* Saving the Local Time in UNIX time format*/
int uf_time = Time.local();
/* Writing the data into JSON format */
JSONBufferWriter writer(jsonData, sizeof(jsonData));
writer.beginObject();
writer.name("gateway_ID").value(devName);
// writer.name("dlimiter").value(d);
// writer.name("hex").value(dData);
writer.name("vfr").value(vfr/t);
writer.name("time_interval").value(t);
writer.name("device_Time").value(uf_time);
writer.endObject();
writer.buffer()[std::min(writer.bufferSize(),writer.dataSize())] = 0;
if(dData!= 0)
{
/* Publishing data to particle cloud */
cloudSuccess = Particle.publish("RTR_FlowMeter_data", jsonData);
}
count=0;
vfr=0;
}
}
}
}
}
// This function is called when the Particle.function is called
int timeInteraval(String seconds)
{
t=atoi(seconds);
return 1;
}
Thanks in Advance