Show Posts
Pages: [1]
1  International / Software / Re: Acquisizione tempi on: February 15, 2013, 10:00:59 am
Si, a forza di modificarlo ho sbagliato.  smiley-sweat
i tempi li divido solo una volta.
2  International / Software / Re: Acquisizione tempi on: February 15, 2013, 09:50:30 am
Si, effettivamente è un po' disordinato.
Chiedo scusa ma mi accorgo di non capire quello che mi suggerisci.
Non riesco a capire come salvare un determinato valore di tempo. Di fatto, nel mio codice sottraggo sempre il valore iniziale di tempo = millis().
Ad esempio T3 sarà sempre uguale a 0 in quanto:
T3 = (millis()-tempo)/1000, con tempo = millis().
Se millis() di T3 anzichè iniziare il conteggio all'accensione iniziasse solo quando entro nel ciclo sarebbe tutto a posto.

3  International / Software / Acquisizione tempi on: February 15, 2013, 06:45:49 am
Salve a tutti,
Sono un neofita di arduino e nonostante sia uno studente di ingegneria elettrica mi trovo qui a chiedere il vostro aiuto.
Non conosco bene i linguaggi di programmazione e i loro termini perciò mi scuso anticipatamente se alla fine il tutto dovesse rivelarsi una sciocchezza.
Il problema è il seguente:
Ho un recipiente con 4 sensori, posti ad altezze diverse, per controllare il livello del liquido che fluisce all'interno del contenitore.
Dai sensori ricevo un segnale analogico.
Appena il liquido raggiunge la sonda 4(la più bassa) inizia il conteggio dei tempi.
Appena il liquido arriverà alla sonda 3 dovrò memorizzare il tempo che è trascorso dal punto 4 al punto 3.
Così sarà per tutte le sonde, sempre riferendosi al punto di partenza 4(4-2 e 4-1).
Arrivato al punto 1 il liquido smetterà di fluire nel contenitore e i tempi rilevati dovranno essere memorizzati e scritti su un lcd.
Riporto di seguito la mia soluzione, so che è sbagliata per un mio errore di comprensione della funzione millis(), in quanto pensavo che essa iniziasse il conteggio solamente dopo che si fosse entrati nel ciclo in cui è posta (se così fosse non avrei nessun problema).


Code:
void loop() {
  
 tempo = millis();
 
 const int BOTTON_Start_State = digitalRead (Start);
 const int BOTTON_Print_State = digitalRead (Print);
 
 if (digitalRead (Start) == HIGH && enable_print == 0);{  // Verifico il pulsante di start  
    digitalWrite (Ele_V, HIGH);                           // Attivo l'elettrovalvola e il liquido fluisce nel contenitore
    enable_time = 1;
    enable_print = 0;
 }
  if (digitalRead (Print) == HIGH && enable_time == 0 );{  // Verifico il comando di print-stop
    digitalWrite (Ele_V, LOW);  
    enable_time = 0;
    enable_print = 1;
 }


      
 while ((analogRead (sonda4) >= 1000) && (enable_time == 1)){ // Ciclo raccolta tempi
        
        T3 = (millis()-tempo)/1000;
        
        if (digitalRead (Print) == HIGH);{
        enable_time = 0;
        }
        
         if (analogRead (sonda3) >= 900){
           T2 = (millis()-T3)/1000;
          
           if (analogRead (sonda2) >= 900){
             T1 = (millis()-T2)/1000;;
            
             if (analogRead (sonda1) >= 900){
               digitalWrite (Ele_V, LOW);
               enable_time = 0;
      
              }
            
          }
      
      }
  
  lcd.setCursor(4, 1);
  lcd.print("T1 =");
  lcd.setCursor(10, 1);
  lcd.print(T1/1000);
  
  lcd.setCursor(0, 2);
  lcd.print("T2 =");
  lcd.setCursor(6, 2);
  lcd.print(T2/1000);
        
  lcd.setCursor(0, 3);
  lcd.print("T3 =");
  lcd.setCursor(6, 3);
  lcd.print(T3/1000);      
 }

Ringrazio fin da ora tutti quelli che avranno la pazienza di aiutarmi.

Damiano

Edit by mod: Per favore includi il codice usando l'apposito tag code (pulsante "#")
 
Pages: [1]