``Bonjour tout le monde.
J'ai un petit problème avec une fonction que j'ai écrite en utilisant les lib DallasTemperature et OneWire
J'ai un module arduino pro, sur lequel je veux plugger entre 1 et 10 capteurs dallas18b20.
Je voulais pouvoir envoyer par RF la température de chaque capteur en envoyant aussi leur adresse.
L'exemple permettant de montrer comment récupérer cette adresse n'est pas utilisable en l'état, en effet, il affiche sur le Serial octet par octet l'adresse. J'ai donc voulu faire une fonction qui converti cette adresse en char*.
L'appel à cette fonction est actuellement commentée, car lorsque je l'utilise, mon programme m'affiche bien l'adresse des capteurs, mais n'arrive plus à lire la température, et affiche "-127" pour tous les capteurs.
La fonction est tout en bas, et son appel dans le while à la fin de la fonction setup()
J'ai donc commenté la lecture de l'adresse et mis un "" dans sprintf en attendant
#include <VirtualWire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <stdio.h>
#include <string.h>
#define ONE_WIRE_BUS 2
#define TEMPERATURE_PRECISION 12
#define NBMAXCAPTEURSTEMP 10
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress thermometres[NBMAXCAPTEURSTEMP];
int nbCapteurs = 0;
char txt[50];
void setup(){
Serial.begin(9600);
vw_set_tx_pin(3);
vw_setup(2000);
Serial.print("Recherche capteurs de temperature : ");
sensors.begin();
if(sensors.getDeviceCount() > NBMAXCAPTEURSTEMP)
nbCapteurs = NBMAXCAPTEURSTEMP;
else
nbCapteurs = sensors.getDeviceCount();
sprintf(txt, "%d capteurs\n", nbCapteurs);
Serial.print(txt);
delay(1000);
sprintf(txt, "Mode parasite actif : %s\n", sensors.isParasitePowerMode() ? "Oui" :"Non");
Serial.print(txt);
//delay(2000);
oneWire.reset_search();
int c = 0;
if(!oneWire.search(thermometres[c]))
Serial.println("Aucun capteurs de temperature !");
oneWire.reset_search();
while(oneWire.search(thermometres[c]) && c < nbCapteurs)
{
sensors.setResolution(thermometres[c], TEMPERATURE_PRECISION);
//char *tadr = retAddress(thermometres[c]); //
int tres = sensors.getResolution(thermometres[c]);
sprintf(txt, "Capteur %d -> adresse : %s, resolution : %d", c, "", tres);
Serial.println(txt);
c++;
}
delay(100);
}
void loop(){
char msg[50];
char tmp[10] = "0";
sensors.requestTemperatures();
for(int c = 0; c < nbCapteurs; c++)
{
float t = sensors.getTempC(thermometres[c]);
dtostrf(t, 4, 2, tmp);
sprintf(msg, "%d,%s",c, tmp);
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
Serial.println(msg);
delay(200);
}
Serial.println("--------");
delay(1000);
}
// adresse en char*
char *retAddress(DeviceAddress deviceAddress)
{
char *addresseStr = (char*)malloc(24 * sizeof(char));
sprintf(addresseStr, "%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\0", deviceAddress[0], deviceAddress[1], deviceAddress[2], deviceAddress[3], deviceAddress[4], deviceAddress[5], deviceAddress[6], deviceAddress[7]);
return addresseStr;
}