/* 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);
}