problema interrupt - pluviometro [RISOLTO]

Buongiorno a tutti e buon natale !

Ho un problema che mi tira pazzo da settimane… non so più come fare

Io ho un pluviometro a bascula, che in base a dove si trova la bascula (DESTRA-SINISTRA) manda 0 - 12 V.

Quindi io con arduino UNO tramite interrupt controllo quando avviene la basculata (CHANGE). Protetto da un antirimbalzo software.

Ho realizzato un partitore con due resistenza da 20k e 13k per portare a 0-5V la tensione.

il problema è che provando il programma generale, in cui sono presenti la lettura di un ds18b20 e un altro interrupt per anemometro, mi segna ad ogni loop 2 basculate, inesistenti perchè tutto fermo provo su breadbord solamente mandando tensione al partitore.

Ho verificato che se la tensione è presente, non segna finte basculate. Nel momento in cui la tensione è 0, e ci rimane , mi segna sempre 2 basculate ad ogni loop. RIpeto che è impossibile che siano rimbalzi, perchè avvengono anche dopo ore che ho tolto la tensione, sempre

Ho però provato a fare un programma solo per il pluviometro, e questo funziona senza problemi.

non so se è un problema hardware o software

allego il programma generale e il programma pluviometro

main.ino (6.79 KB)

pluviometro.ino (797 Bytes)

ho visto anche che se dal programma main tolgo la parte di codice dove interroga il sensore di temperatura, tutto funziona correttamente senza finte basculate !

sapete perchè ??

Non ha nessun senso rilevare il segnale del pluviometro via interrupt. Inoltre (senza guardare il Tuo Sketch) fare un antidebounce via software in una funzione interrupt é sbagliato. È anche sbagliato mettere un seriale.print in una funzione di interrupt. La blocca per troppo tempo.

Togli tutti i delay, fai la temporizazione con millis nel loop().

velocita = (331.4 + 0.62)* temp; // calcolo la velocità del suono in base alla temperatura attuale //

La formula sará sbagliata. la velocitá non cambia propozionalmente con la temperatura. forse hai messo sbaglata la parentesi e la velocitá cambia solo 0,62m/s ogni grado.

cosa é attacato al pin 10?

Ciao Uwe

Quindi passo 1- togliere i delay, le serial print negli interrupt

Si nella formula è sbagliata la parentesi .. Grazie !! Comunque non è importante perché il sensore a infrarossi non lo sto ancora usando

Sul pin 10 un led per segnalare che arduino gira

Non serve per il controllo del pluviometro un programmazione di interrupt.

Il loop() é abbastanza veloce da rilevare la comutazione del pluviometro anche se piove secci d' acqua. Togli l' interrupt per questo. Caio Uwe

E leggo lo stato del pin con digital read ?

Si. guarda l'esempio --> http://arduino.cc/en/Tutorial/ButtonStateChange

ok grazie mille

Altri consigli ??

Secondo te è giusto il calcolo della velocità del vento ? sapendo che l anemometro a 10Km/h chiude il contatto 4 volte in 1 Secondo

ho constatato che il problema è il ds18b20

se lo scollego non ce nessun problema con gli interrupt.. appena lo collego si

sapete se ci sono conflitti ?

Le ultime librerie per il 18B20 sono --> http://download.milesburton.com/Arduino/MaximTemperature/DallasTemperature_372Beta.zip --> http://www.pjrc.com/teensy/arduino_libraries/OneWire.zip

Uso già quelle..

Ho risolto.. erano dei problemi di disturbo.. ho dovuto usare cavo schermato!