11 liens privés
/**
- Exemple de code pour la bibliothèque VirtualWire – Client d'envoi de variable
*/
#include <VirtualWire.h>
#include <OneWire.h>
#include <avr/sleep.h>
#include <avr/wdt.h>
const byte BROCHE_ONEWIRE = 8;
OneWire ds(BROCHE_ONEWIRE);
unsigned long counter = 0;
enum DS18B20_RCODES {
READ_OK, // Lecture ok
NO_SENSOR_FOUND, // Pas de capteur
INVALID_ADDRESS, // Adresse reçue invalide
INVALID_SENSOR // Capteur invalide (pas un DS18B20)
};
// watchdog interrupt
ISR (WDT_vect)
{
wdt_disable(); // disable watchdog
} // end of WDT_vect
void setup() {
delay(2000);//le temps des tests
Serial.begin(9600);
// Initialisation de la bibliothèque VirtualWire
// Vous pouvez changez les broches RX/TX/PTT avant vw_setup() si nécessaire
vw_setup(2000);
Serial.println("Go !");
float valeur = 99.99;
vw_send((byte *) &valeur, sizeof(valeur)); // On envoie le message
vw_wait_tx(); // On attend la fin de l'envoi
}
void loop() {
counter ++;
if(counter >= 10){
counter = 0;
// Lit un nombre depuis le port série
float valeur;
if (getTemperature(&valeur, true) != READ_OK) {
Serial.println(F("Erreur de lecture du capteur"));
return;
}
Serial.println(valeur);
vw_send((byte *) &valeur, sizeof(valeur)); // On envoie le message
vw_wait_tx(); // On attend la fin de l'envoi
}
// disable ADC
ADCSRA = 0;
// clear various "reset" flags
MCUSR = 0;
// allow changes, disable reset
WDTCSR = bit (WDCE) | bit (WDE);
// set interrupt mode and an interval
WDTCSR = bit (WDIE) | bit (WDP3) | bit (WDP0); // set WDIE, and 8 seconds delay
wdt_reset(); // pat the dog
set_sleep_mode (SLEEP_MODE_PWR_DOWN);
noInterrupts (); // timed sequence follows
sleep_enable();
// turn off brown-out enable in software
MCUCR = bit (BODS) | bit (BODSE);
MCUCR = bit (BODS);
interrupts (); // guarantees next instruction executed
sleep_cpu ();
// cancel sleep as a precaution
sleep_disable();
}
/**
-
Fonction de lecture de la température via un capteur DS18B20.
/
byte getTemperature(float temperature, byte reset_search) {
byte data[9], addr[8];
// data[] : Données lues depuis le scratchpad
// addr[] : Adresse du module 1-Wire détecté/ Reset le bus 1-Wire ci nécessaire (requis pour la lecture du premier capteur) /
if (reset_search) {
ds.reset_search();
}/ Recherche le prochain capteur 1-Wire disponible /
if (!ds.search(addr)) {
// Pas de capteur
return NO_SENSOR_FOUND;
}/ Vérifie que l'adresse a été correctement reçue /
if (OneWire::crc8(addr, 7) != addr[7]) {
// Adresse invalide
return INVALID_ADDRESS;
}/ Vérifie qu'il s'agit bien d'un DS18B20 /
if (addr[0] != 0x28) {
// Mauvais type de capteur
return INVALID_SENSOR;
}/ Reset le bus 1-Wire et sélectionne le capteur /
ds.reset();
ds.select(addr);/ Lance une prise de mesure de température et attend la fin de la mesure /
ds.write(0x44, 1);
delay(800);/ Reset le bus 1-Wire, sélectionne le capteur et envoie une demande de lecture du scratchpad /
ds.reset();
ds.select(addr);
ds.write(0xBE);/ Lecture du scratchpad /
for (byte i = 0; i < 9; i++) {
data[i] = ds.read();
}/ Calcul de la température en degré Celsius /
temperature = (int16_t) ((data[1] << 8) | data[0]) 0.0625;// Pas d'erreur
return READ_OK;
}
manuel
simulateur de circuit
protcole de communication maison en 433
sleep mode arduino
radiateur
notice nonin
port série rs232
pour flasher le ui flow et pourvoir se servir de vscod eensuite?