Envio de Datos ECG utilizando YUN

Hola a todos, tengo un proyecto para realizar un electrocardiograma utilizando un shield ECG y utilizando mi arduino Leonardo y la placa Dragino YUN. El codigo es bastante simple, capturo los datos en el pin A0 y los almaceno en la SD de la placa YUN utilizando la libreria Bridge y FileSystem.

Mi problema es al momento de la captura de datos, necesito realizarlo a traves de un Timer ya que debe ser lo mas exacta posible. Estuve investigando y no se como activar los timers o las interrupciones del Leonardo ya que al utilizar YUN me confundo bastante.

Este es mi codigo, espero me puedan ayudar ya que es un proyecto para mi graduacion de universidad.

#include <FileIO.h>     //FileIO class allow user to operate Linux file system
#include <Bridge.h>   //Serial class provide the interactive between IDE and Yun Shield

int result = 0;
int muestras = 100;
int alarma = 6;
int cont = 0;

void guardar_data()
{
  cont = + 1;
  String dataString = "";
  dataString += String(cont);
  dataString += ",";
  int sensor = analogRead(0);
  dataString += String(sensor);
  File dataFile = FileSystem.open("/mnt/sda1/data/paciente.csv", FILE_APPEND);

  if (dataFile)
  {
    dataFile.println(dataString);
    dataFile.close();
    Serial.println(dataString);
  }
  else
  {
    Serial.println("Archivo no encontrado.");
  }
}

void setup() {
  pinMode(alarma, OUTPUT);
  Serial.begin(115200);
  // Initialize the Serial
  Bridge.begin();
  FileSystem.begin();

  Serial.println("Monitor ECG/EKG.\n");
  delay(50);
  digitalWrite(alarma, HIGH);
  delay(100);
  digitalWrite(alarma, LOW);
  delay(50);
  Serial.println("Capturando datos.\n");
}

void loop ()
{
  noInterrupts();
  if (cont == muestras)
  {
    Serial.println("Captura de datos terminada. Preparando envio de archivo.");
    sonar_alarma();
    delay(50);
    enviar_ftp();
    Serial.println("Archivo Enviado al Servidor FTP.");
  }
  interrupts();
}

void sonar_alarma() {
  digitalWrite(alarma, HIGH);
  delay(100);
  digitalWrite(alarma, LOW);
  delay(100);
  digitalWrite(alarma, HIGH);
  delay(100);
  digitalWrite(alarma, LOW);
  delay(100);
  digitalWrite(alarma, HIGH);
  delay(100);
  digitalWrite(alarma, LOW);
  delay(100);
}

void enviar_ftp()
{
  String result;
  Process p1;   // ready web write
  p1.begin("python");
  p1.addParameter("/mnt/sda1/script/scriptFTP.py");
  p1.run();

  while (p1.available()) {
    char c = p1.read();
    Serial.println(c);
  }
}

yun_sd.ino (1.74 KB)

Puedes usar la librería TimerOne para controlar el Sampleo.

Revisa antes su compatibilidad con YUN o busca una que lo sea.

Gracias el consejo Surbyte. Lamentablemente he intentado con TimerOne, TimerThree, MsTimer2 pero ninguna se ejecuta.

He estado mirando el foro en inglés y esta es la solución que tienen para esto

http://www.suspectdevices.com/blahg/arduino/using-the-timer1-and-timer3-libraries-with-the-arduino-leonardo/

No te preocupes al leer soluciones para Arduino Leonardo, porque tiene similitud con el YUN.

Según este hilo la solución funciona.

EDITO: olvida lo anteriior que si funciona y prueba esta librería que funciona con YUN porque lo tiene probado.

TimerOne para YUN y todos los arduinos