]> git.piffa.net Git - aerei/blob - aerei/cirso/trigger_on/trigger_on.ino
Clean Up
[aerei] / aerei / cirso / trigger_on / trigger_on.ino
1 /* Aereo di Cirso
2
3 Output:
4    2 LED ai lati con lampeggio alternato
5    1 LED in coda lampeggio a freq doppia
6
7 Input:
8    1 interruttore su interrupt 0 per accensione / spegnimento luci
9
10 Note:
11    Realizzato con un semplice ciclo IF per ON / OFF,
12    lo sketch successsivo ha un macchina a stati per gestire
13    la transizione ON <-> OFF con una dissolvenza.
14 */
15
16 #include <common.h>
17
18 // Variabili per interrupt 0
19 volatile unsigned int chValue = 1500; // Valore computato
20 volatile unsigned int chStart = 1500; // Inizio rilevamento
21
22 // Instanziamo un LED fuori dal loop
23 Lampeggiatore left = 5;
24 Lampeggiatore right = 6;
25 Lampeggiatore coda = 9;
26
27 void setup() {
28     // I PINs vengono impostati dal constructor al momento
29     // della dichiarazione dell'ogetto.
30
31     attachInterrupt(0, chRise, RISING); // PIN 2 su 328p / 168
32     right.Invert() ;  // Opzionale: inverte l'ordine del lampeggio da
33     // HI -> LOW --> LOW -> HI
34     // per avere 2 LED che lampeggiano alternativamente
35 }
36
37 void loop() {
38
39     if (chValue > 1500) {
40         left.Blink();   // Lampeggia con un default di 1sec (0.5 HI 0.5 LOW)
41         right.Blink();
42         coda.Blink(1000); // Lampeggio in 1000ms = 1 secondo
43     } else {
44 // sarebbe carino mettere una transizione da on -> off con un fade down...
45         left.Low();
46         right.Low();
47         coda.Low();
48     } ;
49 }
50
51 // Functions
52 void chRise() {
53     attachInterrupt(0, chFall, FALLING);
54     chStart = micros();
55 };
56
57 void chFall() {
58     attachInterrupt(0, chRise, RISING);
59     chValue = micros() - chStart;
60 };