Send data from Sensor

Hello.I have a question about sending data to xively.I am using a photoelectric sensor,arduino uno and gsm shield.But i don't know how to implemet read sensor data section program with gsm example library and send them to xively.
Here is the Read Sensor data function:

#include <GSM.h>
#define APIKEY         ""  // replace your pachube api key here
#define FEEDID         12345                     // replace your feed ID
#define USERAGENT      ""              // user agent is the project name
#define PINNUMBER ""
#define GPRS_APN       ""  // replace your GPRS APN
#define GPRS_LOGIN     ""     // replace with your GPRS login
#define GPRS_PASSWORD  ""  // replace with your GPRS password
#include <PinChangeInt.h>
#define DATA 8
unsigned long time;
int cont=0;
void setup() {
  Serial.begin(9600);
  pinMode(DATA, INPUT);
  PCintPort::attachInterrupt(DATA,&cambio,FALLING);
}
void loop()
{ 
  time = millis()/999;
  Serial.println(cont);
  delay(800);//Only to see serial monitor outputs
  
}
void change() {
cont++;
}

Thank you.

Thank you.

You are welcome. To come back when you are ready to post ALL of your code, that is.

Could be the compatibility of libraries the problem?

// libraries
#include <GSM.h>
#include <PinChangeInt.h>
// Pachube Client data
#define APIKEY         ""  // replace your pachube api key here
#define FEEDID         12345                     // replace your feed ID
#define USERAGENT      ""              // user agent is the project name
#define DATA 8
int contador=0;
// PIN Number
#define PINNUMBER ""


// APN data
#define GPRS_APN       ""  // replace your GPRS APN
#define GPRS_LOGIN     ""     // replace with your GPRS login
#define GPRS_PASSWORD  ""  // replace with your GPRS password

// initialize the library instance:
GSMClient client;
GPRS gprs;
GSM gsmAccess(true);

// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:
// IPAddress server(216,52,233,121);    // numeric IP for api.pachube.com
char server[] = "api.pachube.com";      // name address for pachube API

unsigned long lastConnectionTime = 0;         // last time you connected to the server, in milliseconds
boolean lastConnected = false;                  // state of the connection last time through the main loop
const unsigned long postingInterval = 10*1000;  //delay between updates to Pachube.com

void setup()
{
  // initialize serial communications and wait for port to open:
  Serial.begin(9600);
  pinMode(DATA, INPUT);//line from PinChangeInt
  PCintPort::attachInterrupt(DATA,&cambio,FALLING);//line from PinChangeInt
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  
  // connection state
  boolean notConnected = true;
  
  // After starting the modem with GSM.begin()
  // attach the shield to the GPRS network with the APN, login and password
  while(notConnected)
  {
    if((gsmAccess.begin(PINNUMBER)==GSM_READY) &
        (gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD)==GPRS_READY))
      notConnected = false;
    else
    {
      Serial.println("Not connected");
      delay(1000);
    }
  }
}

void loop()
{  
PCintPort::attachInterrupt(DATA,&cambio,FALLING);//line from PinChangeInt
  // if there's incoming data from the net connection.
  // send it out the serial port.  This is for debugging
  // purposes only:
  if (client.available())
  {
     char c = client.read();
     Serial.print(c);
  }

  // if there's no net connection, but there was one last time
  // through the loop, then stop the client:
  if (!client.connected() && lastConnected)
  {
    client.stop();
  }
  
  // if you're not connected, and ten seconds have passed since
  // your last connection, then connect again and send data:
  if(!client.connected() && ((millis() - lastConnectionTime) > postingInterval))
  {
  sendData(contador);
  }
  
  // store the state of the connection for next time through
  // the loop:
  lastConnected = client.connected();
}

