]> git.piffa.net Git - aerei/blobdiff - esempi/snippets/lettura_servo_interrupt_change/lettura_servo_interrupt_change.ino
Snippets per leggere i canali dei servo
[aerei] / esempi / snippets / lettura_servo_interrupt_change / lettura_servo_interrupt_change.ino
diff --git a/esempi/snippets/lettura_servo_interrupt_change/lettura_servo_interrupt_change.ino b/esempi/snippets/lettura_servo_interrupt_change/lettura_servo_interrupt_change.ino
new file mode 100644 (file)
index 0000000..478f034
--- /dev/null
@@ -0,0 +1,49 @@
+
+/* Lettura di un canale servo della RX
+
+   Lettura tramite i pin change interrupts
+   Utilizzabile su tutti i PINS
+
+- http://playground.arduino.cc/Main/PinChangeInterrupt
+
+*/
+
+#include <common.h>
+
+
+// Variabili per interrupt 0
+unsigned int chValue = 1500; // Valore computato
+unsigned int chStart = 1500; // Inizio rilevamento
+
+// Variabili per autocalibrazione
+const byte chPin = 2; // PIN per la calibrazione
+int mid_point = 1500;
+
+void setup() {
+ pinMode(13,OUTPUT);  // LED
+    // Funzione relativa a calibrazione con pulsein:
+    mid_point =  calibraTrim(chPin) ; // Calibrazione del TRIM attivo sul canale
+  pciSetup(10);
+Serial.begin(9600); // Warning: interrupts e serial potrebbero dare problemi
+} ;
+
+void loop() {
+    Serial.print(chValue);
+    Serial.print(" - ");
+    Serial.println(mid_point);
+    delay(200);
+}
+
+// Functions
+// Install Pin change interrupt for a pin, can be called multiple times
+void pciSetup(byte pin)
+{
+    *digitalPinToPCMSK(pin) |= bit (digitalPinToPCMSKbit(pin));  // enable pin
+    PCIFR  |= bit (digitalPinToPCICRbit(pin)); // clear any outstanding interrupt
+    PCICR  |= bit (digitalPinToPCICRbit(pin)); // enable interrupt for the group
+}
+
+ISR (PCINT0_vect) // handle pin change interrupt for D8 to D13 here
+ {    
+     digitalWrite(13,digitalRead(8) and digitalRead(9));
+ }