X-Git-Url: http://git.piffa.net/web?a=blobdiff_plain;f=esempi%2Fsnippets%2Flettura_servo_ch_pulse%2Flettura_servo_ch_pulse.ino;fp=esempi%2Fsnippets%2Flettura_servo_ch_pulse%2Flettura_servo_ch_pulse.ino;h=ccd6c68a2d13fd46fb1fade4e383b40d23a8d156;hb=b8a84f85fea878902ab2e9c7ac65525d7abafd24;hp=f138c84ce7db7ef089db54da639714035db56dbd;hpb=4f1a2108ba34533e92d1aa7e84328ea36df08f22;p=aerei diff --git a/esempi/snippets/lettura_servo_ch_pulse/lettura_servo_ch_pulse.ino b/esempi/snippets/lettura_servo_ch_pulse/lettura_servo_ch_pulse.ino index f138c84..ccd6c68 100644 --- a/esempi/snippets/lettura_servo_ch_pulse/lettura_servo_ch_pulse.ino +++ b/esempi/snippets/lettura_servo_ch_pulse/lettura_servo_ch_pulse.ino @@ -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 -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); }