Go Down

Topic: Finito lavatrice. guardate il codice (Read 694 times) previous topic - next topic

cerozziello88

salve a tutti, qlkuno saprà dai miei post precedenti ke stavo cercando di automatizzare una lavatrice qst è il risultato, se possibile mi date qlke consiglio logico-strutturale per migliorarlo?
lo switch case è usato per la selezione di 6 diversi programmi di lavaggio.
grazie
Code: [Select]

//Uscite comandate con relè
#define giradx 11      
#define girasx 12
#define carico 13
#define scarico 10
#define centrifuga 9
#define acquacalda 8
//ENTRATE DIGITALI
#define sveglia 3
#define livelloalto 7
#define livellobasso 6
#define okacquacalda 5
#define programma1 14
#define programma2 15
#define programma3 16
#define programma4 17
#define programma5 18
#define programma6 19
int statolivellobasso=0;
int statolivelloalto=0;
int permessocentrifuga=0;
int permessoacquacalda=0;
int selettore=0;
int statosveglia=0;
void setup() {      
///DEFINIZIONE NOMI DEI PIN  
  attachInterrupt(1, blink, FALLING);
 pinMode(giradx, OUTPUT);
 pinMode(girasx, OUTPUT);
 pinMode(carico, OUTPUT);
 pinMode(scarico, OUTPUT);
 pinMode(centrifuga, OUTPUT);
 pinMode(acquacalda, OUTPUT);
 pinMode(livellobasso, INPUT);
 pinMode(livelloalto, INPUT);
 pinMode(okacquacalda,INPUT);
 pinMode(programma1,INPUT);
 pinMode(programma2,INPUT);
 pinMode(programma3,INPUT);
pinMode(programma4,INPUT);
pinMode(programma5,INPUT);
pinMode(programma6,INPUT);
}
void loop() {
 int programmaselezionato=0;
 selettore=0;
 programmaselezionato =      selezioneprogramma();

 // questo swich-case mi permette la selezione del programma da dare, ma se con break esco dallo switch ritorno alla funzione che seleziona il programma da fare
   switch (programmaselezionato) {    
     
//PRELAVAGGIO//
      case 1:
   do {
     digitalWrite(carico, HIGH);
     statolivellobasso=digitalRead(livellobasso);
   }  
   while (statolivellobasso==  HIGH);
   digitalWrite(carico, LOW);
   lavaggio_un_minuto();
   do {
     digitalWrite(acquacalda, HIGH);
     permessoacquacalda=digitalRead(okacquacalda);
   }  
   while (permessoacquacalda ==  HIGH);
   digitalWrite(acquacalda,LOW);
   for (int contatorelavaggi=0; contatorelavaggi <= 1; contatorelavaggi++){
     lavaggio_un_minuto();
   }
   do {
     digitalWrite(acquacalda, HIGH);
     permessoacquacalda=digitalRead(okacquacalda);
   }  
   while (permessoacquacalda ==  HIGH);
   digitalWrite(acquacalda,LOW);
       for (int contatorelavaggi=0; contatorelavaggi <= 1; contatorelavaggi++){
     lavaggio_un_minuto();
   }
   do {
     digitalWrite(acquacalda, HIGH);
     permessoacquacalda=digitalRead(okacquacalda);
   }  
   while (permessoacquacalda ==  HIGH);
   digitalWrite(acquacalda,LOW);
       for (int contatorelavaggi=0; contatorelavaggi <= 1; contatorelavaggi++){
     lavaggio_un_minuto();
   }
   do {
     digitalWrite(acquacalda, HIGH);
     permessoacquacalda=digitalRead(okacquacalda);
   }  
   while (permessoacquacalda ==  HIGH);
   digitalWrite(acquacalda,LOW);
   for (int contatorelavaggi=0; contatorelavaggi <= 1; contatorelavaggi++){
     lavaggio_un_minuto();
   }
   scaricoacqua();
   digitalWrite (scarico,LOW);
   delay(10000);
   break;
//PROGRAMMA 2//
     case 2:
   do {
     digitalWrite(carico, HIGH);
     statolivellobasso=digitalRead(livellobasso);
   }  
   while (statolivellobasso==  HIGH);
   digitalWrite(carico, LOW);
   lavaggio_un_minuto();
   do {
     digitalWrite(acquacalda, HIGH);
     permessoacquacalda=digitalRead(okacquacalda);
   }  
   while (permessoacquacalda ==  HIGH);
   digitalWrite(acquacalda,LOW);
   for (int contatorelavaggi=0; contatorelavaggi <= 1; contatorelavaggi++){
     lavaggio_un_minuto();
   }
       do {
     digitalWrite(acquacalda, HIGH);
     permessoacquacalda=digitalRead(okacquacalda);
   }  
   while (permessoacquacalda ==  HIGH);
   digitalWrite(acquacalda,LOW);
   for (int contatorelavaggi=0; contatorelavaggi <= 1; contatorelavaggi++){
     lavaggio_un_minuto();
   }
           do {
     digitalWrite(acquacalda, HIGH);
     permessoacquacalda=digitalRead(okacquacalda);
   }  
   while (permessoacquacalda ==  HIGH);
   digitalWrite(acquacalda,LOW);
   for (int contatorelavaggi=0; contatorelavaggi <= 1; contatorelavaggi++){
     lavaggio_un_minuto();
   }
              do {
     digitalWrite(acquacalda, HIGH);
     permessoacquacalda=digitalRead(okacquacalda);
   }  
   while (permessoacquacalda ==  HIGH);
   digitalWrite(acquacalda,LOW);
   for (int contatorelavaggi=0; contatorelavaggi <= 1; contatorelavaggi++){
     lavaggio_un_minuto();
   }

           do {
     digitalWrite(acquacalda, HIGH);
     permessoacquacalda=digitalRead(okacquacalda);
   }  
   while (permessoacquacalda ==  HIGH);
   digitalWrite(acquacalda,LOW);
   for (int contatorelavaggi=0; contatorelavaggi <= 1; contatorelavaggi++){
     lavaggio_un_minuto();
   }
   
           do {
     digitalWrite(acquacalda, HIGH);
     permessoacquacalda=digitalRead(okacquacalda);
   }  
   while (permessoacquacalda ==  HIGH);
   digitalWrite(acquacalda,LOW);
   for (int contatorelavaggi=0; contatorelavaggi <= 1; contatorelavaggi++){
     lavaggio_un_minuto();
   }
           do {
     digitalWrite(acquacalda, HIGH);
     permessoacquacalda=digitalRead(okacquacalda);
   }  
   while (permessoacquacalda ==  HIGH);
   digitalWrite(acquacalda,LOW);
   for (int contatorelavaggi=0; contatorelavaggi <= 1; contatorelavaggi++){
     lavaggio_un_minuto();
   }
scaricoacqua();
centrifuga_un_minuto();
   do {
     digitalWrite(carico, HIGH);
     statolivelloalto=digitalRead(livelloalto);
   }  
   while (statolivelloalto==  HIGH);
   digitalWrite(carico, LOW);
   for (int contatorelavaggi=0; contatorelavaggi <= 2; contatorelavaggi++){
     lavaggio_un_minuto();
   }
    scaricoacqua();
centrifuga_un_minuto();
   do {
     digitalWrite(carico, HIGH);
     statolivelloalto=digitalRead(livelloalto);
   }  
   while (statolivelloalto==  HIGH);
   digitalWrite(carico, LOW);
   for (int contatorelavaggi=0; contatorelavaggi <= 2; contatorelavaggi++){
     lavaggio_un_minuto();
   }
    scaricoacqua();
centrifuga_un_minuto();
   do {
     digitalWrite(carico, HIGH);
     statolivelloalto=digitalRead(livelloalto);
   }  
   while (statolivelloalto==  HIGH);
   digitalWrite(carico, LOW);
   for (int contatorelavaggi=0; contatorelavaggi <= 2; contatorelavaggi++){
     lavaggio_un_minuto();
   }
    scaricoacqua();
    centrifuga_quattro_minuti();
    delay(10000);
    break;


cerozziello88

Code: [Select]
[code]case 3:
do {
      digitalWrite(carico, HIGH);
      statolivellobasso=digitalRead(livellobasso);
    } 
    while (statolivellobasso==  HIGH);
    digitalWrite(carico, LOW);
    lavaggio_un_minuto();
    do {
      digitalWrite(acquacalda, HIGH);
      permessoacquacalda=digitalRead(okacquacalda);
    } 
    while (permessoacquacalda ==  HIGH);
    digitalWrite(acquacalda,LOW);
    for (int contatorelavaggi=0; contatorelavaggi <= 1; contatorelavaggi++){
      lavaggio_un_minuto();
    }
        do {
      digitalWrite(acquacalda, HIGH);
      permessoacquacalda=digitalRead(okacquacalda);
    } 
    while (permessoacquacalda ==  HIGH);
    digitalWrite(acquacalda,LOW);
    for (int contatorelavaggi=0; contatorelavaggi <= 1; contatorelavaggi++){
      lavaggio_un_minuto();
    }
            do {
      digitalWrite(acquacalda, HIGH);
      permessoacquacalda=digitalRead(okacquacalda);
    } 
    while (permessoacquacalda ==  HIGH);
    digitalWrite(acquacalda,LOW);
    for (int contatorelavaggi=0; contatorelavaggi <= 1; contatorelavaggi++){
      lavaggio_un_minuto();
    }
             
scaricoacqua();
centrifuga_un_minuto();
    do {
      digitalWrite(carico, HIGH);
      statolivelloalto=digitalRead(livelloalto);
    } 
    while (statolivelloalto==  HIGH);
    digitalWrite(carico, LOW);
    for (int contatorelavaggi=0; contatorelavaggi <= 2; contatorelavaggi++){
      lavaggio_un_minuto();
    }
     scaricoacqua();
centrifuga_un_minuto();
    do {
      digitalWrite(carico, HIGH);
      statolivelloalto=digitalRead(livelloalto);
    } 
    while (statolivelloalto==  HIGH);
    digitalWrite(carico, LOW);
    for (int contatorelavaggi=0; contatorelavaggi <= 2; contatorelavaggi++){
      lavaggio_un_minuto();
    }
     scaricoacqua();
     centrifuga_quattro_minuti();
delay(10000);
break;
////
case 4:
    do {
      digitalWrite(carico, HIGH);
      statolivellobasso=digitalRead(livellobasso);
    } 
    while (statolivellobasso==  HIGH);
    digitalWrite(carico, LOW);
    lavaggio_un_minuto();
    do {
      digitalWrite(acquacalda, HIGH);
      permessoacquacalda=digitalRead(okacquacalda);
    } 
    while (permessoacquacalda ==  HIGH);
    digitalWrite(acquacalda,LOW);
    for (int contatorelavaggi=0; contatorelavaggi <= 1; contatorelavaggi++){
      lavaggiolana();
    }
    do {
      digitalWrite(acquacalda, HIGH);
      permessoacquacalda=digitalRead(okacquacalda);
    } 
    while (permessoacquacalda ==  HIGH);
    digitalWrite(acquacalda,LOW);
    for (int contatorelavaggi=0; contatorelavaggi <= 1; contatorelavaggi++){
      lavaggiolana();
    }
scaricolana();
centrifuga_lana_un_minuto();

    do {
      digitalWrite(carico, HIGH);
      statolivelloalto=digitalRead(livelloalto);
    } 
    while (statolivelloalto==  HIGH);
    digitalWrite(carico, LOW);
lavaggiolana();
scaricolana();
centrifuga_lana_otto_minuti();
delay(10000);
break;

     
     
     /////////////////////////////////LAVAGGIO 4////////////////////////////////////////////////////////
  case 5:
    do {
      digitalWrite(carico, HIGH);
      statolivellobasso=digitalRead(livellobasso);
    } 
    while (statolivellobasso==  HIGH);
    digitalWrite(carico, LOW);
    lavaggio_un_minuto();
    do {
      digitalWrite(acquacalda, HIGH);
      permessoacquacalda=digitalRead(okacquacalda);
    } 
    while (permessoacquacalda ==  HIGH);
    digitalWrite(acquacalda,LOW);
    for (int contatorelavaggi=0; contatorelavaggi <= 1; contatorelavaggi++){
      lavaggiolana();
    }
    do {
      digitalWrite(acquacalda, HIGH);
      permessoacquacalda=digitalRead(okacquacalda);
    } 
    while (permessoacquacalda ==  HIGH);
    digitalWrite(acquacalda,LOW);
    for (int contatorelavaggi=0; contatorelavaggi <= 1; contatorelavaggi++){
      lavaggiolana();
    }
scaricolana();
centrifuga_lana_un_minuto();
    do {
      digitalWrite(carico, HIGH);
      statolivelloalto=digitalRead(livelloalto);
    } 
    while (statolivelloalto==  HIGH);
    digitalWrite(carico, LOW);
lavaggiolana();
scaricolana();
centrifuga_lana_un_minuto();
    do {
      digitalWrite(carico, HIGH);
      statolivelloalto=digitalRead(livelloalto);
    } 
    while (statolivelloalto==  HIGH);
    digitalWrite(carico, LOW);
lavaggiolana();
scaricolana();
centrifuga_lana_otto_minuti();
delay(10000);
break;

case 6:
scaricoacqua_un_minuto();
centrifuga_quattro_minuti();
delay(10000);
break;
}
}
[/code]

cerozziello88

per fare livellobasso, livelloalto e acquacalda, ho passato il filo che va all'arduino su quel pin per i  2 pressostati  e per il termostato, come se fosse un interruttore con la relativa resistenza di pull.

mromani

#3
Feb 13, 2012, 12:16 am Last Edit: Feb 14, 2012, 12:04 pm by mromani Reason: 1
Ciao, ho scorso velocemente il tuo codice, e i miei 2 cent di consigli "logico-strutturali" si concretizzano in:
- il codice è poco leggibile, premi CTRL-T nell'IDE per migliorare l'indentazione
- lo switch/case è decisamente troppo "lungo" IMHO: raggruppa le istruzioni di ogni case in una funzione. Alla fine il risultato è una cosa simile a questa:

Code: [Select]

switch ( programma ) {
    case 1:
        programma1();
        break;

    case 2:
        programma2();
        break;
}


In questo modo la struttura del programma principale è più chiara.

Infine è prassi scrivere i nomi delle costanti in maiuscolo, per distinguerle dalle variaibli.

cerozziello88

Grazie gentilissimo per i consigli!! comincerò da queste modifiche.
i  do while vanno bene?

Go Up