Control de código en monitor serie

Buenas llevo poco con arduino y quisiera saber como poder hacer funcionar mi código en el monitor serie de arduino,sé que debo poner serial.begin(9600); con esto inicio la comunicación y un serial.println para ver en el monitor pero no soy capaz de hacerlo funcionar bien ya que es un código largo y quisiera hacer funcionar alguna de las funciones básicas del código en el monitor,si alguien me pudiese ayudar se lo agradecería Gracias de antemano

Más detallado por favor, que no entendí ni papa :confused:

Jajaja la verdad es que me expresé un poco mal Tengo hecho un código de un cronómetro con millis tiene varias funciones y quisiera controlarlo y verlo funcionar desde el monitor serie de arduino,poder iniciarlo con algunas funciones que le puse y al pulsar el botón que pare e inicie, he estado investigando cómo hacerlo pero no soy capaz se que necesito poner Serial.begin.(9600); Serían.printnl Pero no logro hacerlo funcionar en ni verlo en el monitor Gracias

A ver... comandar vía serial + visualizar el funcionamiento; y detener con un botón. Esa es la idea?

Si,pero lo del boton me refiero a la funcion que tiene el cronometro q lo pueda parar pulsando el pin de arduino y ver en el monitor el tiempo marcado,es decir comandar y visualizar desde el monitor como tu dices

Para realizar todo a la misma vez, se realiza lo siguiente. Hasta el momento tengo entendido que es: iniciar desde el monitor serie, y parar desde un botón; e inmediatamente imprimir el lapso resultante.

unsigned long tInicio; // Momento del inicio del conteo
volatile unsigned long tParada; // Momento en que se detiene
boolean contando = false; // Evita reiniciar la cuenta si ya fue iniciada
volatile boolean detenido = false; // Indica si el botón de parada fue pulsado

void setup() {
  Serial.begin(9600);
  pinMode(2, INPUT_PULLUP);
  // Quizá no lo sabías, pero con INPUT_PULLUP sólo necesitas tener un botón entre dicho pin y tierra (GND);
  // así ya no hacen falta resistencias o algo por el estilo.
}

void loop() {
 if (!contando) // Ya se había iniciado el conteo?
   if (Serial.available()) { // Ha recibido algo?
     // Aquí cualquier byte que reciba, inicia la cuenta.
     // Si la lista de comandos es múltiple, entonces aquí se debe hacer el read y el "switch case" pertienentes.
     Serial.flush(); // Al recibir un único byte, el resto no nos interesa.
     contando = true;
     tInicio = millis(); // Y... comienza el conteo.
     attachInterrupt(0, parar, FALLING); // A partir de aquí, el botón es tomado en cuenta para detenerlo.
   }

  if (detenido) { // Si el botón ya se había pulsado (no se cumple si no se había iniciado la cuenta previamente)
    detenido = contando = false; // Listo para volver a empezar
    mostrarTiempo(); // El nombre lo dice todo
    Serial.flush(); // Puede evitar un repentino reinicio de la cuenta
  }
}

void parar() { // Lo que sucede el presionar el botón (cuando aplica)
  tParada = millis(); // Momento en que la cuenta se detuvo
  detachInterrupt(0); // Ignorar el botón. Así hasta que el conteo se reinicie, y este sea liberado
  detenido = true; // Decirle al programa principal (loop) que ya terminó
}

void mostrarTiempo() {
  // Las siguientes siete líneas son los cálculos necesarios para "separar" el tiempo transcurrido:
  // en horas, minutos, segundos y milisegundos.

  unsigned long lapso = tParada - tInicio;
  unsigned int mseg = lapso %1000;
  lapso /= 1000;
  byte seg = lapso % 60;
  lapso /= 60;
  byte min = lapso % 60;
  unsigned int hr = lapso / 60;

  char tiempo[20];
  sprintf(tiempo, "%02d:%02d:%02d.%03d",
  hr, min, seg, mseg); // Convertir a texto los resultados
  Serial.println(tiempo);
  // Debería imprimir el tiempo en formato hh:mm:ss.msmsms (milisegundos con tres dígitos)
}

Debido a que el búfer serial se revisa cuando se llegue a esa parte en el flujo del programa (+ otros factores), podría haber un ligero retardo de 3 o 4 milisegundos desde el momento en que algo es enviado al Arduino.

La idea de usar interrupciones externas, es que el cronómetro se detenga en momento justo en que el botón es presionado, y no cuando el flujo del programa lo permita.

El “corazón” de millis ofrece una precisión bastante aceptable, mas no la mejor (se nota solo en lapsos muy largos).
Es más, ya me motivaste a crear un reemplazo de millis, que ofrezca la mejor precisión que un Arduino puede dar :slight_smile:

Muchas gracias lo probare a ver q tal,millis es aceptable para cosas que no requieran un tiempo estricto pero contra mas se exprima arduino mejor jajaja