/*
  This method makes a HTTP connection to the server.
*/
void sendData(int thisData)
{
  // if there's a successful connection:
  if (client.connect(server, 80))
  {
    Serial.println("connecting...");
    
    // send the HTTP PUT request:
    client.print("PUT /v2/feeds/");
    client.print(FEEDID);
    client.println(".csv HTTP/1.1");
    client.println("Host: api.pachube.com");
    client.print("X-ApiKey: ");
    client.println(APIKEY);
    client.print("User-Agent: ");
    client.println(USERAGENT);
    client.print("Content-Length: ");

    // calculate the length of the sensor reading in bytes:
    // 8 bytes for "sensor1," + number of digits of the data:
    int thisLength = 8 + getLength(thisData);
    client.println(thisLength);

    // last pieces of the HTTP PUT request:
    client.println("Content-Type: text/csv");
    client.println("Connection: close");
    client.println();
    
    // here's the actual content of the PUT request:
    client.print("sensor1,");
    client.println(thisData);
  } 
  else
  {
    // if you couldn't make a connection:
    Serial.println("connection failed");
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
  }
  // note the time that the connection was made or attempted
  lastConnectionTime = millis();
}

/*
  This method calculates the number of digits in the
  sensor reading.  Since each digit of the ASCII decimal
  representation is a byte, the number of digits equals
  the number of bytes.
*/
int getLength(int someValue)
{
  // there's at least one byte:
  int digits = 1;
  
  // continually divide the value by ten, 
  // adding one to the digit count for each
  // time you divide, until you're at 0:
  int dividend = someValue /10;
  while (dividend > 0)
  {
    dividend = dividend /10;
    digits++;
  }
  
  // return the number of digits:
  return digits;
}
void cambio() {
contador=contador+1;
}
PCintPort::attachInterrupt(DATA,&cambio,FALLING);//line from PinChangeInt

Maybe you need a few more calls to attach the interrupt handler, in case it falls off.

The code you posted does something. It is not clear what.
You want the code to do something. It is not clear what.
All we can tell is that what it does is not what you want.

I have two programs,the first:

#include <PinChangeInt.h>
#define DATA 8

int cont=0;
void setup() {
  Serial.begin(9600);
  pinMode(DATA, INPUT);
  PCintPort::attachInterrupt(DATA,&cambio,FALLING);
}
void loop()
{
  Serial.println(cont);//to see the serial monitor outputs
  delay(800);
}
void cambio() {
cont++;
}

reads interrupts from a photoelectric sensor in Pin 8 connected to GSM Shield and with the second program(GSMPachubeClient from examples Arduino ide) send the interrupts stored in a variable(cont in this case ) to Xively web or another store data on web.The problem comes when i use <PinChangeInt.h> and <GSM.h> together in the two programs union.
Thanks

The problem comes when i use <PinChangeInt.h> and <GSM.h> together in the two programs union.

OK. What IS the problem?

Hi.It doesn' compile with two libraries together and send an error mensaje:

GSM\GSM3SoftSerial.cpp.o: In function __vector_5': C:\Program Files (x86)\Arduino\libraries\GSM/GSM3SoftSerial.cpp:525: multiple definition of __vector_5'
GSMPachubeClient.cpp.o:C:\Program Files (x86)\Arduino\libraries\PinChangeInt/PinChangeInt.h:543: first defined here
GSM\GSM3SoftSerial.cpp.o: In function __vector_4': C:\Program Files (x86)\Arduino\libraries\GSM/GSM3SoftSerial.cpp:518: multiple definition of __vector_4'
GSMPachubeClient.cpp.o:C:\Program Files (x86)\Arduino\libraries\PinChangeInt/PinChangeInt.h:533: first defined here
GSM\GSM3SoftSerial.cpp.o: In function __vector_3': C:\Program Files (x86)\Arduino\libraries\GSM/GSM3SoftSerial.cpp:511: multiple definition of __vector_3'
GSMPachubeClient.cpp.o:C:\Program Files (x86)\Arduino\libraries\PinChangeInt/PinChangeInt.h:523: first defined here

Both libraries use pin change interrupts.

I suggest you get a Leonardo, which has two hardware serial ports - one using the USB so you can communicate with the PC, and one using pins 0 and 1, so you can use Serial1 to communicate with the GSM thing. Then, the external interrupt pins will be available for you to use.

I was considering this possibility (Leonardo) but as i have uno i was trying more options.
Therefore i'll include it in the budget.

Thank you for your help.