Pages: [1] 2   Go Down
Author Topic: Accendere pin dopo tot secondi di un evento  (Read 964 times)
0 Members and 1 Guest are viewing this topic.
Roma (RM)
Offline Offline
God Member
*****
Karma: 3
Posts: 634
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Avrei la necessità di fare quanto segue:

leggo lo stato alto su un pin (x) se non ne segue un altro dopo tot secondi, sempre sul pin x, attivare un altro pin (y).

Qualche suggerimento?
Logged


Torino
Offline Offline
God Member
*****
Karma: 3
Posts: 766
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho fatto una cosa simile utilizzando due cicli while dai un'occhiata al mio topic .
Logged

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3287
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho fatto una cosa simile utilizzando due cicli while dai un'occhiata al mio topic .
se ci mettevi un link magari  smiley-roll
http://arduino.cc/forum/index.php/topic,128862.0.html
Logged

no comment

Torino
Offline Offline
God Member
*****
Karma: 3
Posts: 766
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hai ragione ma gli ho risposto appena ha fatto la domanda ed i due topic erano uno sotto l'altro  smiley-wink
Logged

Roma (RM)
Offline Offline
God Member
*****
Karma: 3
Posts: 634
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Si infatti l'avevo trovato.
Grazie lo stesso pablos
Logged


Roma (RM)
Offline Offline
God Member
*****
Karma: 3
Posts: 634
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ci ho provato ma non ci sono riuscito o non ho capito come fare dal topic che mi avete segnalato o mi sono spiegato male io.
Ricapitolo quello che devo fare.

Impulso sul pin x
Allo spegnimento del primo impulso controllo che non arrivi un altro impulso sul pin x in s millisecondi (da poter regolare)
Se arriva all'interno dell'intervallo s attivo pin y altrimenti ricomincio da capo.
Se arriva un altro impulso sul pin x quando il pin y è attivo disattivo pin y.

Spero di essermi spiegato.
« Last Edit: October 28, 2012, 02:04:30 pm by erpomata » Logged


Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma l'hai guardato l'esempio che ti hanno linkato?

Un ciclo while imbriglia l'esecuzione in un loop da cui se ne può uscire solo al verificarsi di un evento.
Tu vuoi controllare che arrivi un impulso, attivare un contatore e poi controllare prima del timeout che non arrivi un altro impulso. Se entrambe le condizioni si verificano, attivi un altro pin.
Come vedi sono 2 condizioni annidate quindi un while dentro l'altro. E' ciò che ha fatto tonid nel suo codice.
http://arduino.cc/forum/index.php/topic,128862.msg969566.html#msg969566
Logged


Roma (RM)
Offline Offline
God Member
*****
Karma: 3
Posts: 634
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sisi ma non sono riuscito ad impiegarlo per il mio scopo.
Ritenterò.
Logged


Roma (RM)
Offline Offline
God Member
*****
Karma: 3
Posts: 634
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Intanto questo è il codice che ho scritto.
Se qualcuno ha voglia di darci un'occhiata....  smiley-razz

Code:
byte x = 8;
byte y = 13;
byte xVal = LOW;
byte yVal = LOW;

boolean xAccesa = false;
boolean appo = false;
unsigned long interval=200000;
unsigned long tempoSpenta;

void setup() 
{
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  Serial.println("Pronti");

  pinMode(x, INPUT);
  pinMode(y, OUTPUT);
  digitalWrite(y, LOW); // Spengo il led L sulla scheda
}

void loop()

  xVal = digitalRead(x);  // Leggo lo stato del pin x, finchè è off non faccio nulla.
  xAccesa=xVal;

  // Quando è on blocco l'esecuzione del loop finchè non diventa off
  while(xAccesa){
    yVal=LOW;
    digitalWrite(y, yVal);

    xVal = digitalRead(x);  // read input value
    xAccesa=xVal;
    appo=true;
    Serial.println("qui");
  }
 
  // Uscito dal loop prendo il tempo di uscita
  tempoSpenta=millis();

  if ( appo ){
// Se è entrato nel while precedente vuol dire che c'è stato un impulso
    appo=false;

// Attendo per vedere se c'è un secondo impulso
    while(millis()<(tempoSpenta + interval)){
      xVal = digitalRead(x);  // read input value
      xAccesa=xVal;
      Serial.println("qui1");
      if ( xAccesa ){
        yVal=LOW;
        break;
      }
      else{
        yVal=HIGH;
      }
    }
  }

  digitalWrite(y, yVal);
}
Logged


Roma (RM)
Offline Offline
God Member
*****
Karma: 3
Posts: 634
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Nessuno?  smiley-cry
Logged


Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Intanto questo è il codice che ho scritto.
Se qualcuno ha voglia di darci un'occhiata....  smiley-razz
La domanda è: ti funziona? Fa cioè quello che volevi tu?
Logged


Roma (RM)
Offline Offline
God Member
*****
Karma: 3
Posts: 634
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

E no altrimenti....

Sisi ma non sono riuscito ad impiegarlo per il mio scopo.
Ritenterò.
Logged


Roma (RM)
Offline Offline
God Member
*****
Karma: 3
Posts: 634
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok non mi volete aiutare.
 smiley-cry
Logged


Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok non mi volete aiutare.
 smiley-cry
Forse confondi il forum con il corso di informatica  smiley-razz
Qui nessuno ti insegna a programmare, devi farlo da solo. Se hai un problema puoi pubblicare il tuo sketch, dire cosa fa e cosa invece dovrebbe fare.

Ti sono stati dati dei link, ti è stato dato un codice corrispondente a quello che devi fare tu, se non ho capito male, e poi ti sono state date delle dritte.
Hai pubblicato un tuo programma e chiedi se va bene. Alla mia domanda se il codice funziona, hai risposto citando un tuo post in cui dici che non ti funziona. E cos'è che non funziona? Siamo al cane che si morde la coda.
Logged


Roma (RM)
Offline Offline
God Member
*****
Karma: 3
Posts: 634
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Non chiedo un corso, ma una idea per la soluzione.
Ho letto il topic che mi avete suggerito, però, secondo me non centra nulla col mio problema.

Logged


Pages: [1] 2   Go Up
Jump to: