]> git.piffa.net Git - aerei/blob - esempi/snippets/lettura_servo_interrupt_change/lettura_servo_interrupt_change.ino
478f0346a7f82ccfecc466b526698433a953f5ac
[aerei] / esempi / snippets / lettura_servo_interrupt_change / lettura_servo_interrupt_change.ino
1
2 /* Lettura di un canale servo della RX
3
4    Lettura tramite i pin change interrupts
5    Utilizzabile su tutti i PINS
6
7 - http://playground.arduino.cc/Main/PinChangeInterrupt
8
9 */
10
11 #include <common.h>
12
13
14 // Variabili per interrupt 0
15 unsigned int chValue = 1500; // Valore computato
16 unsigned int chStart = 1500; // Inizio rilevamento
17
18 // Variabili per autocalibrazione
19 const byte chPin = 2; // PIN per la calibrazione
20 int mid_point = 1500;
21
22 void setup() {
23  pinMode(13,OUTPUT);  // LED
24     // Funzione relativa a calibrazione con pulsein:
25     mid_point =  calibraTrim(chPin) ; // Calibrazione del TRIM attivo sul canale
26   pciSetup(10);
27 Serial.begin(9600); // Warning: interrupts e serial potrebbero dare problemi
28 } ;
29
30 void loop() {
31     Serial.print(chValue);
32     Serial.print(" - ");
33     Serial.println(mid_point);
34     delay(200);
35 }
36
37 // Functions
38 // Install Pin change interrupt for a pin, can be called multiple times
39 void pciSetup(byte pin)
40 {
41     *digitalPinToPCMSK(pin) |= bit (digitalPinToPCMSKbit(pin));  // enable pin
42     PCIFR  |= bit (digitalPinToPCICRbit(pin)); // clear any outstanding interrupt
43     PCICR  |= bit (digitalPinToPCICRbit(pin)); // enable interrupt for the group
44 }
45
46 ISR (PCINT0_vect) // handle pin change interrupt for D8 to D13 here
47  {    
48      digitalWrite(13,digitalRead(8) and digitalRead(9));
49  }