Probleme resolu, il faut envoyer et recevoir dans le même format dans mon cas ASCII .
ces codes permettent de transmettre une temperature issue d'une sonde DALLAS DS 18B20.
A sa reception on affiche la temperature sur un Deuligne.
Voici du coup les codes qui fonctionnent
coté emetteur :
- Code: Tout sélectionner
#include <OneWire.h>
#include <DallasTemperature.h>
char chaine[15] = { '\0' };
#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
#include <VirtualWire.h>
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer;
void setup(void)
{
vw_setup(2000);
vw_set_tx_pin(3);
// start serial port
Serial.begin(9600);
Serial.println("Dallas Temperature IC Control Library Demo");
Serial.print("Locating devices...");
sensors.begin();
Serial.print("Found ");
Serial.print(sensors.getDeviceCount(), DEC);
Serial.println(" devices.");
Serial.print("Parasite power is: ");
if (sensors.isParasitePowerMode()) Serial.println("ON");
else Serial.println("OFF");
if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0");
Serial.print("Device 0 Address: ");
Serial.println();
sensors.setResolution(insideThermometer, 9);
Serial.print("Device 0 Resolution: ");
Serial.print(sensors.getResolution(insideThermometer), DEC);
Serial.println();
}
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
Serial.print("Temp C: ");
Serial.print(sensors.getTempC(deviceAddress));
//float tempC = sensors.getTempC(deviceAddress);
Serial.print(" Temp F: ");
Serial.print(sensors.getTempF(deviceAddress)); // Makes a second call to getTempC and then converts to Fahrenheit
Serial.print ("");
//Serial.print(" Temp F: ");
Serial.println ("");
char chaine[15] = { '\0' };
// const char chaine[15];
itoa( tempC, chaine, 10 );
vw_send((uint8_t *)chaine, strlen(chaine)+1);
delay(400);
vw_wait_tx(); // On attend que le message complet soit envoyé.
delay(1000); // Très important sinon cela peut brouiller d'autres appareils !
// vw_rx_stop();
}
void loop(void)
{
sensors.requestTemperatures(); // Send the command to get temperatures
printTemperature(insideThermometer); // Use a simple function to print out the data
}
// function to print a device address
void printAddress(DeviceAddress deviceAddress)
{
for (uint8_t i = 0; i < 8; i++)
{
if (deviceAddress[i] < 16) Serial.print("0");
Serial.print(deviceAddress[i], HEX);
//int tempC = sensors.getTempC(deviceAddress);
// char chaine[15] = { '\0' };
// // const char chaine[15];
// itoa( tempC, chaine, 10 );
// vw_send((uint8_t *)chaine, strlen(chaine)+1);
// delay(400);
// vw_wait_tx(); // On attend que le message complet soit envoyé.
// delay(2000); // Très important sinon cela peut brouiller d'autres appareils !
// vw_rx_stop();
}
}
code coté recepteur.
- Code: Tout sélectionner
#include <VirtualWire.h> // Vous devez télécharger et installer la librairie VirtualWire.h dans votre dossier "/libraries" !
#include <Wire.h>
#include <Deuligne.h>
// déclaration de l'objet lcd
Deuligne lcd = Deuligne();
void setup()
{
Wire.begin(); // initialisation bus I2C (obligatoire)
lcd.init(); // initialisation lcd (obligatoire)
lcd.clear(); // clear screen
Serial.begin(9600); // On initialise "le serial monitor", j'ai laissé 9600 bauds ici car c'est la valeur par défaut mais vous pouvez la modifier. Attention à bien mettre la même valeur dans votre Serial Monitor et dans votre programme.
vw_setup(2000); // Bits par seconde (vous pouvez le modifier mais cela modifiera la portée). Voir la documentation de la librairie VirtualWire.
vw_set_rx_pin(11); // C'est sur cette broche que l'on reliera les broches DATA du récepteur, vous pouvez changez de broche si vous le désirez.
vw_rx_start(); // On démarre le récepteur.
}
void loop()
{
// uint8_t buf[VW_MAX_MESSAGE_LEN];
// uint8_t buflen = VW_MAX_MESSAGE_LEN;
// if (vw_get_message(buf, &buflen)) // On test afin de savoir si un message est reçu.
{
int i;
// Un message est reçu.
//for (i = 0; i < buflen; i++)
{
// Serial.print(buf[i]); // On affiche le message lettre par lettre. Par exemple buf[4] sera égale à la 5ème lettre du mot envoyé (Snootlab donc "t") car on compte le zéro ici.
//lcd.print (buf[i]);
}
Serial.println(""); // On saute une ligne afin d'avoir plus de clarté.
delay(1000);
lcd.clear();
lcd.print("Temp :");
// lcd.print (buf[i]);
}
char chaine[15];
uint8_t buflen = 15;
vw_get_message((uint8_t*)chaine, &buflen);
//Serial.prinln( chaine );
int tempC;
tempC = atoi( chaine );
Serial.println( tempC );
// int tempC;
// uint8_t buflen = sizeof(tempC);
// if (vw_get_message((uint8_t*)&tempC, &buflen)) // Non-blocking
{
//int i;
// Message with a good checksum received, dump HEX
Serial.print("Got: ");
Serial.println(tempC, DEC);
Serial.println("");
lcd.print (tempC,DEC) ;
}
}
Merci pour les coups de mains car je m’égarais sur des chemins glacés.