Commit 77f5e2ad3ff051f8629b81013bbec705bada28db
1 parent
481d85f7
Modification de mainVeilleuse_auto() la fonction finale réalisant tout
Showing
1 changed file
with
119 additions
and
20 deletions
Show diff stats
progArduino/principal/principal.ino
... | ... | @@ -100,6 +100,7 @@ void couleur(int R, int G, int B) |
100 | 100 | strip.show(); |
101 | 101 | } |
102 | 102 | |
103 | + | |
103 | 104 | /* |
104 | 105 | // fait avec application |
105 | 106 | void choix_couleur() |
... | ... | @@ -252,8 +253,6 @@ void mouvement() |
252 | 253 | } |
253 | 254 | |
254 | 255 | |
255 | -//-------------------------------------------------------------------------------------------------------------------------------------------FONCTIONS PRINCIPALES | |
256 | - | |
257 | 256 | |
258 | 257 | //fonction regroupant l'utilisation de la led de manière automatique et du capteur de mouvement. |
259 | 258 | //on veut l'utilisation du capteur (soit réalisation de mouvement) uniquement quand la led est allumée |
... | ... | @@ -283,17 +282,18 @@ void automatique() |
283 | 282 | else |
284 | 283 | { |
285 | 284 | //Monitoring |
286 | - couleur(255,255,255); | |
287 | - | |
285 | + couleur(255,255,255); | |
288 | 286 | |
287 | + | |
289 | 288 | while(i<=5) |
290 | 289 | { |
291 | 290 | luminosite = analogRead(CAPTEUR); |
292 | 291 | |
293 | 292 | if(luminosite < seuil) |
294 | 293 | { |
295 | - couleur(255,255,255); | |
296 | - | |
294 | + couleur(255,255,255); | |
295 | + | |
296 | + | |
297 | 297 | //DETECTION D'UN MOUVEMENT |
298 | 298 | if(digitalRead(pirPin)==HIGH) |
299 | 299 | { |
... | ... | @@ -350,8 +350,10 @@ void automatique() |
350 | 350 | |
351 | 351 | } |
352 | 352 | |
353 | - | |
354 | - | |
353 | + | |
354 | + | |
355 | + | |
356 | +//-------------------------------------------------------------------------------------------------------------------------------------------FONCTIONS PRINCIPALES | |
355 | 357 | |
356 | 358 | |
357 | 359 | |
... | ... | @@ -359,31 +361,131 @@ void automatique() |
359 | 361 | //---------------------------------------------------------------------------------------------------------------------------------mainveilleuse() |
360 | 362 | |
361 | 363 | //fonction du programme principal (à copier plus tard dans la LOOP() |
362 | -void mainVeilleuse() | |
364 | +//elle permet l'utilisation de la veilleuse de manière automatique selon la position de l'interrupteur, sinon c'est l'application qui gere le contrôle | |
365 | +//Elle est constituée de la fusion des fonctions secondaires: lumiere_auto(), mouvement() et automatique() | |
366 | +void mainVeilleuse_auto() | |
363 | 367 | { |
364 | 368 | etatBouton = digitalRead(pinInter); //Rappel :pinInter = 9 |
365 | - | |
369 | + | |
370 | + //MODE AUTOMATIQUE | |
366 | 371 | //si la veilleuse est allumé et interrupteur = LOW on utilise le mode automatique. |
367 | 372 | while (etatBouton == LOW) //test si le bouton a un niveau logique HAUT |
368 | 373 | { |
369 | 374 | delay(1000); |
370 | 375 | |
371 | - etatBouton = digitalRead(pinInter); //Rappel :pinInter = 9 | |
372 | - automatique(); | |
376 | + etatBouton = digitalRead(pinInter); | |
377 | + | |
378 | + if(etatBouton==LOW) | |
379 | + { | |
380 | + //On récupère la valeur du seuil | |
381 | + luminosite = analogRead(CAPTEUR); | |
382 | + int i=0; | |
383 | + | |
384 | + //Monitoring | |
385 | + Serial.print("Luminosite = "); | |
386 | + Serial.print(luminosite); | |
387 | + Serial.print(" / Seuil = "); | |
388 | + Serial.print(seuil); | |
389 | + | |
390 | + // on l'éteint | |
391 | + if (luminosite > seuil) | |
392 | + { | |
393 | + eteindre(); | |
394 | + Serial.println(" / LED OFF"); | |
395 | + } | |
396 | + | |
397 | + //Allumage de la led si la luminosité est inférieur au seuil (on l'allume dans la couleur blanche la base) | |
398 | + //enfant couché il doit dormir | |
399 | + else | |
400 | + { | |
401 | + //Monitoring | |
402 | + couleur(255,255,255); | |
403 | + | |
404 | + | |
405 | + while(i<=5 && etatBouton==LOW) | |
406 | + { | |
407 | + luminosite = analogRead(CAPTEUR); | |
408 | + | |
409 | + if(luminosite < seuil) | |
410 | + { | |
411 | + couleur(255,255,255); | |
412 | + | |
413 | + //DETECTION D'UN MOUVEMENT | |
414 | + if(digitalRead(pirPin)==HIGH) | |
415 | + { | |
416 | + digitalWrite(ledPin,HIGH); // la led modélise la déection d'un mouvement selon l'etat du capteur | |
417 | + if (lockLow) | |
418 | + { | |
419 | + //être sûr d'attendre la transistion à l'état LOW du capteur pour continuer : | |
420 | + lockLow= false; | |
421 | + delay(50); | |
422 | + } | |
423 | + takeLowTime = true; | |
424 | + } | |
425 | + | |
426 | + //FIN DE LA DETECTION | |
427 | + if(digitalRead(pirPin)==LOW) | |
428 | + { | |
429 | + digitalWrite(ledPin, LOW); | |
430 | + if(takeLowTime) | |
431 | + { | |
432 | + lowIn= millis(); // enregistrement du temps qu'il faut pour passer de HIGH à LOW pour le capteur | |
433 | + takeLowTime = false; // être sûr que cela se fait uniquement au debut du passage à LOW | |
434 | + } | |
435 | + // Ainsi si le capteur est LOW plus longtemps que la pause, on suppose qu'il n'y plus de mouvement | |
436 | + // if > être sûr que la suite s'execute seulement après un nouveau mouvement, donc nouvelle séquence de led allumée | |
437 | + if(!lockLow && millis()-lowIn > pause) | |
438 | + { | |
439 | + lockLow = true; | |
440 | + i++; | |
441 | + Serial.println(i); | |
442 | + | |
443 | + //CHILD AWAKE | |
444 | + if(i==5) | |
445 | + { | |
446 | + Serial.println("Sommeil agite !!!"); | |
447 | + MESSAGE = 1; | |
448 | + i=0; | |
449 | + } | |
450 | + delay(20); | |
451 | + } | |
452 | + } | |
453 | + | |
454 | + delay(500); | |
455 | + } | |
456 | + | |
457 | + else | |
458 | + { | |
459 | + eteindre(); | |
460 | + i=0; | |
461 | + } | |
462 | + | |
463 | + etatBouton = digitalRead(pinInter); //Rappel :pinInter = 9 | |
464 | + | |
465 | + } | |
466 | + delay(50); | |
467 | + } | |
468 | + } | |
469 | + else | |
470 | + { | |
471 | + eteindre(); | |
472 | + Serial.println("UTILISATION APPLICATION"); | |
473 | + } | |
373 | 474 | |
374 | 475 | etatBouton = digitalRead(pinInter); //Rappel :pinInter = 9 |
375 | 476 | } |
376 | - | |
477 | + | |
478 | + //MODE MANUEL (APPLICATION) | |
377 | 479 | //on est eteint avec l'interrupteur manuel on peut tjrs utiliser l'application pour gerer la veilleuse |
378 | 480 | eteindre(); //la LED reste éteinte |
379 | 481 | Serial.println("UTILISATION APPLICATION"); |
380 | 482 | |
381 | - delay(2000); | |
483 | + delay(1000); | |
382 | 484 | |
383 | 485 | |
384 | 486 | } |
385 | 487 | |
386 | - | |
488 | +//-------------------------------------------------------------------------------------------------------------------------------------------TESTS & LOOP == MAIN PROG | |
387 | 489 | |
388 | 490 | //fonction permettant de faire les tests des foncions secondaires |
389 | 491 | void tests() |
... | ... | @@ -400,14 +502,11 @@ void tests() |
400 | 502 | } |
401 | 503 | |
402 | 504 | |
403 | - | |
404 | - | |
405 | -//-------------------------------------------------------------------------------------------------------------------------------------------LOOP == MAIN PROG | |
406 | 505 | void loop() |
407 | 506 | |
408 | 507 | { |
409 | 508 | //tests(); |
410 | 509 | |
411 | - mainVeilleuse(); | |
412 | - delay(200); | |
510 | + mainVeilleuse_auto(); | |
511 | + delay(200); | |
413 | 512 | } | ... | ... |