Go Down

Topic: [Risolto] Blink con millis() lettura PPM con pulseIn() Ritardi e Problemi (Read 5590 times) previous topic - next topic

Testato


mettendo solo questo spezzone funziona tutto
mentre mettendo tutto il resto posso dire amen

questo vuol dire semplicemente che e' sbagliato il tuo codice completo, visto che questo spezzone, che e' quello al quale sei arrivato con i consigli datoti, ti funziona bene.
Non vedo come ti si possa correggere l'altra parte di codice se tu posti solo quella che funziona.
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

DriftBoy

se guardi qualche post prima c'è il codice completo e ben specificato....

Testato

scusa sono cotto, non sto' seguendo bene la cosa,
spero qualcuno un attimo piu' fresco dia uno sguardo al codice, visto che la parte difficile con millis ti funziona, il resto deve essere una sciocchezza, magari qualche misera parentesi graffa fuori posto  :)
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

DriftBoy

lo spero, io me lo sono riletto non sai quante volte e nella mia ignoranza mi sembra tutto ok
quasi quasi pensavo di riscrivere tutto cambiando qualche metodo bhu....

leo72

Visto che fai un sacco di pulseIn e che basi tutto il codice sui valore restituiti da essi, fai un po' di debug stampando sulla seriale ciò che leggi, per capire dove si infila il tuo codice.


leo72

Dopo la serie di PulseIn, stampa sulla seriale i valori di val1, val2, val3 ecc...
Poi metti anche dei Serial.print in ogni if per vedere se e dove il codice va e dove invece salta.
Es.:
if (millis()>50 && millis()<100) digitalWrite(led1,HIGH);

diventa
if (millis()>50 && millis()<100) {
  Serial.println("1");
  digitalWrite(led1,HIGH);
}

Testato

ho trovato un primo problema
Code: [Select]
int luciPosIn = 0;
int fariLungIn = 1;


questo non va bene, 0 e 1 devi lasciarli liberi per la seriale (usb-->pc)
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

leo72


ho trovato un primo problema
Code: [Select]
int luciPosIn = 0;
int fariLungIn = 1;


questo non va bene, 0 e 1 devi lasciarli liberi per la seriale (usb-->pc)

Difatti.
Ma basta che sposti le utente su 2 pin analogici.

DriftBoy

allora ho fatto una prova non so neanche io per quale motivo ma m'è venuta d'istino

eliminando questa parte di codice il lampeggio riprende a funzionare regolermente anche se poi ovviamente non va più tutto il resto

Code: [Select]
val1 = pulseIn(luciPosIn, HIGH);
 val2 = pulseIn(fariLungIn, HIGH);
 val3 = pulseIn(frecceIn, HIGH);
 val4 = pulseIn(lampIn, HIGH); //Possibile non necessario!!
 val5 = LOW;
 
 stopInS = digitalRead(stopIn);
 retroInS = digitalRead(retroIn);


questo spezzone è inserito nel void loop

quindi mi sorge la domanda, cosa è sbagliato? e se c'è un altro metodo

ovviamente le porte 0 e 1 le ho liberate

leo72

E' sbagliato il fatto che la pulseIn è una funzione che ferma l'esecuzione del codice in attesa del verificarsi dell'evento da misurare oppure per timeout della funzione stessa. Il timeout è impostato di default a 1 secondo, se non ricordo male, per cui con 4 pulseIn il tempo massimo di arresto dello sketch può, in teoria arrivare anche a 4 secondi se nessuno dei 4 segnali viene rilevato.

DriftBoy

quindi se rileva tutti i segnali pulseIn anche se non della misura dell'if tutto il programma dovrebbe andare senza problemi?

DriftBoy

allora collegati tutti i pulseIn e la situazione migliora molto, il lampeggio + o - va e cioè 1 led lampeggia come dovrebbe invece l'altro si perde i 50ms di pausa

alternativa a pulseIn che genera meno problemi?

leo72

Non so se la causa di tutti i tuoi problemi sia la pulseIn, io ti ho solo chiarito come la pulseIn interagisce col tuo codice.

Alternative alla pulseIn? Dipende.
La pulseIn serve a leggere l'intervallo di tempo che passa fra 2 fronti di un segnale. Ti serve proprio questa cosa?

DriftBoy

devo leggere un segnale ppm di una ricevente da modellismo ed il pulseIn è l'unico strumento che conosco per leggere suddetto segnale

Go Up