Hello good afternoon.
I have a sensor that detects the humidity and the temperature, the detection by levels, so, it prints 3 humidity values and 3 temperature values, but it prints it in a chain that only separates with a + sign. So we will use the command: strtok. And then with a set of while a variable is assigned to each of the values that were between the plus signs (+). I did it in the values of temperature and operation, but at the moment of doing it I do not leave. To check the result of the printing, the values of the sensors were obtained from the variables of the temperature parameters and apparently. Help
#include <SDISerial.h>
#include "Arduino.h"
/*
I used a few devices with no problem using a MEGA 2560 as well as an UNO.
Sketch was built with Arduino 1.0.4, however I also tested it under 1.0.0
Place the SDISerial folder in "<ARDUINO_ROOT>/libraries"
with the 5TE
the WHITE wire is power.
- I hooked it up to the arduino 5v output pin, however you could also connect it to a pin and drive power only when you wanted it
the RED wire is the DATA_LINE.
- you must hook it up to a pin that can process interrupts (see link below)
the remaining wire must be connected to ground
*/
//in order to recieve data you must choose a pin that supports interupts
#define DATALINE_PIN 2
#define INVERTED 1
#define BAUDRATE 1200
//see: http://arduino.cc/en/Reference/attachInterrupt
//for pins that support interupts (2 or 3 typically)
char* templ1;//temperature level1
char* templ2;//temperature level2
char* templ3;//temperature level3
char* huml1;//moisture level1
char* huml2;//moisture level2
char* huml3;//moisture level3
char* value_temperature;
char* value_moisture;
SDISerial connection(DATALINE_PIN, INVERTED);
char output_buffer[125];
void setup(){
connection.begin(); // start our SDI connection
Serial.begin(BAUDRATE); // start our uart
Serial.println("OK INITIALIZED"); // startup string echo'd to our uart
delay(3000); // startup delay to allow sensor to powerup and output its DDI serial string
char* sensor_address = connection.sdi_query("?!", 1000);
sprintf(output_buffer,"Sensor address: %s",sensor_address?sensor_address:"No Response");
Serial.println(output_buffer);
char* sensor_info = connection.sdi_query("1I!", 1000);
sprintf(output_buffer,"Sensor info: %s",sensor_info ?sensor_info :"No Response");
Serial.println(output_buffer);
}
void loop(){
char* start_measurements_m = connection.sdi_query("1M!", 2000);
sprintf(output_buffer,"start measurements Moisture: %s",start_measurements_m ? start_measurements_m :"No Response");
//Serial.println(output_buffer);
delay(2000);
char* moisture = connection.sdi_query("1D1!", 2000);
sprintf(output_buffer,"Sensor Data Soil Moisture: %s",moisture ? moisture :"No Response");
Serial.println(output_buffer);
char* start_measurements_t = connection.sdi_query("1M4!", 2000);
sprintf(output_buffer,"Start Data Soil Temperature: %s",start_measurements_t ? start_measurements_t :"No Response");
//Serial.println(output_buffer);
delay(2000);
char* temperature = connection.sdi_query("1D0!", 2000);
sprintf(output_buffer,"Sensor Data Soil Temperature: %s",temperature ? temperature :"No Response");
Serial.println(output_buffer);
//AT+SAPBR=3,1,"Contype","GPRS";
//AT+SAPBR=3,1,"APN","internet.itelcel.com";
char* command = strtok(temperature, "+");
int counter=1;
while (command != 0)
{
// Find the next command in input string
command = strtok(0, "+");
if(counter==1){
templ1=command;
}
else if(counter==2){
templ2=command;
}
else if(counter==3){
templ3=command;
}
++counter;
}
char* command2 = strtok(moisture, "+");
int counter1=1;
while (command2 != 0)
{
// Find the next command in input string
command2 = strtok(0, "+");
Serial.println(command2);
if(counter1==1){
huml1=command2;
}
else if(counter1==2){
huml2=command2;
}
else if(counter1==3){
huml3=command2;
}
++counter1;
Serial.println(command2);
}
Serial.println("temperatura");
Serial.println(templ1);
Serial.println(templ2);
Serial.println(templ3);
Serial.println("humedad");
Serial.println(huml1);
Serial.println(huml2);
Serial.println(huml3);
}
Thanks in advance