]> git.piffa.net Git - aerei/blob - esempi/snippets/tog_func/tog_func.ino
Aero, toggle on/off
[aerei] / esempi / snippets / tog_func / tog_func.ino
1 /* Toggle con transizioni tra On | OFF con pulseIn
2    Funzione
3
4
5 Sketch di esempio per accensione spegnimento di tutto l'impianto luci
6 tramite un interruttore a due posizioni della radio utilizzando pulseIn.
7
8 Output esempio: 
9    1 Lampeggiatore in coda in PWM
10
11 Input:
12    1 interruttore su interrupt 0 per accensione / spegnimento luci
13
14
15    Il codice e' blocking fin tanto che il segnale passa da RISE a FALL
16    quindi blocca per 1-2ms a ogni esecuzione. Con la variabile freq
17    si imposta ogni quanto fare una lettura.
18
19
20 */
21
22 #define dEBUG
23 #include <common.h>
24
25 unsigned long currentMillis; // timestamp reference per millis per tutto il loop
26
27
28 void setup() {
29    Serial.begin(9600);
30 #ifdef DEBUG
31 Serial.begin(9600); 
32 #endif
33 } ;
34
35 void loop() {
36 currentMillis = millis(); // Timestamp per tutto il loop
37
38
39 if (toggleRead(A0)) {
40     // Luci accese
41     Serial.println("Luci On ");
42 } else {
43     // luci spente
44     Serial.println("Luci Off ");
45 } ;
46
47
48 }
49
50 boolean toggleRead(byte togglePin) {
51 // Variabili Toggle
52 long static unsigned toggleTime ; // Timestamp per switch
53 static int toggleValue = 0 ; // Valore catturato
54 static int toggleIn = 0 ; // Valore filtrato
55 const int soglia = 1400; // soglia per scatto toggle a 2 posizioni
56 const unsigned int freq = 400 ; // Ogni quanti millisecondi leggere il valore
57
58     if (currentMillis - toggleTime > freq) {
59
60         toggleIn = pulseIn(togglePin, HIGH, 25000);
61         if (toggleIn != 0 && toggleIn > 1000 && toggleIn <2000)  {
62             // get only resonable values
63             toggleValue = toggleIn;
64             toggleTime = currentMillis ;
65         } ;
66     };
67 #ifdef DEBUG
68     Serial.print(toggleIn);
69     Serial.print(" - Filtrato: ");
70     Serial.println(toggleValue);
71 #endif
72
73 if (toggleValue > soglia) {
74     return 1;
75 } else {
76     return 0;
77 } ;
78
79 }