interrupt anomali con la BOX

Ciao a tutti,

Sto implementando da poco con arduino, ho scritto il seguente semplicissimo programma:

void setup () {

//porta seriale
Serial.begin (9600);

//Creo un gestore di interrupt e lo associo al pin
attachInterrupt(0, GestInt, RISING);

}

void loop () {

Serial.println (".");
delay (5000);

}

void GestInt()
{
Serial.println ("1");
}

Sto utilizzando arduinoMega2560 all'interno della seguente BOX: http://store.arduino.cc/it/index.php?main_page=product_info&cPath=11_15&products_id=79

Al momento non ho "attaccato" nulla al pin di interrupt.
Il problema è il seguente:
Maneggiando la BOX mentre all'interno è in esecuzione arduino col programma sopra citato, viene lanciata la funzione GestInt() autonomamente, a causa presuppongo di una corrente generata al contatto con le dita sulla BOX di arduino.
Anche maneggiando Arduino senza BOX accade questo, e con maggior evidenza.

E' possibile che i pin di interrupt di arduino siano sensibili a un amperaggio cosi' basso generato dal tatto ? e che basti toccare il silicio di arduino o addirittura la BOX per attivare un interrupt?
Se cosi' fosse, come posso risolvere il problema almeno che non avvenga con la box ?
dovrei riceve degli impulsi di durata 250ms, e ad ogni impulso laciare la relativa funzione.
aggiungo che Ho lo stesso problema anche utilizzando ArduinoUno.

Ringrazio tanto in aticipo per l'aiuto... !

  1. sicuro che serva un interrupt per fare questa cosa?

  2. le istruzioni di lettura e scrittura della seriale non vanno mai messe in una routine di interrupt perchè a loro volta ne fanno uso.

  3. su un pin di arduino lasciato flottante puoi leggere tensioni variabili quindi dovresti mettere una resistenza di pulldown( o pullup a seconda della logica che adotti), per tenere il pin al potenziale desiderato e non randomico.

grazie mille della risposta,

come potrei fare senza utilizzare gli interrupt ?

io ho un impulsto di max 30 V, di durata 250 ms, con candenza random che devo ricevre da arduino.

Per ridurre la tensione ho utilizzato un componente L7805CV, dando cosi' in ingresso su arduno 5V.

appena ricevuto l'impulso dovrei fare inviare a arduino via seriale una stringa !

con queste condizioni quale soluzione migliore potrei utilizzare ?

grazie mille ancora in anticipo !

con un semplice digital read :slight_smile:

Non puoi utilizzare un 7805, quei circuiti integrati servono per regolare un'alimentazione, non un segnale. Sono molto lenti all'accensione ed inoltre sempre all'accensione hanno un transitorio dove l'uscita oscilla per un po' e poi si stabilizza. Non sono fatti per fare quello che vuoi fare te. Io userei un buon vecchio partitore resistivo.

grazie a entrambi per la risposta...

Avevo fatto anche il calco della ressitenza del partitore che mi serviva, ma poi mi hanno consigliato di utilizzare L7805, forse perche' non ho bisogno di precisione, e gli impulsi non sono moto ravvicinati...(max 30 sec) ?

hai ragione al massimo come hai detto tu janos utilizzo il buon vecchio partore !

con la readdigital() ottengo lo stesso discorso BrainB: al tatto ogni tanto parte automaticamente una lettura di stato HIGH, (i pin digital sembrano essere sensiblissimi anche al tatto della box esterna).

quindi ho risolto con una semplice lettura analogica;
sapendo che il segnale ALTO dura massimo 250 ms e ha cadenza massima di 60sec :

state = analogRead(sigPin);

if (state > 800){
Serial.println ("1"); //// 1 litro erogato
delay(3000);

}

800 dovrebbe essere sui 4 Volt vero ? facendo la proporzione:

1024/5 = 800/x => X = 800*5/1024 = 3,9 V

in questo modo al tatto non capito mai dentro all'IF essendo la tensione ricercata abbastanza alta e pare che sto risolvendo il problema.

Potrebbe andare bene la segente logica ?
potrei provare comunque col componente L7805 visto che non ho bisogno di precisione, o abbandono anche l'idea di provare ?

grazie mille in anticipo...

il 7805 per questo uso è proprio negatvo :slight_smile:
Invece vedrei meglio la strada partitore +pulldown e lettura digitale o se vuoi anche analogica con soglia.

Ciao, grazie ancora per la risposta...

ho quindi optato per l'utilizzo del partitore... e lettura analogica con soglia !

cosa intendi per " +pulldown" ?

allego lo schema fatto con Frit.

la resistenza da 100 ohm è data come nota all'interno del generatore di impulsi.

Potrebbe andare come piccolo schema elettrico ?

grazie mille in anticipo ancora !