]> git.piffa.net Git - aerei/blob - esempi/snippets/lettura_servo_interrupt_doppio/lettura_servo_interrupt_doppio.ino
db1922a96604e121fdd25cc8fac94bd500b71144
[aerei] / esempi / snippets / lettura_servo_interrupt_doppio / lettura_servo_interrupt_doppio.ino
1
2 /* Lettura di 2 canali servo della RX con interrupts
3
4    Lettura tramite i due external interrupt ala Arduino
5    Utilizzabile solo sui PIN 2-3
6
7 */
8
9 #include <common.h>
10
11
12 // Variabili per interrupt 0 si PIN 2
13 volatile unsigned int chValue2 = 1500; // Valore computato
14 volatile unsigned int chStart2 = 1500; // Inizio rilevamento
15
16 // Variabili per interrupt 1 su PIN 3
17 volatile unsigned int chValue3 = 1500; // Valore computato
18 volatile unsigned int chStart3 = 1500; // Inizio rilevamento
19
20 // Variabili per autocalibrazione 0
21 const byte chPin2 = 2; // PIN per la calibrazione
22 int mid_point2 = 1500;
23
24 // Variabili per autocalibrazione 1
25 const byte chPin3 = 3; // PIN per la calibrazione
26 int mid_point3 = 1500;
27
28 void setup() {
29     // Funzione relativa a calibrazione con pulsein:
30     mid_point2 =  calibraTrim(chPin2) ; // Calibrazione del TRIM attivo sul canale
31     mid_point3 =  calibraTrim(chPin3) ; // Calibrazione del TRIM attivo sul canale
32     attachInterrupt(0, chRise2, RISING); // PIN 2 su 328p / 168
33     attachInterrupt(1, chRise3, RISING); // PIN 3 su 328p / 168
34 Serial.begin(9600); // Warning: interrupts e serial potrebbero dare problemi
35 } ;
36
37 void loop() {
38
39     Serial.print("PIN2: ");
40     Serial.print(chValue2);
41     Serial.print(" -base: ");
42     Serial.print(mid_point2);
43
44     Serial.print(" |-| PIN3:");
45     Serial.print(chValue3);
46     Serial.print(" -base: ");
47     Serial.println(mid_point3);
48     delay(200);
49 }
50
51 // Functions
52 void chRise2() {
53     attachInterrupt(0, chFall2, FALLING);
54     chStart2 = micros();
55 }
56
57 void chFall2() {
58     attachInterrupt(0, chRise2, RISING);
59     chValue2 = micros() - chStart2;
60 }
61 // Seconod iterrupt
62 void chRise3() {
63     attachInterrupt(1, chFall3, FALLING);
64     chStart3 = micros();
65 }
66
67 void chFall3() {
68     attachInterrupt(1, chRise3, RISING);
69     chValue3 = micros() - chStart3;
70 }