General

El SDK de Arduino no compila el sketch completo bajo Fedora

Al tratar de hacer algunos sketch para novatos como ‘blink’ que consiste en hacer titilar un LED, La rutina que lo hace encender y apagar es ignorada y a muchos les da la impresión que es que su tarjeta Arduino esta defectuosa.

Al tratar de hacer algunos sketch para novatos como 'blink' que consiste en hacer titilar un LED, La rutina que lo hace encender y apagar es ignorada y a muchos les da la impresión que es que su tarjeta Arduino esta defectuosa.
El Arduino SDK con el Blink Bug 734855 ignora la rutina de prender y apagar el LED en el ejemplo blink

Aunque no he tenido mucho tiempo para jugar con Bug que tiene el SDK (o por lo menos la versión arduino-0022-4.fc15.noarch). El problema ocurre al tratar de hacer algunos sketch para novatos como lo es el de ‘blink’ que consiste en hacer titilar un LED. Veamos el siguiente código que esta basado en los ejemplos de blink:
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
}

Como ven el sketch le indica a Arduino que el pin 13 va a ser usado como salida y que va a prender y apagar esa señal indefinidamente por intervalos de medio segundo. Aunque el sketch es simple, al compilarlo y cargarlo con Fedora 15 usando el SDK versión arduino-0022-4 el sketch no se ejecuta apropiadamente, el procedimiento de compilación y de carga a la Arduino sucede sin ningún error pero el LED no hace nada.

 

La solución
Aparentemente este bug es provocado por rutinas de optimización de código al momento de compilar el sketch. Durante este proceso nuestra rutina que hace que el LED titile es descartada y eliminada del binario final. Para solventar este problema, solo debes de hacer una llamada de una variable que este afuera del la rutina ‘setup’, el código quedaría así:
boolean done = true;
void setup() {
pinMode(13, OUTPUT);
done = false;
}
void loop() {
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
}

Fíjense como al inicio se declara la variable ‘done’ con un valor de ‘true’ el cual es alterado dentro de la rutina ‘setup’ obligando al compilador a analizar mas detenidamente el código afuera de la rutina ‘setup’.

Me he tomado la libertad de mi Arduino, me he percatado de un reportar este Bug al responsable de este paquete, pueden seguir el avance de su solución en el Bugzilla de Red Hat Bug #734855

2 Comments

  1. Yo tuve ese mismo problema y otros relacionados con el ethernet shield, el cual no funciona bien en Fedora 15 por un tema de versiones con gcc-avr, muy nuevas en F15. Así que no me queda otra que cargar el código desde Windows o un ubuntu.

  2. gilgamezh

    Hola, el mismo problema en ArchLinux.

    gracias por el dato!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

La moderación de comentarios está activada. Su comentario podría tardar cierto tiempo en aparecer.