Samuel M.H. 's technological blog

Wednesday, May 9, 2012

Un cronómetro para Arduino

Siguiendo con la programación para Arduino, la pantalla LCD que tengo y las librerías de la anterior entrada, me siento orgulloso de presentarles la librería SMH_Chronometer.


Las principales características son las siguientes:
  • Cronómetro en el que se muestran horas, minutos y segundos.
  • Posibilidad de almacenar una marca de tiempo extra.
  • Basada en la función millis().
  • Mientras exista el objeto, es capaz de simular que corre en segundo plano. Se puede medir el tiempo aunque no se ejecute la función.
  • Función extra uptime que dice cuánto tiempo pasó desde que se reinició la placa.


Posibles fallos:
  • Al estar basado en la función millis(), la mayoría de errores vendrán de ahí y de sobrepasar el límite de un unsigned long. Según la documentación, tardará unos 50 días en desbordarse. Recomiendo mirar la documentación http://arduino.cc/en/Reference/Millis 

Observaciones:
  • Depende de las librerías SMH_AnalogKeyPad y SMH_LiquidCrystal.
  •  La primera aproximación la hice usando la función delay(), pero los ciclos extra de computación y Entrada/Salida hacían imprecisa la medida de tiempo. Además, con la referencia semiabsoluta de millis(), puedo simular que el cronómetro funciona en 2º plano.
  • Como el tiempo que suelo tener encendido de continuo el Arduino no llega ni de lejos a 50 días, no me he preocupado de los posibles fallos, pero si tu aplicación es crítica, por favor tenlo en mente.

Disponible en el repositorio: La dirección del repositorio es: http://code.google.com/p/smh-arduino/

2 comments:

  1. Hi Samuel,

    Looking over the net for a function that would return only the uptime in the arduino and I found your's. The thing I don't know is how to use it without the lcd and the keypad since chrono.chronometer(&lcd,&kp); I think is feeding data to lcd and kp. PS I am a newby.

    ReplyDelete
    Replies
    1. Hi Daniel,

      Thank you for reading my blog. The chronometer widget is meant to be a ... widget!! This means the complexity is on the graphical/user control area. Not in how to measure the time functions.

      I guess what your are looking for is the function millis(). In fact this chronometer is based on that function.

      millis() returns you the uptime the arduino has been working . It has 2 main withdraws:

      - Every time is arduino is reseted or powered off, the counter starts again in 0. Useless to make actual clocks (calendars).
      - The maximum amount of time you can track is 50 hours more or less. Then the timer resets and you may need a variable to count this 50 hour cycles.

      More info here.
      http://arduino.cc/en/Reference/Millis

      Sorry for being so late. :(

      Delete

Copyright © Samuel M.H. All rights reserved. Powered by Blogger.