Cette page fournit une interface de navigation pour trouver toutes les valeurs d’une propriété et une page donnée. D’autres interfaces de recherche disponibles incluent la recherche de propriété, et le constructeur de requête ask.
1 // librairies pour le BME
2 #include
3 #include "DFRobot_CCS811.h"
4 #include
5 #include "ssd1306.h"
6 #include "FastLED.h"
7 #include "DFRobot_CCS811.h"
8 #include
9 //ici le nombre total de leds
10 #define NUM_LEDS 12
11 // ici la pin pour les leds
12 #define DATA_PIN 6
13 // déclaration d'un tableau pour les leds
14 CRGB leds[NUM_LEDS];
15 DFRobot_CCS811 CCS811;
16 Servo ServoCO2;
17 Servo ServoTVOC;
18
19 const int POTAR = A0; // broche du potar
20 const int LED = 9; // broche de la LED
21 int valPOTAR = 0; //RAZ valeur
22
23 int angle=120;
24 int angle2=0;
25
26 BME280I2C::Settings settings(
27 BME280::OSR_X1,
28 BME280::OSR_X1,
29 BME280::OSR_X1,
30 BME280::Mode_Forced,
31 BME280::StandbyTime_1000ms,
32 BME280::Filter_Off,
33 BME280::SpiEnable_False,
34 0x77 // I2C address. I2C specific.
35 );
36
37 BME280I2C bme(settings);
38
39 /* Ces tableaux de caractères serviront UNIQUEMENT pour l'affichage à l'écran.
40 * Il faudra afficher ces variables et non les "floats" déclarées pour le capteur,
41 * l'écran ne reconnaissant que des chaînes de caractère
42 */
43
44 char tempC[9];
45 char humC[10];
46 char presC[11];
47
48 void setup()
49 {
50 Serial.begin(9600);
51 ServoCO2.attach(5);
52 ServoTVOC.attach(3);
53
54 // on vérifie que le capteur COE2/TVOC est branché
55 while(CCS811.begin() != 0){
56 Serial.println("failed to init chip, please check if the chip connection is fine");
57 delay(1000);
58 }
59
60 // déclaration entrée et sortie de Potar et LED. Lecture en enregistrement dans la variable valPOTAR de la valeur analog du Potar
61
62 pinMode(POTAR, INPUT);
63 pinMode (LED, OUTPUT);
64 valPOTAR = analogRead (POTAR);
65
66 // tout ce blabla sert uniquement à vérifier si un capteur est présent et bien branché
67
68 while(!Serial) {} // Wait
69
70 Wire.begin();
71
72 while(!bme.begin())
73 {
74 Serial.println("Could not find BME280 sensor!");
75 delay(1000);
76 }
77
78 // bme.chipID(); // Deprecated. See chipModel().
79 switch(bme.chipModel())
80 {
81 case BME280::ChipModel_BME280:
82 Serial.println("Found BME280 sensor! Success.");
83 break;
84 case BME280::ChipModel_BMP280:
85 Serial.println("Found BMP280 sensor! No Humidity available.");
86 break;
87 default:
88 Serial.println("Found UNKNOWN sensor! Error!");
89 }
90
91 // on lance l'écran et on le colore de noir
92
93 ssd1306_128x64_i2c_init();
94 ssd1306_fillScreen(0x00);
95 // on lance la typo
96 ssd1306_setFixedFont(ssd1306xled_font6x8);
97
98 FastLED.addLeds<WS2811, DATA_PIN, GRB>(leds, NUM_LEDS);
99 // on peut régler ici la luminosité : 0-255
100 LEDS.setBrightness(50);
101
102 }
103
104 void loop()
105
106 {
107
108 analogRead (A0);
109 valPOTAR = analogRead (POTAR);
110 analogWrite (9, valPOTAR/4);
111 // On déclare 3 variables : température, humidité, pression
112 float temp(NAN), hum(NAN), pres(NAN);
113
114 if(CCS811.checkDataReady() == true){
115 Serial.print("CO2: ");
116 Serial.print(CCS811.getCO2PPM());
117 Serial.print("ppm, TVOC: ");
118 Serial.print(CCS811.getTVOCPPB());
119 Serial.println("ppb");
120 delay(1000);
121
122 } else {
123 Serial.println("Data is not ready!");
124 }
125
126
127 // Déclenchement du capteur
128 BME280::TempUnit tempUnit(BME280::TempUnit_Celsius);
129 BME280::PresUnit presUnit(BME280::PresUnit_hPa);
130 bme.read(pres, temp, hum, tempUnit, presUnit);
131
132 // ces lignes servent à convertir les valeurs "float" du capteur en "char" destinées à l'écran
133 // (utile uniquement pour votre code final)
134 dtostrf (temp,5,1,tempC);
135 dtostrf (hum,5,1,humC);
136 dtostrf (pres,5,2,presC);
137
138 // on imprime les valeurs sur le moniteur série
139
140 if(CCS811.checkDataReady() == true){
141 Serial.print("CO2: ");
142 Serial.print(CCS811.getCO2PPM());
143 Serial.print("ppm, TVOC: ");
144 Serial.print(CCS811.getTVOCPPB());
145 Serial.println("ppb");
146
147 } else {
148 Serial.println("Data is not ready!");
149 }
150 /*!
151 * @brief Set baseline
152 * @param get from getBaseline.ino
153 */
154 CCS811.writeBaseLine(0x447B);
155 //delay cannot be less than measurement cycle
156 delay(1000);
157
158 // Première ligne, normal
159
160 ssd1306_printFixed (0, 8, "Temp:", STYLE_NORMAL);
161 ssd1306_printFixed(56, 8, tempC , STYLE_BOLD);
162 ssd1306_printFixed (96, 8, "C", STYLE_NORMAL);
163 ssd1306_printFixed(0, 16,"RH: ", STYLE_NORMAL);
164 ssd1306_printFixed(56, 16, humC , STYLE_BOLD);
165 ssd1306_printFixed(96, 16,"%", STYLE_NORMAL);
166 ssd1306_printFixed(0, 24, "Pres: ", STYLE_NORMAL);
167 ssd1306_printFixed(56, 24, presC , STYLE_BOLD);
168 ssd1306_printFixed(96, 24, "hPa" , STYLE_NORMAL);
169
170
171
172 int CO2;
173 CO2 = map (CCS811.getCO2PPM(),400,6000,0, 120);
174
175 for (int position=angle; position < CO2 ; position++) {
176 ServoCO2.write(position);
177 Serial.println(position);
178 angle = position;
179 delay(20);
180 }
181 for (int position=angle ; position > CO2 ; position--) {
182 ServoCO2.write(position);
183 Serial.println(position);
184 angle = position;
185 delay(20);
186 }
187
188 int TVOC;
189 TVOC = map (CCS811.getTVOCPPB(),8000,0,0, 120);
190
191 for (int position=angle2; position < TVOC ; position++) {
192 ServoTVOC.write(position);
193 Serial.println(position);
194 angle2 = position;
195 delay(20);
196 }
197 for (int position=angle2 ; position > TVOC ; position--) {
198 ServoTVOC.write(position);
199 Serial.println(position);
200 angle2 = position;
201 delay(20);
202 }
203
204
205
206 if (hum > 40 && hum <50)
207 {
208 //Allumage rotatif des Leds 0 à 5 en bleu suivant valeur de délais
209
210 for( int i = 0; i < 12; i++){
211 leds[i] = CRGB::Green;
212 FastLED.show();
213 delay (60);
214 }
215 for( int i = 0; i < 12; i++){
216 leds[i] = CRGB::Black;
217 FastLED.show();
218 delay (20);
219 }
220 }
221 else {
222 //Allumage rotatif des Leds 6 à 11 en rouge suivant valeur de délais
223 for( int i = 0; i < 12; i++){
224 leds[i] = CRGB::Red;
225 FastLED.show();
226 delay (20);
227 }
228 }
229 // Extinction rotative des 12 Led suivant valeur de délais
230 for( int i = 0; i < 12; i++){
231 leds[i] = CRGB::Black;
232 FastLED.show();
233 delay (10);
234 }
235 }
Vous avez entré un nom de page invalide, avec un ou plusieurs caractères suivants :
< > @ ~ : * € £ ` + = / \ | [ ] { } ; ? #