rising falling

Ciao
ho dedicato un po’ di tempo alla ricerca di un metodo per avere dei segnali difup e difdown
quello che ho visto mi pare si appoggi ad interrupt

teoricamente io dovrei realizzare qualcosa del genere :
x = digitalread(2,rising)

leggendo un ingresso ma anche se riferito ad un flag interno

ossia x sara’ HIGH solo per un ciclo di scansione
si puo chiaramente costruire con una variabile di appoggio su 2 righe ma cercavo l’esistenza di in metodo piu immediato

Bruno L.

Che io sappia non è possibile, almeno direttamente. Io mi sono costruito una classe...

Se ho capito bene vorresti eseguire qualcosa solo al primo ciclo quando un entrata diventa H (o L) Io lo faccio con una variable

stato = 0;
...
if (digitalRead(pin)==1 && stato==0) // esegue la prima volta che avviene il cambio da L a H
{
 stato =1;
 // fa qualcosa
}
if (digitalRead(pin)==0 && stato==1) //resetta il flag di stato.
{
 stato =0;
}

per un passaggio da H a L si deve mettere un 0 al posto del 1 e viceversa nel

digitalRead(pin)==0

Ciao Uwe

Janos: Che io sappia non è possibile, almeno direttamente. Io mi sono costruito una classe...

Il tutto e' visibile da qualche parte ? Ti ringrazio

Bruno

uwefed: Se ho capito bene vorresti eseguire qualcosa solo al primo ciclo quando un entrata diventa H (o L)

Esattamente Quando scrivevo di due righe , intendevo quello che hai scritto tu

Usero' questo metodo senza tediarmi troppo la materia grigia

Ciao Bruno

Le variazioni di stato rising e falling sono previste nella libreria PinChangeInterrupt; usando un pin come interrupt è possibile attivare una sub nel momento in cui si verifica appunto un Rising, Falling, Low, Change, High, in base a cosa scrivi nella sintassi.

Il codice puó essere ancora iú compatto lasciando via i “==”:

stato = 0;
...
if (digitalRead(pin) && !stato) // esegue la prima volta che avviene il cambio da L a H
{
 stato =1;
 // fa qualcosa
}
if (!digitalRead(pin) && stato) //resetta il flag di stato.
{
 stato =0;
}

@ nenniti
Hai ragione. ma…
Un interrupt non complica il codice e limitante come pin utilizzabili?

Ciao Uwe

uwefed: @ nenniti Hai ragione. ma... Un interrupt non complica il codice e limitante come pin utilizzabili?

Ciao Uwe

Se usi un interrupt classico sì, sei limitato a quei piedini a cui sono agganciati gli interrupt 0, 1 e 2. Ma se usi un interrupt di cambio di stato (Pin Change Interrupt) con la relativa libreria, puoi monitorare tutti i piedini del micro che abbiano funzioni di I/O.

leo72:

uwefed:
@ menniti
Hai ragione. ma…
Un interrupt non complica il codice e limitante come pin utilizzabili?

Ciao Uwe

Se usi un interrupt classico sì, sei limitato a quei piedini a cui sono agganciati gli interrupt 0, 1 e 2. Ma se usi un interrupt di cambio di stato (Pin Change Interrupt) con la relativa libreria, puoi monitorare tutti i piedini del micro che abbiano funzioni di I/O.

+1
Inoltre, gestendolo come interrupt il tuo “fai qualcosa” lo metti in una void e lo esegui ogni volta che si verifica l’evento, mentre nel normale loop devi aspettare che il puntatore ripassi “da quelle parti” per il controllo dell’evento.

leo72: (Pin Change Interrupt) con la relativa libreria, puoi monitorare tutti i piedini del micro che abbiano funzioni di I/O.

Presumo che l'inserimento di librerie vada ad "ingrassare" il codice Per cui se ne servono 2 o 3 tanto vale usare un flag di appoggio

A proposito di flag come questo vedo che in parecchi esempi lo stato LOW e HIGH viene associato ad una variabile int Non sarebbe piu' corretto usare una boolean ?? con TRUE e FALSE

leo72: Vox clamantis in deserto

Se la prendiamo nel suo significato originale sei presuntuoso XD XD XD Se invece la intendi come modo di dire , sei un pessimista . Pendono tutti dalle tue labbra o meglio dalla tua tastiera :grin:

Ciao e grazie di aver portato avanti la discussione

Bruno L.

brunol949:

leo72: (Pin Change Interrupt) con la relativa libreria, puoi monitorare tutti i piedini del micro che abbiano funzioni di I/O.

Presumo che l'inserimento di librerie vada ad "ingrassare" il codice Per cui se ne servono 2 o 3 tanto vale usare un flag di appoggio

L'inclusione della libreria la fai 1 volta sola, per cui essa "ingrassa" di qualche centinaio di byte il codice 1 sola volta. Poi le funzioni di gestione ingrassano il codice in base a quante ne metti. Certo se monitori tutti i pin allora oltre a rallentare il micro crei uno sketch "obeso" (per rimanere in tema mangereccio :P).

A proposito di flag come questo vedo che in parecchi esempi lo stato LOW e HIGH viene associato ad una variabile int Non sarebbe piu' corretto usare una boolean ?? con TRUE e FALSE

Boolean oppure byte. Tieni presente che il tipo boolean occupa comunque sempre 1 byte, dato che il byte è il più piccolo elemento indirizzabile in memoria dal codice. HIGH e TRUE sono poi alias per "1" mentre LOW e FALSE sono alias per "0".

leo72: Vox clamantis in deserto

Se la prendiamo nel suo significato originale sei presuntuoso XD XD XD Se invece la intendi come modo di dire , sei un pessimista . Pendono tutti dalle tue labbra o meglio dalla tua tastiera :grin:

Ciao e grazie di aver portato avanti la discussione

Bruno L.

"Voce di uno che grida nel deserto", l'ho messo tempo fa perché, come Menniti, c'è stato un periodo in cui mi pareva che i miei interventi fossero "leggermente" ignorati XD

Alla faccia del paragone!!! E per dire che sei uno ignorato da tutti ti paragoni proprio a S. Giovanni Battista che riempiva il deserto di folle? :astonished: Da quant'è che non entri in una Chiesa per ascoltare una S.Messa? :D

Non l'ho assunta nel significato originale (riferito al Battista) ma in quello più moderno di "persona inascoltata" :P

PS: l'ultima messa l'ho presa 1 mesetto fa. Ma poi non sempre riesco la domenica ad andare in chiesa. Ti ricordo che io lavoro anche 1 domenica sì ed 1 no, quindi a meno che il prete non venga a dirmela sul posto di lavoro, è un po' difficile essere in 2 posti contemporaneamente, almeno non fino a quando mi faranno santo ed avrò perciò il dono dell'ubiquità! :stuck_out_tongue_closed_eyes: