Samuel M.H. 's technological blog

Sunday, September 2, 2012

SMH_Scheduler

I've just uploaded to the repo a new library I coded this morning. It's called SMH_Scheduler and it allows the programmer to execute functions every x seconds.

It's not concurrency nor realtime because what it only does is checking it's time to call a function.

The way it should be used is the following.
  1. Create the scheduler object.
  2. Add the desired functions and the period between conecuent calls.
  3. Call the run method on your loop or whenever you'd like to call the function if it was time.

Features:
  • Call a function every x milliseconds.
  • Delay the first execution of a function x milliseconds.
  • It's possible to pass data to the function.
  • Easy to use.

Cons:
  •  I'm afraid it'll work properly only till the max value of the millis() function.
  • If a function never ends, the scheduler cannot recover the control.
  • Not realtime, a function is called at time or later.
  • If two functions should execute at the same time, takes priority the lastest added one.


Here I leave the example. It prints through the serial port at specific intervals:
1:  /*  
2:   * AUTHOR:  Samuel M.H. <samuel.mh@gmail.com>  
3:   * LAST REV: 2-Sep-2012  
4:   * DESCRIPTION:  
5:   *  Example for the SMH_Scheduler Arduino library.  
6:   *  It shows how it's possible to schedule functions  
7:   *  over the time.  
8:   *  
9:   *  The arduino calls functions at defined times  
10:   *  that print strings through the serial port.  
11:   *  
12:   * WARNING:  
13:   * - It does NOT provide REALTIME executions.  
14:   * - Executions are NEVER done BEFORE the time set (period).  
15:   * - If a function never returns, the other functions  
16:   *   will never be called.  
17:   *  
18:   * LICENSE: GPL V3 <http://www.gnu.org/licenses/gpl.html>  
19:  */  
20:  #include <SMH_Scheduler.h>  
21:  //Construct the object  
22:  SMH_Scheduler sched;  
23:  //Print Hello  
24:  void hello(void *data){  
25:   Serial.println("Hello");  
26:  }  
27:  //Print World  
28:  void world(void *data){  
29:   Serial.println("World\n");  
30:  }  
31:  //Print a String taken from data  
32:  void print(void *data){  
33:   Serial.println((char*)data);  
34:  }  
35:  void setup(){  
36:   Serial.begin(9600);  
37:   /*  
38:   * Here we configure our task list.  
39:   * WARNING: take into consideration the tasks are executed in reversed order,  
40:   * so if there are 2 tasks that should be executed at the same time, the last one  
41:   * you added will be executed first.  
42:   */  
43:   //Print Hello every second  
44:   sched.addTask(&hello, 1000);  
45:   //Print World every second but delay the start 0,5 seconds  
46:   sched.addTask(&world, 1000, 500, NULL);  
47:   //Print Bazinga! every 2 seconds by calling a function with a parameter.  
48:   sched.addTask(&print, 2000, 0, (void*)"Bazinga!\n");  
49:  }  
50:  void loop(){  
51:   //Call to the scheduler  
52:   sched.run();  
53:  }  

Thursday, June 14, 2012

DEMO - SMH_Song - Super Mario Bros

This is the third video example of the SMH_Song library. How to play the Super Mario Bros main theme on your Arduino.


The component list is pretty straightforward, the same as in previous videos of the same library:
  • 1x arduino board.
  • 1x 100 Ohm resistor 
  • 1x speaker 8 Ohm 0.08W
  • Wires

If you want the code, you can download it from the repository: http://code.google.com/p/smh-arduino/

And that's all. If you have any question or a request, or even better, you have coded a song and want me to include it as an example, please contact me.

Disclaimer: I'm NOT  in the mood of jumping on mushrooms or turtles, I just liked the song. Please take caution when hitting bricks  with your head.

Thursday, June 7, 2012

DEMO - SMH_Song - Nyan Cat

Here is the video of the Nyan Cat example of the SMH_Song library.


COMPONENTS:
1x arduino board.
1x 100 Ohm resistor
1x speaker 8 Ohm 0.08W

Thursday, May 31, 2012

DEMO - SMH_Song - Lambada

Here is the video of the Lambada example of the SMH_Song library.


COMPONENTS:
1x arduino board.
1x 100 Ohm resistor
1x speaker 8 Ohm 0.08W

Wednesday, May 30, 2012

Demo - SMH_7SD

Here is a demo showing what the SMH_7SD arduino library can be used for. Basic text writing on a seven segment display.


From the youtube description:

How to control a seven segment display in order to show text with an arduino and the SMH_7SD library.

It's a very simple electronic project and very afordable.

COMPONENTS:
1x arduino board.
1x seven segment display. (It's common anode type but the library allows controling a common cathode one as well.)
1x 330Ohm resistor to the common anode.
9x cable. A cable for each segment connected to an arduino digital output and the cable that connects the common anode to the 5V.

NOTES:
Although I've used only one resistor connected to the common anode, this is not a good thing. The good way will be connecting a 1KOhm resistor to each segment pin (8x 1KOhm resistors) so the voltage they use is always the same. My decision was based on simplicity.

EXTRA:
It's possible to make stroboscopic-like effects by changin the time the characters are being shown (1 ms) or not (7ms). If you move fast enough (with care please) the display, you could draw at least 3 characters on the air.

Monday, May 21, 2012

Los alemanes y sus cosas

Os dejo un par de vídeos hechos en Alemania y por alemanes.

El primero sobre el pleno empleo.


Y el segundo sobre sobre la seguridad laboral en el manejo de carretillas elevadoras. Todo un lujo el tenerlo traducido al castellano.
Stapler Fahrer Klaus Der erste Arbeitstag (el carretillero Klaus, su primer día de trabajo).



¿Exagerado? Tampoco es que ande tan lejos de la realidad.



Y es que cuando se salen de lo habitial, con esa fama de cuadriculados que tienen nuestros vecinos de centroeuropa, el resultado es si cabe más impactante.

Nota mental: incluir mis capacidades sanguinarias en los currículos que mande a empresas alemanas.

Friday, May 18, 2012

Visualizador de 7 segmentos para arduino

Hoy publico la librería para Arduino SMH_7SD qué sirve para controlar visualizadores de siete segmentos o SSD (Seven Segment Display).


Las principales características son:
  • Mostrar cadenas de texto con caracteres alfanuméricos a través del visualizador.
  • Visualizar caracteres o  estados de segmento encendido/apagado creados por el usuario.
  • Ajustar los tiempos de encendido-apagado entre caracteres para lograr diferentes efectos, incluso estroboscópicos.
  • Especificar si el visualizador es de ánodo o cátodo común.

Como es habitual, la instalación consiste en copiar la carpeta SMH_7SD en el directorio de librerías de Arduino.

Disponible en el repositorio: http://code.google.com/p/smh-arduino/

Wednesday, May 16, 2012

Formalizando las bibliotecas

He reconvertido todas las librerías (bibliotecas para los puristas) que publiqué la semana pasada para que se adapten mejor a las recomendaciones del IDE de Arduino.

Con este nuevo formato, solo hay que copiar la carpeta de la librería al directorio de librerías  de arduino (en mi caso /usr/share/arduino/libraries) y reiniciar el IDE.

Aparecerán las nuevas bibliotecas disponibles así como sus ejemplos para usarlos en nuestros proyectos. ¡Disfrutad!


Disponible en el repositorio: http://code.google.com/p/smh-arduino/

Thursday, May 10, 2012

Música para tus arduinos

Con un arduino, una resistencia, un altavoz  puesto en un pin digital y esta librería, tendrás en un santiamén un cacharro capaz de reproducir cualquier canción digna de un  juguete de un todo a cien (todo a 1 €).

O lo que es lo mismo, publico la librería SMH_Song para la plataforma Arduino.


Características principales:
  • Basada en la librería tone.
  • Funcionalidad reducida a llamar a un método estático. SMH_Song::play(patilla, canción) lo hace todo!!!
  • Forma sencilla de escribir-transcribir tus propias canciones. Con constantes para notación americana y española (o la que me enseñaron en clase).
  • Es posible secuenciar las canciones, es decir, partir las canciones en cachos que se repiten y llamar independientemente a esos cachos. Ahorras tiempo de escribir la canción y ahorras código evitando duplicidades.
  • El sonido es de onda cuadrada y de un canal. No tiene polifonía. Resumiendo, es un poco cutre.

Posibles fallos:
  • Las canciones van como  una constante de código. Puede ser que el programa ocupe más que el espacio disponible y se oigan pitidos raros.


Extra. Por ser tan fieles a mi blog, os regalo 2 canciones.
  •  La Lambada, dedicada a todos aquellos que os disteis cuenta de que todo cacharro chino tenía al menos esta canción. Pepe va por ti.
  • Super Mario Bros. Porque quiero y porque puedo.

Si hacéis alguna canción, no seáis rancios y mandádmela. O por lo menos subid el vídeo a youtube.

Disponible en el repositorio: http://code.google.com/p/smh-arduino/

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/

Monday, May 7, 2012

smh-arduino

Empiezo proyecto en google code donde iré subiendo las librerías, programas y esquemáticos que hago para Arduino.
La licencia elegida es la GPL v3

La primera aportación consta de:
  •  SMH_AnalogKeyPad: un pequeño driver para mapear pulsaciones de un teclado conectado a una entrada analógica. Tiene funciones de repetición de tecla.
  •  SMH_LiquidCrystal: envoltura para la clase original de arduino que controla una pantalla LCD y a la que le he añadido funciones para apagar la luz que retroilumina.
  •  SMH_Menu: clase para la generación y navegación por menús.

La dirección del repositorio es: http://code.google.com/p/smh-arduino/
Copyright © Samuel M.H. All rights reserved. Powered by Blogger.