Salut, enfaite je possède un projet cette année. Une station météo, ayant une grosse partie ARDUINO je voulais juste savoir qu'est-ce qu'il donne ce code ? Je les essayer quelques erreurs de simplicités mais sinon je voulais voir ce qu'il peut donner en réduction de code il prends pas mal de place ...
Sinon, vu la consommation d'une carte arduino je voulais me renseigner sur un autre support
Code C :
#include <LiquidCrystal.h> //On inclue les différentes librairies
#include <Wire.h>
#include "Adafruit-BMP085.h"
#include "DHT.h"
#include "RTClib.h"
#define DHTPIN 2 //on définit le pin du DHT
#define DHTTYPE DHT22 //on définit le type du DHT peut aussi etre DHT11 ou DHT21
#define REDPIN 5 //On définit le Pin pour les LED rouge
#define GREENPIN 6 //On définit le Pin pour les LED bleu
#define BLUEPIN 3 //On définit le Pin pour les LED verte
#define FADESPEED 50 //On définit un indicateur de temps pour la rotation des couleurs et le rafraissichement des données
LiquidCrystal lcd(7, 8, 9, 10, 11, 12); //On définie les Pins pour l'écran LCD
const int lumiPin = A0; //On définit le Pin de la photorésistance
int lumiValue = 0; //On définit la variable qui va retenir la valeur de la photorésistance
int lumilcdValue = 0; //On définit la variable qui affichera le % de luminosité sur le LCD
Adafruit_BMP085 bmp;//on démarre les variables de lesibraries
DHT dht(DHTPIN, DHTTYPE);
RTC_DS1307 RTC;
void setup() {
Serial.begin(19200); //on demarre une communication serial
if (!bmp.begin()) {
Serial.println("BMP085 ERREUR !!!");//on vérifie si le bmp085 fonctionne
while (1) {}
}
Serial.println("DHT21 TEST");//on vérifie si le DHT fonctionne
dht.begin();
Wire.begin();
RTC.begin();
if (! RTC.isrunning()) {
Serial.println("RTC ERREUR !!!");
// la ligne suivante définit l'heure du RTC à celle ou le code a été compilé
RTC.adjust(DateTime(__DATE__, __TIME__));
}
//On définie les Pins en mode sortie pour le ruban LED
pinMode(REDPIN, OUTPUT);
pinMode(GREENPIN, OUTPUT);
pinMode(BLUEPIN, OUTPUT);
lcd.begin(20, 4); //On définit le nombre de caractères par ligne et le nombre de lignes du LCD
}
void loop() {
lumiValue = analogRead(lumiPin); //On lit la valeur de la photorésistance
/* Pour utiliser la valeur de la photorésistance, il faut faire un peu de math.
La photorésistance fournit un nombre à 10-bits.
Mais analogWrite() utilise des chiffres à 8-bits.
Il faut diviser la valeur par 10 pour ramener celle-ci à un % */
lumilcdValue = lumiValue/10;
int alti = bmp.readAltitude();//on ne garde que la partie entière de la valeur pour l'altittude sa gagne toujours deux caracteres sur le lcd...
int h = dht.readHumidity(); //on definit h pour stocker la valeur d'humidité
int t = dht.readTemperature();//on definit t pour stocker la valeur de temperature
if (isnan(t) || isnan(h))
{
Serial.println("DHT ERREUR !!!");//on revérifie le dht
} else {
Serial.print("Humidite: ");//on imprime les valeurs dans le serial si le lcd ne marche pas cela permet de débeguer...
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");
}
Serial.print("Temperature = ");// a partir d'ici ce sont les données du bmp085
Serial.print(bmp.readTemperature());
Serial.println(" *C");
Serial.print("Pression = ");
Serial.print(bmp.readPressure());
Serial.println(" Pa");
Serial.print("Altittude = ");
Serial.print(bmp.readAltitude());
Serial.println(" metres");
Serial.print("Real altitude = ");
Serial.print(bmp.readAltitude(101500));
Serial.println(" metres");
Serial.println();
DateTime now = RTC.now();// a partir d'icic ce sont les données du DS1307
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.print("Depuis Minuit 1/1/1970 = ");
Serial.print(now.unixtime());
Serial.print("s = ");
Serial.print(now.unixtime() / 86400L);
Serial.println("d");
// calcul d'une date dans 7jours
DateTime future (now.unixtime() + 7 * 86400L + 30);
Serial.print("Maintenant + 7 Jours + 30 Secondes: ");
Serial.print(future.year(), DEC);
Serial.print('/');
Serial.print(future.month(), DEC);
Serial.print('/');
Serial.print(future.day(), DEC);
Serial.print(' ');
Serial.print(future.hour(), DEC);
Serial.print(':');
Serial.print(future.minute(), DEC);
Serial.print(':');
Serial.print(future.second(), DEC);
Serial.println();
Serial.println();
// on passe à l'affichage sur le lcd
lcd.print(now.day(), DEC); //On affiche le jour
lcd.print('/');
lcd.print(now.month(), DEC); //On affiche le mois
lcd.print('/');
lcd.print(now.year(), DEC); //On affiche l'annee
lcd.print(" "); //espace
lcd.print(now.hour(), DEC); //On affiche l'heure
lcd.print(':');
lcd.print(now.minute(), DEC); //On affiche les minutes
lcd.setCursor(0, 1); //On passe à la seconde ligne
lcd.print(bmp.readTemperature()); //On affiche notre moyenne de température
lcd.print("*C"); //On affiche l'unité de température
lcd.print(" "); //espace
lcd.print("%Humi:"); //On affiche le % d'humidité
lcd.print(h); //On affiche notre moyenne de température
lcd.setCursor(0, 2); //On passe à la troisieme ligne
lcd.print("Pression: "); //On affiche la pression atmosphérique
lcd.print(bmp.readPressure()); //on lit la valeur de pression du BMP085
lcd.print("Pa"); //On affiche l'unité de pression : Pascal
lcd.setCursor(0, 3); //On passe à la quatrième ligne
lcd.print("Alti:"); //On affiche l'altitude
lcd.print(alti); //On lit la valeur depuis le BMP085
lcd.print("m"); //On affiche l'unité d'altitude : mètres
lcd.print(" "); //espace
lcd.print("%Lumi:"); //On affiche le % de lumiere
lcd.print(lumilcdValue); //On affiche la valeur calculé plus haut
delay(6000);// on patiente ^^
//maintenant on pilote les led
int r, g, b; //on définit les variables pour nos couleurs
//transformation bleue à violet
for (r = 0; r < 256; r++){analogWrite(REDPIN, r) ; delay(FADESPEED);}
//transformation violet à rouge
for (b = 255; b > 0; b--){analogWrite(BLUEPIN, b) ; delay(FADESPEED);}
//transformation rouge à jaune
for (g = 0; g < 256; g++){analogWrite(GREENPIN, g) ; delay(FADESPEED);}
//transformation jaune à vert
for (r = 255; r > 0; r--){analogWrite(REDPIN, r) ; delay(FADESPEED);}
//transformation vert à cyan
for (b = 0; b < 256; b++){analogWrite(BLUEPIN, b); delay(FADESPEED);}
//transformation cyan à bleue
for (g = 255; g > 0; g--){analogWrite(GREENPIN, g) ; delay(FADESPEED);}
lcd.clear(); // on nettoie le lcd pour les prochaines données
}
Voilà répondez si ya des erreurs ou des remarques
EDIT les librairies :
Adafruit-BMP085-Library
DHT-sensor-library
RTClib (DS1307)
Projet : ( maquette exemple trouver )