Hello. I have this code for parking sensor
Quote:
#define ADDRESS "0013A20040763C97"
#define Waspmote "0013A20040763C6D"
#define PARKING "0013A20040763C42"
int mac;
packetXBee* paq_sent;
//char* data;
uint8_t data;
uint8_t temperature;
boolean status;
uint8_t contador=0;
void setup()
{
delay (9000);//Dejo tiempo
SensorParking.loadReference();//Carga coef temperatura
SensorParking.setBoardMode(SENS_ON);//Activa todo
delay(2000);
SensorParking.calibration();// Toma los valores iniciales del campo magneticoº
SensorParking.setBoardMode(SENS_OFF);//Apaga
}
void loop()
{
SensorParking.setBoardMode(SENS_ON);
delay (1000);// Libelium
SensorParking.readParkingSetReset();//Realinea molec y lee tensiones
temperature = SensorParking.readTemperature();//Compensacion Tª
SensorParking.calculateReference(temperature);
status = SensorParking.estimateState();
//Inicio el módulo Xbee
xbee802.init(XBEE_802_15_4,FREQ2_4G,NORMAL);
xbee802.ON();
XBee.println("Modulo inicializado");
//detecto si la plaza esta ocupada
status = SensorParking.estimateState();
if(status == PARKING_OCCUPIED)
{
contador=contador+1;
XBee.println("Parece que la plaza se ha ocupado");
XBee.println(contador,DEC);
}
else
{
contador=0;
XBee.println("Plaza libre");
if( data==1)
{
data=0;
XBee.println("Plaza libre");
XBee.println(contador,DEC);
XBee.println(data,DEC);
enviar();
}
}
if(contador == 20)
{
data=1;
enviar();
XBee.println("Plaza ocupada ");
XBee.println(contador);
contador=0;
}
delay(1000);//Retardo de un segundo
XBee.println("Modulo OFF");
xbee802.OFF();
}
void enviar ()
{
paq_sent=(packetXBee*) calloc(1,sizeof(packetXBee));
paq_sent->mode=UNICAST;
paq_sent->MY_known=0;
//paq_sent->packetID=0x52;
paq_sent->opt=0;
xbee802.hops=0;
//configuro el que envia datos
xbee802.setOriginParams(paq_sent, PARKING, MAC_TYPE);
//Configuro quien lo recibe.Envio libre o ocupado
xbee802.setDestinationParams(paq_sent, Waspmote, data, MAC_TYPE, DATA_ABSOLUTE);
xbee802.sendXBee(paq_sent);
delay(100);
if( !xbee802.error_TX )
{
XBee.println("Sin error en la transmisión");
}
else
{
XBee.println("Error en la transmisión");
}
free(paq_sent);
paq_sent=NULL;
}
And this for a wasmote with a module Xbee and GPRS:
Quote:
#define MAX_TRIES 3
#define DEBUG_PORT
uint8_t tiempoLimite = 3;
uint8_t timeout;
#define Waspmote "0013A20040763C6D"
#define SERVIDOR_IP "extranet.grupoforo.com"
#define SERVIDOR_SUB_URL "/gf.saga.web/"
#define SERVIDOR_PUERTO "90"
char commando[90];
uint8_t n=0;
uint8_t i=0;
uint8_t respuesta = 0;
long previous=0;
uint8_t j=0;
uint8_t Mac_parking[8];
uint8_t dato_leido;
char ocupacionc;
char* Mac_parkingc="";
packetXBee* paq_sent;
void setup(){
// setup for Serial port over USB
USB.begin();
USB.println("USB port started...");
RTC.ON();
// setup for GPRS serial port
GPRS.ON();
USB.println("GPRS module ready...");
// waiting while GPRS connects to the network
while((timeout<MAX_TRIES)&&(!GPRS.check()))
{
USB.print("timeout = ");
USB.println(timeout,DEC);
timeout++;
delay(200);
}
USB.println("GPRS connected to the network");
// configure SMS and Incoming Calls
if(GPRS.setInfoIncomingCall()) USB.println("Info Incoming Call OK");
if(GPRS.setInfoIncomingSMS()) USB.println("Info Incoming SMS OK");
if(GPRS.setTextModeSMS()) USB.println("Text Mode SMS OK");
xbee802.init(XBEE_802_15_4,FREQ2_4G,NORMAL);
xbee802.ON();
XBee.println("\n Modulo inicializado");
if(GPRS.configureGPRS()) USB.println("Configured OK");
}
void loop(){
// Configure GPRS Connection
respuesta = GPRS.createSocket(SERVIDOR_IP, SERVIDOR_PUERTO, GPRS_CLIENT);
USB.print("Respuesta crear socket: ");
USB.println(respuesta, DEC);
if(respuesta == 1)
{
USB.println("Socket Opened OK");
USB.print("Session Number: ");
while( GPRS.socket_ID[i]!='\r' )
{
USB.print(GPRS.socket_ID[i]-'0',DEC);
i++;
}
i=0;
USB.println();
}
else
{
USB.println("Error opening the socket");
USB.print("Valor Error: ");
USB.println(GPRS.flag, DEC);
}
delay(500);
dato_leido=leerdatos();
if (dato_leido==1)
{
formatearPeticion("mote.txt",Mac_parkingc,ocupacionc);
signalCobertura();
llamarSaga();
Mac_parkingc[0]=NULL;
}
else
{
XBee.println("Ningun dato leido");
}
// Close socket
if(GPRS.closeSocket(GPRS.socket_ID)) USB.println("Socket cerrado");
GPRS.data_read = NULL;
delay(1000);
}
void signalCobertura()
{
Serial.println("AT+CSQ",1);
delay(500);
while(Serial.available(1)) USB.print(char(Serial.read(1)));
}
void formatearPeticion(char* aspx, char* id, char conectado)
{
// formato enviado a SAGA
// GET /gf.saga.web/mote.txt?id=xxxxxxx&O=S\r\n
sprintf(commando,"%s%s%s\?id=%s%cO=%c%c%c","GET ", SERVIDOR_SUB_URL,aspx, id, '&', conectado,'\r','\n');
USB.println(commando);
}
void llamarSaga()
{
if(GPRS.sendData(commando,GPRS.socket_ID)) USB.println("Datos enviados GET ");
delay(2000);
n=0;
while(!n){
n=GPRS.readData(GPRS.socket_ID,"20");
}
USB.print("Bytes Read: ");
USB.println(GPRS.data_read,DEC);
if (GPRS.data_read > 0) USB.println(GPRS.data_URL);
}
uint8_t leerdatos()
{
char* ocupacion;
//Waiting message
previous=millis();
while( (millis()-previous) < 20000 )//espero un tiempo X el mensaje
{
if( XBee.available() )
{
xbee802.treatData();
XBee.println("Comienzo tratamiento datos");
if( xbee802.error_RX )
{
XBee.println("Error al recibir mensaje");
}
else
{
XBee.println("Mensaje recibido");
while(xbee802.pos>0)
{
XBee.println("Paquete recibido");
//Leo direccion de quien me ha mandad el sms(MAC). Omito la direccion alta.
while(j<4)
{
Mac_parking[j]=xbee802.packet_finished[xbee802.pos-1]->macSH[j];
j++;
}
while(j<8)
{
Mac_parking[j]=(xbee802.packet_finished[xbee802.pos-1]->macSL[j-4]);
devol(Mac_parking[j]);
XBee.print(Mac_parking[j],HEX);
j++;
}
XBee.print("\nMac_parkingc(bajo): ");
XBee.println(Mac_parkingc);
XBee.println();
//Leo si esta libre o ocupado
XBee.println("\n Dato recibido: \n");
for(int f=0;f<xbee802.packet_finished[xbee802.pos-1]->data_length;f++)
{
// XBee.println(xbee802.packet_finished[xbee802.pos-1]->data[f],BYTE);
ocupacion[f]=xbee802.packet_finished[xbee802.pos-1]->data[f];
XBee.print(xbee802.packet_finished[xbee802.pos-1]->data[f]);
}
ocupacion[xbee802.packet_finished[xbee802.pos-1]->data_length] = '\0';
XBee.println(ocupacion);
if(ocupacion[0]=='1')
{
ocupacionc='S';
}
else
{
ocupacionc='N';
}
XBee.println("ocupacionc");
XBee.println(ocupacionc);
free(xbee802.packet_finished[xbee802.pos-1]);
xbee802.packet_finished[xbee802.pos-1]=NULL;
xbee802.pos--;
return 1;
}
}
}
return 0;
}
void devol(char caracter)
{
sprintf(Mac_parkingc,"%s%X",Mac_parkingc, caracter);
}
The problem is that GPRS works but only when I turn off the sensor parking.If the sensor parking is On, GPRS is working well until
Quote:
if(GPRS.sendData(commando,GPRS.socket_ID)) USB.println("Datos enviados GET ");
After this sentence I have to wait 4 minutes until I can read some data. I think is because of GPRS and Xbee work together because if I write directly the data I have to send it works.
How can I solve this problem??
Also, instead of receiving the data ..I obtain "Error en la transmisión" and when I compare the data I am sending;
Quote:
if(ocupacion[0]=='1')
{
ocupacionc='S';
}
else
{
ocupacionc='N';
}
it doesnt work.
I have tried with Utils.strCmp(ocupacion,"1",1) and is the same.
Thanks a lot.