Go Down

Topic: Problema con millis() (Read 6990 times) previous topic - next topic

pippo72

Guarda che adesso il programma così com'è va a leggere il sensore collegato al pin A1 !!
ripeto:
Code: [Select]
// Pin analogico a cui è collegato il sensore IR,che gestisce la presenza del materiale PET:
       Dist.begin(A0);
 
   // Pin analogico a cui è collegato il sensore IR,il quale misura il riempimento del contenitore PET:
       Dist.begin(A1);

scritto così il secondo Dist.begin annulla il primo quindi la lettura che fai con il comando Dist.getDistanceCentimeter(); all'interno del void contaPET() vai a leggere il sensore collegato al pin A1.
fai questa prova: commenta il secondo Dist.begin
Code: [Select]
// Pin analogico a cui è collegato il sensore IR,che gestisce la presenza del materiale PET:
       Dist.begin(A0);
 
   // Pin analogico a cui è collegato il sensore IR,il quale misura il riempimento del contenitore PET:
    //   Dist.begin(A1);    // <====MODIFICA

e vedi se funziona.

Se si rileggiti bene quello che ho scritto nel mio post precedente.

ciao
pippo72

mooger

Funziona!!!!Quante cose nuove sto imparando!Non credevo che facendo cosi' si annullasse poi la lettura sul pin A0!Buono a sapersi!GRAZIE ANCORA!!!

Brado

Pippo72 mi ha rubato le parole dalla tastiera ... :)

mooger


Pippo72 mi ha rubato le parole dalla tastiera ... :)


Grazie a tutti e due!
Brado,stavo rileggendo i tuoi suggerimenti,in effeti,forse sarebbe meglio se quando si estrae la card all'improvviso,tutta l'operazione termini,e quindi anche il portello si chiudesse..in questo come potrei fare?

Brado

#34
Aug 06, 2014, 03:42 pm Last Edit: Aug 06, 2014, 03:48 pm by Brado Reason: 1
Io metterei dopo questo codice
Code: [Select]
while (stato <1)
                  {

il controllo di presenza della card.

Code: [Select]
if (!smartcard.IsCardPresent(1))
    stato=1;


Così facendo esci subito dal while e dovrebbe darti immediatamente operazione conclusa.

Brado

#35
Aug 06, 2014, 03:47 pm Last Edit: Aug 06, 2014, 03:59 pm by Brado Reason: 1
Mentre qui farei questa modifica:
Code: [Select]

void contaPET()
{
   Timer = millis();  // PARTE IL TIMER
    while((millis() - Timer) < Timeout) {   // Mentre t < timeout
       distance = Dist.getDistanceCentimeter(); // Acquisisci dati dal sensore
        if (distance>=7) { // Se la distanza e' maggiore di 7,non contare
           premuto = false;
         }
         if ((distance<7) && premuto == false) {  // Se la distanza e'minore di 7 comincia a contare
             Contatore ++;  // incrementa contatore
             Timer = millis();  // timer partito/resettato
             premuto = true;
             Serial.print("Contatore: ");
             Serial.println(Contatore);
         }
         if (!smartcard.IsCardPresent(1))         // Verifico presenza card     <<< Modifica proposta
             Timer = millis()+millis();           // Faccio scadere il timeout
      }
}



In entrambi i codici ho inserito !smartcard.IsCardPresent(1) , ma immagino che possa funzionare anche con smartcard.IsCardPresent(0) .

Ciao

mooger

Perfetto!Funziona,grazie ancora!


Go Up