Bonjour,
Je termine un projet de surveillance de température de frigos dans un restaurant.
J'ai une base avec une carte Stalker v2.3, un écran LCD, un shield xbee (pour le debug après je mettrais la puce xbee directement sur la carte), avec un xbee S2B configuré en coordinateur, 2 capteurs avec arduino mini, sonde DS1820, 2 xbee S2B.
J'arrive parfaitement à afficher les données température de mes capteurs. Je souhaiterais également que chaque donnée de température soit associée au nom de la puce Xbee. Cela me permet d'ajouter autant de capteurs que je le souhaite sans reprogrammer la carte Stalker à chaque fois.
Avec le code ci-dessous j'arrive à avoir le nom de la puce Xbee via une requete AT avec instruction NI et la température.
Le problème est qu'il m'affiche aléatoirement en face de chaque température le nom d'un xbee ou de l'autre. Comment faire pour faire afficher le nom du xbee et sa température, du genre
Frigo 1 : 4.5°C
Merci d'avance pour votre aide
Voici mon code :
XBee xbee = XBee();
XBeeResponse response = XBeeResponse();
uint8_t shCmd[]={'N','I'};
// SH + SL Address of receiving XBee
XBeeAddress64 addr64 = XBeeAddress64(0x00, 0xFFFF);
// create reusable response objects for responses we expect to handle
ZBRxResponse rx = ZBRxResponse();
//RemoteAtCommandResponse atResponse=RemoteAtCommandResponse();
RemoteAtCommandRequest atRequest = RemoteAtCommandRequest(addr64,shCmd);
RemoteAtCommandResponse atResponse = RemoteAtCommandResponse();
ModemStatusResponse msr = ModemStatusResponse();
// continuously reads packets, looking for ZB Receive or Modem Status
void readData() {
char hexText[6];
xbee.readPacket(1000);
if (xbee.getResponse().isAvailable()) {
// got something
Serial.println("Xbee available !");
if (xbee.getResponse().getApiId() == ZB_RX_RESPONSE) {
// got a zb rx packet
// now fill our zb rx class
xbee.getResponse().getZBRxResponse(rx);
Serial.println("Got an rx packet!");
if (rx.getOption() == ZB_PACKET_ACKNOWLEDGED) {
// the sender got an ACK
Serial.println("packet acknowledged");
} else {
Serial.println("packet not acknowledged");
}
Serial.print("checksum is ");
Serial.println(rx.getChecksum(), HEX);
Serial.print("packet length is ");
Serial.println(rx.getPacketLength(), DEC);
for (int i = 0; i < rx.getDataLength(); i++) {
Serial.print("payload [");
Serial.print(i, DEC);
Serial.print("] is ");
Serial.println(rx.getData()[i], HEX);
}
for (int i = 0; i < xbee.getResponse().getFrameDataLength(); i++) {
Serial.print("frame data [");
Serial.print(i, DEC);
Serial.print("] is ");
Serial.println(xbee.getResponse().getFrameData()[i], HEX);
}
byte MSB = rx.getData()[1];
byte LSB = rx.getData()[0];
float tempRead = ((MSB << 8) | LSB); //using two's compliment
TemperatureSum = tempRead / 16;
xbee.send(atRequest);
}
if (xbee.getResponse().getApiId() == REMOTE_AT_COMMAND_RESPONSE) {
xbee.getResponse().getRemoteAtCommandResponse(atResponse);
// should be an AT command response
int j=0;
for (int i = 14; i < xbee.getResponse().getFrameDataLength(); i++,j++) {
// Serial.print("frame data [");
// Serial.print(i, DEC);
// Serial.print("] is ");
// Serial.println(xbee.getResponse().getFrameData()[i], HEX);
hexText[j]=xbee.getResponse().getFrameData()[i];
// Pour vérification
// Serial.print(hexText[j]);
}
}
lcd.setCursor(0,2); //line=2, x=0
// --------------------
lcd.print(" ");
lcd.setCursor(0,2); //line=2, x=0
lcd.print(hexText);
lcd.print(": ");
lcd.setCursor(11, 2);
printFloat(TemperatureSum, 1);
lcd.print(char(223));
lcd.print("C");
Serial.print(hexText);
Serial.print(TemperatureSum);
} else if (xbee.getResponse().isError()) {
lcd.setCursor(0,4);
// --------------------
lcd.print("Error code :");
lcd.setCursor(13,4);
lcd.print(xbee.getResponse().getErrorCode());
Serial.print("oh no!!! error code:");
Serial.println(xbee.getResponse().getErrorCode());
}
}