EDIT: 24/03/14 libreria v 0.0.2 inserita come file attached
Una altra inutile libreria ... 
Molti sketch su Arduino si limitano a monitorare il valore di uno più sensori (più in generale di una o più variabili) attivando delle “azioni” al superamento di determinate soglie.
TRIGWIZ è una libreria dedicata a questa classe di applicazioni. E’ “trivial” nel senso che offre delle funzionalità minime (anche se non banali), è “trigger” in quanto, al verificarsi di una condizione definita dall’utente (evento), attiva una callback. E’ “wizard” in quanto pensata per una codifica semplice.
Gli “eventi” attualmente gestiti dalla libreria sono costituito dal verificarsi di una delle seguenti condizione
• il valore della variabile è uguale ad un dato valore impostato dall’utente (TW_ISEQUAL)
• il valore della variabile è inferiore ad un dato valore impostato dall’utente (TW_ISLOWER)
• il valore della variabile è superiore ad un dato valore impostato dall’utente (TW_ISHIGHER)
• il valore della variabile è all’interno di un certo intervallo di valori, definito da un valore minimo e daun valore massimo (TW_ISINRANGE)
Dal punto di vista pratico l’utilizzo della libreria prevede che l’utente definisca una variabile globale (i tipi supportati al momento sono int, float e uint8_t) da tenere “sott’occhio” e due funzioni o callback:
• una funzione chiamata di “read” che legga il valore del sensore (o comunque vari il valore della variabile sotto osservazione) ad ogni chiamata
• una funzione chiamata di “action” che compia l’azione definita dall’utente al verificarsi di un evento
In attached un breve tutorial.
Se la libreria interessa qualcuno la allego... ma attenti che è in prebeta ... 
triwwiz_v_0_2.zip (28.7 KB)
va beh... io metto la libreria... 
Qui di seguito si riporta uno sketch di esempio che utilizza un sensore di temperatura TMP36.
Si vuole compiere azioni diverse al verificarsi dei seguenti eventi:
• quando la temperatura scende sotto i 22°
• quando la temperatura è compresa tra 22° e 25°
• quando la temperatura è superiore ai 25°
Il codice completo dell’esempio è il seguente:
?
#include "trigwiz.h"
int sensorPin =0; // pin dati del sensore TMP36
float f=20.0; // variabile da tenere sotto controllo
trigwiz trig; // oggetto trigwiz
void setup(){
_trig *t; // puntatore al trigger creato dalla funzione addTrig
Serial.begin(19200);
t=trig.addTrig(&f,TW_ISLOWER,22.0,readTMP36,act1TMP36);
t=trig.addTrig(&f,TW_ISINRANGE,22.0,25.0,readTMP36,act2TMP36);
t=trig.addTrig(&f,TW_ISHIGHER,25.0,readTMP36,act3TMP36);
}
void loop(){
trig.watch(); // controlla tutti i trigger create e lancia le azioni
}
//**********************************************************
// legge il sensore e restituisce il valore della temperatura
//**********************************************************
float readTMP36(){
return((((analogRead(sensorPin)*5.0)/1024.0)-0.5)*100.0);
}
//**********************************************************
// azioni al verificarsi degli eventi
//**********************************************************
void act1TMP36(float f){
Serial.println("NORMAL: TEMPERATURE <22");
}
void act2TMP36(float f){
Serial.println("WARNING: temperature is between 22 and 25");
}
void act3TMP36(float f){
Serial.println("ALARM: temperature >25");
}
La libreria l'ho messa in attached al primo post..
Scusa @brunialti non ho capito una cosa (non ho sbirciato nella libreria)
Nell'esempio hai 3 funzionalità da verificare su una variabile, ma quando fai il .watch() richiama 3 volte la funzione lettura del valore ?
Si in questa beta si. Ma sto modificando per far si che se si mette NULL al posto della funzione read quando si definisce il trigger con addTrig , la libreria fa solo il controllo sulla condizione.
Nell'esempio si definirà quindi un trig con callback di read solo sulla primo o ultimo trig di una specifica variabile...
Aggiornata libreria. Ora se si mette NULL al posto di una callback di read TRIGWIZ, non effettua la lettura (non chiama nessuna callback). Nell'esempio si metterà quindi una read solo all'ultimo trig.
tra l'altro ho notato che avevo postato una libreria con il file .cpp sbagliato... E' stata scaricata due volte ... sorry...