]> git.piffa.net Git - aerei/blob - esempi/snippets/lettura_servo_ch_pulse_millis/lettura_servo_ch_pulse_millis.ino
Clean Up
[aerei] / esempi / snippets / lettura_servo_ch_pulse_millis / lettura_servo_ch_pulse_millis.ino
1
2 /* Lettura di un canale servo della RX
3
4    Lettura tramite la funzione pulsein
5    Utilizzabile su qualunque PIN
6
7    Il codice e' blocking fin tanto che il segnale passa da RISE a FALL
8    quindi blocca per 1-2ms a ogni esecuzione. Con la variabile freq
9    si imposta ogni quanto fare una lettura.
10
11
12 */
13
14 #define DEBUG
15 #include <common.h>
16
17 unsigned long currentMillis; // timestamp reference per millis per tutto il loop
18
19 // Variabili
20 const byte chPin = 2; // PIN su cui e' collegato il canale
21 long unsigned chStamp = 0; // Timestamp per
22 unsigned int chIn = 1500; // Valore catturato
23 unsigned int chValue = 1500; // Valore computato
24 unsigned int freq = 200 ; // Ogni quanti millisecondi leggere il valore
25 int mid_point = 1500; // Punto medio per calibrazione
26 // Attenzione che pulsein e' blocking
27
28 void setup() {
29 // Funzione relativa a calibrazione: per il throttle si puo' evitare
30     mid_point =  calibraTrim(chPin)  ; 
31
32 #ifdef DEBUG
33 Serial.begin(9600); // Warning: interrupts e serial potrebbero dare problemi
34 #endif
35 } ;
36
37 void loop() {
38     currentMillis = millis(); // Timestamp per tutto il loop
39
40 // Lettura ailerons channel ogni 200ms
41     if (currentMillis - chStamp >= freq) {
42
43         chIn = pulseIn(chPin, HIGH, 25000);
44         if (chIn != 0 && chIn > 1000 && chIn <2000)  {
45             // get only resonable values
46             chValue = chIn;
47             chStamp = currentMillis ;
48         } ;
49     };
50
51 // do something with    chValue
52 #ifdef DEBUG
53     Serial.print(chValue);
54     Serial.print(" - base: ");
55     Serial.println(mid_point);
56     delay(200);
57 #endif
58
59 }