Pages: [1]   Go Down
Author Topic: Dubbi su PulseIn  (Read 508 times)
0 Members and 1 Guest are viewing this topic.
Milazzo (ME)
Offline Offline
Sr. Member
****
Karma: 0
Posts: 400
Chi cerca trova...
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve ragazzi,
dopo aver fatto molte ricerche sia su google che sul forum ho deciso di postare qui dato che non ho trovato nessun riscontro del mio problema!
Ho qualche dubbio su pulseIn, dovrebbe misurare la lunghezza di un impulso da 10 microsecondi a 3 minuti (http://arduino.cc/en/Reference/PulseIn).

Ecco uno sketch:

Code:
int pulsante = 2;

void setup(){
  pinMode(2, INPUT);
  digitalWrite(2, HIGH);
 
  Serial.begin(9600);
 
 Serial.println("Program start!\n\n");
  }
 
 
unsigned long valore = 0;

unsigned long tempo1 =0;
unsigned long tempo2 = 0;

void loop(){
 
  tempo1 = millis();
 valore = pulseIn(pulsante, LOW);
  tempo2 = millis();

Serial.print("\tValore: ");
Serial.print(valore);
Serial.print("\t Lettura: ");
Serial.print(digitalRead(pulsante));
Serial.print("\tTempo: ");
Serial.println((tempo1-tempo2));
  }

Ancora non ho capito se alla chiamata del comando pulseIn il codice si blocca e attende (per il tempo di timeout che di default dovrebbe essere un secondo) che il pin vada allo stato indicato, ed è questo il primo dubbio.
Aprendo il serial monitor ecco cosa ho in uscita:
Quote
Program start!


   Valore: 0    Lettura: 1   Tempo: 4294967063
   Valore: 0    Lettura: 1   Tempo: 4294967063
   Valore: 0    Lettura: 1   Tempo: 4294967063
   Valore: 0    Lettura: 1   Tempo: 4294967063
   Valore: 0    Lettura: 1   Tempo: 4294967063
   Valore: 0    Lettura: 0   Tempo: 4294967055
   Valore: 0    Lettura: 0   Tempo: 4294967087
   Valore: 0    Lettura: 0   Tempo: 4294967087
   Valore: 0    Lettura: 0   Tempo: 4294967087
   Valore: 0    Lettura: 0   Tempo: 4294967087
   Valore: 0    Lettura: 0   Tempo: 4294967087
   Valore: 0    Lettura: 1   Tempo: 4294967078
   Valore: 0    Lettura: 1   Tempo: 4294967063
   Valore: 0    Lettura: 1   Tempo: 4294967062
   Valore: 0    Lettura: 1   Tempo: 4294967063

Quel valore 42949670XX cosa indica? Perchè appare? Non dovrebbe essere un piccolo numero (in millisecondi).
Se non tocco il pulsante non dovrebbe valere circa 1000? (Un secondo di timeout).
Perchè se schiaccio il pulsante e dopo lo rilascio la variabile "valore" non cambia?
Logged

Xfox's Blog, Elettronica, informatica e tant'altro: http://www.xfox.it

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

1) pulseIn blocca il codice finché:
1.a) non è arrivato l'impulso (esce nel tempo preimpostato oppure nel tempo di default) o
1.b) è arrivato l'impulso

2) hai sbagliato a fare i calcoli. Devi mettere tempo2-tempo1: da quando in quando lo scorrere del tempo va indietro?  smiley-razz
Logged


Milazzo (ME)
Offline Offline
Sr. Member
****
Karma: 0
Posts: 400
Chi cerca trova...
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

1) pulseIn blocca il codice finché:
1.a) non è arrivato l'impulso (esce nel tempo preimpostato oppure nel tempo di default) o
1.b) è arrivato l'impulso

2) hai sbagliato a fare i calcoli. Devi mettere tempo2-tempo1: da quando in quando lo scorrere del tempo va indietro?  smiley-razz

Per il punto 2 sono davvero un gran deficente xD

Per il punto 1a/b ti posso dire con certezza che l'impulso non arriva, come puoi ben notare nella tabella che ho nel serial monitor premo il pulsante per un po ma appena lo rilascio non cambia il valore!


In più ora che ho sistemato il codice la differenza viene circa 230 millisecondi, ripeto non dovrebbe essere almeno un secondo?
Logged

Xfox's Blog, Elettronica, informatica e tant'altro: http://www.xfox.it

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

Se l'impulso arriva prima dello scadere del tempo preimpostato, la pulseIn esce quindi è normale che ti restituisca un tempo inferiore a quello programmato di attesa.

Logged


Milazzo (ME)
Offline Offline
Sr. Member
****
Karma: 0
Posts: 400
Chi cerca trova...
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Se l'impulso arriva prima dello scadere del tempo preimpostato, la pulseIn esce quindi è normale che ti restituisca un tempo inferiore a quello programmato di attesa.

Code:
timeout (optional): the number of microseconds to wait for the pulse to start; default is one second (unsigned long)

Se non lo tocco lui mi da sempre intorno ai 230 millisecondi e comunque mi da anche che il valore della variabile non cambia.
Logged

Xfox's Blog, Elettronica, informatica e tant'altro: http://www.xfox.it

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

Perché attivi la pull-up sul pin collegato al pulsante?

Code:
pinMode(2, INPUT);
digitalWrite(2, HIGH);
Logged


Milazzo (ME)
Offline Offline
Sr. Member
****
Karma: 0
Posts: 400
Chi cerca trova...
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Perché attivi la pull-up sul pin collegato al pulsante?

Code:
pinMode(2, INPUT);
digitalWrite(2, HIGH);

Perchè sul pulsante do valore logico 0, avrei potuto metterla esterna no?
Logged

Xfox's Blog, Elettronica, informatica e tant'altro: http://www.xfox.it

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 138
Posts: 9887
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Leggi questo topic, in particolare il mio ultimo post, il bug è presente anche nella 0023.
Logged

Milazzo (ME)
Offline Offline
Sr. Member
****
Karma: 0
Posts: 400
Chi cerca trova...
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Leggi questo topic, in particolare il mio ultimo post, il bug è presente anche nella 0023.


Uso 1.0
Logged

Xfox's Blog, Elettronica, informatica e tant'altro: http://www.xfox.it

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 138
Posts: 9887
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Anche la 1.0 soffre dello stesso problema.


Logged

piacenza
Offline Offline
God Member
*****
Karma: 0
Posts: 708
prima della pazzia c'è la passione
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao
non vorrei portarti fuori strada, ma anche io ho avuto problemi con la durata restituita da pulsein(), uso la 0022, ho verificato con un generatore di onde quadre e i valori letti con pulsein() erano accettabili, mi sono quindi concentrato sul segnale rendendolo più pulito e adesso faccio delle letture decisamente accettabili

stefano
Logged


Pages: [1]   Go Up
Jump to: