salve,
nello sketch che segue la variabile lastRadio, una "byte" che fa da semplice contatore non si aggiorna :0
se la faccio incrementare all'interno del loop, fuori dal "if (ricevitore)" funziona, ma dentro all'if rimane sempre a zero.
non riesco a spiegarmi il motivo
quando ricevitore() è true entra nell'if, esegue correttamente tutto il codice tranne l'incremento della variabile.
come prima ipotesi ho pensato alla ram esaurita, ma freeMemory() mi segnala 570 byte di memoria libera, che è più di un quarto del totale, quindi credo non sia quello il problema.
cosa mi sfugge??
#include <SPI.h>
#include <digitalWriteFast.h>
#include "iBoardRF24.h"
#include <Ethernet.h>
#include <HttpClient.h>
#include <Xively.h>
#include <MemoryFree.h>
////////////////////RF24//////////////////////////
iBoardRF24 radio(3,8,5,6,7,2); //ce,csn,mosi,miso,sck,irq
const uint64_t pipes[1] = {
0xB1B2B3B401LL };
char receivePayload[31];
////////////////////XIVELY//////////////////////////
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char xivelyKey[] = "QvWc2WkWnwSmgiTB5d3TYMHmEbQJff7A1I0U9WDLGuIsGSqa";
char UmidId[] = "Umidita";
char TempId[] = "Temperatura";
char VentId[] = "Vento";
char DirezId[] = "Direzione";
char PressId[] = "Pressione";
char PioggId[] = "Pioggia";
XivelyDatastream datastreams[] = {
XivelyDatastream(TempId, strlen(TempId), DATASTREAM_FLOAT),
XivelyDatastream(UmidId, strlen(UmidId), DATASTREAM_FLOAT),
XivelyDatastream(VentId, strlen(VentId), DATASTREAM_FLOAT),
XivelyDatastream(DirezId, strlen(DirezId), DATASTREAM_FLOAT),
XivelyDatastream(PressId, strlen(PressId), DATASTREAM_FLOAT),
XivelyDatastream(PioggId, strlen(PioggId), DATASTREAM_FLOAT),
};
XivelyFeed feed(906360956, datastreams, 6 /* number of datastreams */);
EthernetClient client;
XivelyClient xivelyclient(client);
///////////////////////////////////////////////////
void setup( ) {
Serial.begin(9600);
radio.begin();
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_MAX);
radio.setChannel(37);
radio.enableDynamicPayloads();
radio.setRetries(15,15);
radio.setCRCLength(RF24_CRC_16);
radio.openWritingPipe(pipes[0]);
radio.openReadingPipe(1,pipes[1]);
while (Ethernet.begin(mac) != 1) {
Serial.println("Error getting IP address via DHCP, trying again...");
delay(300);
}
Serial.println("base meteo");
radio.startListening();
}
byte len, pipe = 0;
char lastReceivePayload[10];
unsigned long lastMillisPayload;
float Temperatura, Umidita, Pioggia = 0;
int Pressione, Vento, Direzione, i = 0;
char tmp[10];
boolean check = true;
byte lastRadio = 0;
// lastRadio=millis();
void loop( ) {
Serial.println(lastRadio);
if ( ricevitore() ) {
Serial.print("freeM=");
Serial.println(freeMemory());
++lastRadio;
check = false;
Serial.println(receivePayload);
switch ( receivePayload[0] ) {
//////////////////
case 'T':
for ( i=2; i< sizeof(receivePayload); i++) {
tmp[i-2] = receivePayload[i];
}
Temperatura = atof(tmp);
Serial.print("Temp:");
Serial.println(Temperatura);
datastreams[0].setFloat(Temperatura);
break;
//////////////////
case 'P':
for ( i=2; i< sizeof(receivePayload); i++) {
tmp[i-2] = receivePayload[i];
}
Pressione = atof(tmp);
Serial.print("Pres:\t");
Serial.println(Pressione);
break;
//////////////////
case 'U':
for ( i=2; i< sizeof(receivePayload); i++) {
tmp[i-2] = receivePayload[i];
}
Umidita = atof(tmp);
Serial.print("Umid:\t");
Serial.println(Umidita);
datastreams[1].setFloat(Umidita);
break;
//////////////////
case 'A':
for ( i=2; i< sizeof(receivePayload); i++) {
tmp[i-2] = receivePayload[i];
}
Pioggia = atof(tmp);
Serial.print("Piog:\t");
Serial.println(Pioggia);
break;
//////////////////
case 'V':
for ( i=2; i< sizeof(receivePayload); i++) {
tmp[i-2] = receivePayload[i];
}
Vento = atof(tmp);
Serial.print("Vento:\t");
Serial.println(Vento);
break;
//////////////////
case 'D':
for ( i=2; i< sizeof(receivePayload); i++) {
tmp[i-2] = receivePayload[i];
}
Direzione = atof(tmp);
Serial.print("Direz:\t");
Serial.println(Direzione);
break;
}
}
// Serial.println(check);
// unsigned long time = millis();
// if ( time > lastRadio + 5000) {
if ( lastRadio > 5) {
// lastRadio = 0;
// Serial.print(time);
Serial.print(" xxxxxxxx\t");
// Serial.println(lastRadio);
if ( !check ) {
check = true;
// Ethernet.begin(mac);
Serial.print("Upload:\t");
int ret = xivelyclient.put(feed, xivelyKey);
Serial.println(ret);
client.stop();
radio.startListening();
delay (5);
}
}
}