Go Down

Topic: une question ?  (Read 479 times) previous topic - next topic

Polua

que pensez-vous vous de mon code ?
Code: [Select]
#include <DS3232RTC.h>
#include <Streaming.h>
#include <Time.h>
#include <Wire.h>

int led3 = 3;
int led4 = 4;
int led5 = 5;
int led6 = 6;
int b = 11;
int v = 10;
int r = 9;
boolean bp = 0;
boolean bp2= 0;
boolean bp3 = 0;
boolean bp4 = 0;
boolean etat1 = 0;
boolean etat2 = 0 ;
char hours = 0;
float minutes = 0;
char hoursd = 9;
float hourstt = 0;
float pourcent = 0;
long temps;
boolean e = 0;
boolean e2 = 0;
char rgb = 0;
boolean etatalarme1 = 0;


void setup()
{
   pinMode(1, OUTPUT);
   pinMode(led3, OUTPUT);
   pinMode(led4, OUTPUT);
   pinMode(led5, OUTPUT);
   pinMode(led6, OUTPUT);
   pinMode(r, OUTPUT);
   pinMode(b, OUTPUT);
   pinMode(v, OUTPUT);
   pinMode(A0 , INPUT);
   pinMode(A1 , INPUT);
   pinMode(A2, INPUT);
   pinMode(A3 , INPUT);
   temps = millis();
   Serial.begin(9600);
   
}
void loop ()
{

    bp = digitalRead(A0);
    bp2 = digitalRead(A1);
    bp3 = digitalRead(A2);
    bp4 = digitalRead(A3);

if(bp4 == HIGH)
{
  Serial.println("alarme declenchée");
  RTC.setAlarm(ALM2_MATCH_HOURS,00, 00, 22, dowSunday);
  RTC.setAlarm(ALM1_MATCH_HOURS,00, 30, 9, dowSunday);
  delay(1000);
}
if( RTC.alarm(ALARM_2) && etat1 == 0)
{
  analogWrite(1, 210);
  delay(1000);
  analogWrite(1, 0);
  delay(500);
  analogWrite(1, 210);
  delay(1000);
  analogWrite(1, 0);
  analogWrite(r, 175);
  analogWrite(v, 30);
  digitalWrite(led3, HIGH);
  digitalWrite(led4, HIGH);
}
  if ( RTC.alarm(ALARM_1) && etatalarme1 == 0)
  {
    analogWrite(1,210);
    analogWrite(b, 255);
    digitalWrite(led5, HIGH);
    digitalWrite(led6, HIGH);
    delay(1000);
    analogWrite(b, 0);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    analogWrite(1,0);
    delay(1000);
    analogWrite(1,210);
    analogWrite(b, 255);
    digitalWrite(led5, HIGH);
    digitalWrite(led6, HIGH);
    delay(1000);
    analogWrite(b, 0);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    analogWrite(1,0);
    delay(1000);
    analogWrite(1,210);
    analogWrite(b, 255);
    digitalWrite(led5, HIGH);
    digitalWrite(led6, HIGH);
    delay(1000);
    analogWrite(b, 0);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    analogWrite(1,0);
    analogWrite(b, 255);
    digitalWrite(led5, HIGH);
    digitalWrite(led6, HIGH);
    etatalarme1 = 1;
}
if(bp == HIGH)
{
    e2 = 1;
    etat1 = 1;
    analogWrite(b, 255);
    Serial.println("minuterie lancé");
    delay(100);
    analogWrite(b, 0);
    analogWrite(r, 0);
    analogWrite(v, 0);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
}
if(etat1 == 1 && etat2 == 0)
{
  if(bp2 == HIGH)
{
  etat2 = 1;
  etat1 = 0;
  analogWrite(b, 255);
  delay(100);
  analogWrite(b, 0);
  Serial.println("boucle cassé");
  Serial.println("bp2 appuyé ");
}
 Serial.print("millis");
 Serial.print(millis());
 Serial.print("     minutes");
 Serial.print(minutes);
 Serial.print("           hours");
 Serial.println(hours);
 Serial.print("temps:");
 Serial.println(temps);
 
if((millis()-temps)>60000)
{
  minutes++;
  temps = millis();
}
}

  if(etat2 == 1)
 {
   e = 1;
   if(bp == HIGH)
   {
     etat2 = 0;
     etat1 = 1;
   }
   if(e == 1)
   {
   Serial.println("calcul en cour");
   minutes /=60;
   Serial.println(minutes);
   pourcent = minutes;
   pourcent *= 100;
   pourcent /= hoursd;
   Serial.print("pourcent:");
   Serial.println(pourcent);
   e = 0;
   etat2 = 0;
   etatalarme1 = 0;
   }
 }
if(bp3 == HIGH)
{
  analogWrite(b, 0);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
      if(pourcent >= 100)
  {
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    digitalWrite(led5, HIGH);
    digitalWrite(led6, HIGH);
    rgb = 1;
  }
 
    if(pourcent <= 100)
  {
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    digitalWrite(led5, HIGH);
    digitalWrite(led6, HIGH);
    rgb = 1;
  }
  if(pourcent <= 75)
  {
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    digitalWrite(led5, HIGH);
    digitalWrite(led6, LOW);
    rgb = 2;
  }
    if(pourcent <= 50)
  {
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    rgb = 3;
  }
     if(pourcent <= 25)
      {
    digitalWrite(led3, HIGH);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    rgb = 4;
  }
  switch (rgb) {
   case 1:
      analogWrite(b, 255);
      analogWrite(v, 30);
      rgb = 0;
      break;
   case 2:
       analogWrite(r, 150);
       analogWrite(v, 30);
       rgb = 0;
      break;
   case 3:
    analogWrite(r, 200);
    analogWrite(v, 30); 
    rgb = 0;
      break;
   case 4:
    analogWrite(r, 255);
    rgb = 0;
      break;
   default:
     
      break;
  }

  delay(5000);
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);
  digitalWrite(led5, LOW);
  digitalWrite(led6, LOW);
  digitalWrite(r, LOW);
  digitalWrite(v, LOW);
  digitalWrite(b, LOW);
 }

}

Super_Cinci

il est beau. une autre question?

En fait, je ne vois pas trop ce que tu attends de nous... S'il fonctionne, c'est ce qui compte. et comme je ne sais pas à quoi il sert, je ne peux en dire plus...

Polua

désolé je voulais vous demander si vous en voyez une utilité ou si on peut l'améliorer ?

fdufnews

#3
Oct 24, 2015, 03:04 pm Last Edit: Oct 24, 2015, 03:08 pm by fdufnews
Pour l'améliration je dirais:
  • Essayer de se passer des delay() qui bloquent l'exécution de certaines parties du programme. Mais après coup c'est toujours délicat car cela casse la logique du système
  • Laisser dans loop() la logique du séquencement et déporter dans des fonctions le code qui est actuellement dans les if et les case.  Cela améliore la compréhension du code et ses modifications/adaptations éventuelles. Dans la mesure du possible, il faut toujours essayer de limiter la taille des blocs de code à une vingtaine de lignes. Comme ça, on visualise le bloc complet à l'écran et on apréhende mieux sont déroulement.

Polua

merci beaucoup et des améliorations au niveau des fonctions (par exempe y rajouter des fonctions...)

Go Up