]> git.piffa.net Git - aerei/blobdiff - esempi/snippets/lettura_servo_ch_pulse/lettura_servo_ch_pulse.ino
Snippets per leggere i canali dei servo
[aerei] / esempi / snippets / lettura_servo_ch_pulse / lettura_servo_ch_pulse.ino
index f138c84ce7db7ef089db54da639714035db56dbd..ccd6c68a2d13fd46fb1fade4e383b40d23a8d156 100644 (file)
@@ -1,45 +1,49 @@
 
 /* Lettura di un canale servo della RX
 
-   Lettura tramite la finzione pulsein
+   Lettura tramite la funzione pulsein
    Utilizzabile su qualunque PIN
 
+   Il codice e' blocking fin tanto che il segnale passa da RISE a FALL
+   quindi blocca per 1-2ms a ogni esecuzione.
+   
+   Il segnale dalla rx dovrebbe essere ~50hz,
+   vedere questo sketch $_millis con lettura a intervalli programmabili.
+
 */
 
 #include <common.h>
 
-unsigned long currentMillis; // timestamp reference per millis per tutto il loop
 
 // Variabili
 const byte chPin = A4; // PIN su cui e' collegato il canale
-long unsigned chStamp = 0; // Timestamp per
 unsigned int chIn = 1500; // Valore catturato
 unsigned int chValue = 1500; // Valore computato
-unsigned int freq = 200 ; // Ogni quanti millisecondi leggere il valore
 // Attenzione che pulsein e' blocking
 
+// Variabili per autocalibrazione
+int mid_point = 1500;
+
 void setup() {
     // Funzione relativa a calibrazione:
-//    mid_point =  calibraTrim(chPin) ; // + LED di servizio per monitor calibrazione
+    mid_point =  calibraTrim(chPin) - 10; // Con pulse in si toglie 10
+Serial.begin(9600); // Warning: interrupts e serial potrebbero dare problemi
+
 } ;
 
 void loop() {
-    currentMillis = millis(); // Timestamp per tutto il loop
 
 // Lettura ailerons channel ogni 200ms
-    if (currentMillis - chStamp >= freq) {
-        chStamp = currentMillis ;
-
         chIn = pulseIn(chPin, HIGH, 25000);
         if (chIn != 0 && chIn > 1000 && chIn <2000)  {
             // get only resonable values
             chValue = chIn;
-        } ;
-// Lettura Aileron channel: FAKE con un potenziometro 10K
-// chIn = analogRead(chPin);
-// chValue = 1000 + chIn
     };
 
 
 // do something with    chValue
+    Serial.print(chValue);
+    Serial.print(" - base: ");
+    Serial.println(mid_point);
+    delay(200);
 }